@Shredder,
post #6
Oj błądzisz, kolego, błądzisz...
Patrz, liczba 16-bitowa to 65535 (w skrócie 64k), w procesorze 16-bitowym rejestry mają po 16 bitów, więc każda wartość przekraczająca 64k, będzie rozbita na dwa rejestry i nie będziesz miał do niej dostępu jako całości, czyli jesli masz liczbę $AABBCCDD ( 2864434397) , to w jednym rejestrze będzie $AABB (43707), a w drugim $CCDD (52445) , więc dla procesora, są to dwie różne wartości, dopiero to Ty jako programista, jesteś odpowiedzialny za to, aby traktować w wybrany przez siebie sposób te dwie wartości jako jedną i wykonywać odpowiednie operacje, tak aby w tych dwóch rejestrach wartości zmieniały się tak jak oczekujesz. Musisz też pilnować rejestrów, bo co się stanie jeśli dodasz do siebie dwie liczby, a ich wynik będzie większy niż 64k? Liczba będzie zajmować dwa rejestry, co jeśli wszystkie są zajęte? Musisz to przewidzieć i kombinować mając do dyspozycji największa liczbę, jaką jest 64k, by to ładnie rozbić na dwa rejestry. Teraz wyobraź sobie jakich trików będziesz musiał używać, aby np dodać do siebie dwie wartości. W procesorze 32-bitowym wystarczy polecenie typu R3=R1+R2 (zapisz w rejestrze R3 sumę rejestru R1 i R2), a w 16-bitowym? Oczywiście, myślę tutaj o assemblerze, bo jak napiszesz program w C to kompilator Ci zastosuje odpowiednie algorytmy automatycznie, będzie kombinował i przerzucał rejestry z pamięci do procesora i odwrotnie, jednym słowem Meksyk. Taki program skompilowany pod procesor 16-bitowy będzie wykonywał się dłużej niż na procesorze 32-bitowym, nawet jeśli obydwa mają 16-bitową szynę danych. A musisz wiedzieć, że procesor, to nie tylko operacje na szynie danych i adresu, ale także na wewnętrznych rejestrach. Różnicy w prędkości natomiast nie będzie, gdy liczby i wyniki ich operacji nie będą przekraczać 64k.
Druga sprawa to szyna adresowa, gdyby miała 16-bitów, to mógłbyś zaadresować, bagatela 64kB, a jeżeli, procesor 16-bitowy posiadałby szerszą niż 16-bit szynę danych, to zapis adresu do rejestru zajmowałby dwa polecenia, w procesorze 32-bitowym jedno. I tym się właśnie będzie różniła praca procesora 16-bitowego i 32-bitowego. W 32-bitowym robisz odczyt 32-bitowej wartości, a procesor, lub właściwie jego część odpowiedzialna za obsługę szyny wykona dwa cykle i załaduje wartość do rejestru, wszystko automatycznie i zupełnie przeźroczyście dla użytkownika (chyba, że bawi się w tkzw. liczenie cykli). Z poziomu procesora 16-bitowego musiałbyś wydać ręcznie polecenie przepisania wartości z pamięci do rejestru, a potem drugi raz do drugiego rejestru, no i dalej musisz traktować te dwie liczby jako jedną, w procesorze 32-bitowym masz wartość 32-bitową w jednym rejestrze, i jest to wartość na której operujesz, a nie dwie liczby, z którymi musisz kombinować. Także określenie "(musi łączyć dzielić, bez sensu) ", zastosowałeś nie do tego procesora co trzeba. MC68000 będzie się zachowywała dokładnie jak procesor 16-bitowy, póki nie będzie operować na wielokrotnie wspominanych przeze mnie liczbach większych niż 64k, jednak tu masz przywilej używania większych niż 16-bitowe wartości bez zbędnego wysiłku, a w 16-bitowcu już nie.
Opis oczywiście dość ogólnikowy, reszta w otchłaniach datasheetów :)
Ostatnia aktualizacja: 25.01.2014 20:32:04 przez sanjyuubi