Wiem, że 32-bitowe rejestry zostały nazwane tak jak 16-bitowe rejestry z przedrostkiem „E”, co oznacza rozszerzenie. Zawsze zakładałem, że oznacza to rozszerzenie z 16 do 32 bitów, chociaż nigdy nie widziałem tego wyraźnie stwierdzonego.
Próbowałem dowiedzieć się, co oznacza skrót „R”, ale moje umiejętności wyszukiwania w Google zawiodły mnie. Ktoś wie?
architecture
x86
Matt
źródło
źródło
Odpowiedzi:
Oznacza rejestrację , i to nie wszystko z przyczyn historycznych.
Historyczne jest to, że Intel przyzwyczaił się do wyliczania rejestrów z literami 8008 (od A do E plus H i L). Ten schemat był wtedy więcej niż wystarczający, ponieważ mikroprocesory miały bardzo niewiele rejestrów i raczej nie otrzymałyby więcej, a większość projektów to zrobiła. Panowało wówczas przekonanie, że oprogramowanie zostanie przepisane na nowe procesory, gdy się pojawią, więc zmiana schematu nazewnictwa rejestrów między modelami nie byłaby wielkim problemem. Nikt nie przewidział, że 8088 przekształci się w „rodzinę” po włączeniu do komputera IBM, a jarzmo wstecznej kompatybilności prawie zmusiło Intela do przyjęcia schematów takich jak „E” w 32-bitowych rejestrach, aby go utrzymać.
Część niehistoryczna jest praktyczna. Używanie liter do rejestrów ogólnego przeznaczenia ogranicza cię do 26, mniej, jeśli wyeliminujesz te, które mogą powodować zamieszanie w nazwach rejestrów specjalnego przeznaczenia, takich jak licznik programu, flagi lub wskaźnik stosu.
Nie mam źródła, aby to potwierdzić, ale podejrzewam, że wybór
R
jako prefiksu i wprowadzenie R8 do R15 na 64-bitowych procesorach sygnalizuje przejście do rejestrów numerowanych, które były normą wśród 32-bitowych i - większe architektury nie wywodzące się z 8008 przez prawie pół wieku. IBM zrobił to w latach 60. XX wieku z modelem 360, a za nim poszły PowerPC, DEC Alpha, MIPS, SPARC, ARM, Intel i860 i i960 i kilka innych, o których od dawna zapomniano.Zauważysz, że istniejące rejestry dobrze pasowałyby do R0 do R7, gdyby istniały, i nie zaskoczyłoby mnie to, gdyby były traktowane w ten sposób wewnętrznie. Istniejące długie rejestry (RAX / EAX / AX / AL, RBX / EBX / BX / BL itp.) Prawdopodobnie pozostaną, dopóki słońce nie wypali.
źródło
r0
-r7
lub używającUAX
zamiastr8
itp . „Ustalenie, jak najlepiej nazwać rejestry, było w rzeczywistości jedną z najtrudniejszych części rozszerzenia rejestru”. (Zobacz stackoverflow.com/a/35619528/224132, aby zapoznać się z inną schludną historią x86-64.) Ponadto zamówienie nie dotyczy RAX / RBX / ... w kodowaniu binarnym, to AX, CX, DX, BXWe wcześniejszych procesorach nie wszystkie rejestry były równe:
Zakładając, że jeden konkretny rejestr był zawsze wplątany, gdy zaangażowany był sumator, sprawił, że układ stał się mniej skomplikowany, a kody operacyjne krótsze.
Np. 6510 (używany w Commodore 64) może dodawać tylko przy użyciu rejestru A, a indeksowanie używa X lub Y. Istnieją instrukcje INC X i INC Y, ale nie ma INC A.
Ponieważ rejestry miały różne zastosowania, wybrano mnemoniki odzwierciedlające ich użycie. Np. A, X i Y w 6510 (zamiast A, B i C).
Nazwy w 8086 zostały wybrane, aby odzwierciedlić ich użycie. W przypadku 4 rejestrów ogólnego przeznaczenia logiczne było nazwanie ich AX, BX, CX i DX. Dodatkowe rejestry indeksujące nazwano BP i SP (mnemoniczne: wskaźnik podstawowy, wskaźnik stosu).
Ponieważ wiele kodów rozszerzono do 16 bitów, było trochę miejsca na wskazanie, który z czterech rejestrów został użyty. Jednak niektóre z historycznych powodów wciąż miały zastosowanie, ponieważ CX był nieco wyjątkowy: REP i polubienia, które są 8-bitowymi kodami, zawsze używają CX jako licznika. Prosty mnemonik, CX = Counter, pomaga zapamiętać, który z nich jest używany.
Kody dla następców 8086 musiały być kompatybilne wstecz i były nieporządkiem z powodu kodów o zmiennej długości. Kiedy 32-bitowe magistrale stały się bardziej popularne, wypróbowano procesory o stałej długości kodu operacyjnego. Upraszcza to część dekodującą procesora, która zwalnia miejsce, które można wykorzystać np. Dla większej liczby rejestrów.
Procesory, które postępowały zgodnie z tym tokiem myślenia, nazywane są procesorami RISC (CPU z ograniczonym zestawem instrukcji), w przeciwieństwie do procesora CISC (CPU z zestawem instrukcji złożonych).
Im więcej rejestrów, tym mniej rozprzestrzenia się w pamięci. Zasadniczo rejestry są najszybszą dostępną pamięcią podręczną, więc zwiększenie liczby rejestrów jest dobrym pomysłem, nawet w dzisiejszych czasach. Brak wyspecjalizowanych instrukcji został (miejmy nadzieję więcej) zrekompensowany szybszym wprowadzaniem prostych instrukcji.
32-bitowe kody o stałej długości mają wystarczającą ilość miejsca, aby uwzględnić źródło, drugie źródło, operację i miejsce docelowe. SPARC zdołał zawinąć 5 bitów dla każdego źródła, drugiego źródła i miejsca docelowego, a zatem miał 32 rejestry widoczne jednocześnie.
32 rejestrów jest zbyt wiele, aby używać liter, a i tak były one w większości równe, więc numerowanie ich było oczywistym wyborem. „R” służyło do odróżnienia ich od stałych 0..31, a „R” był łatwym mnemonikiem rejestru. Dlatego: R0..R31.
Przez lata Pentium i jego następcy zachowali zgodność wsteczną. Włączono jednak również wiele bardziej udanych pomysłów RISC. Często te nowe instrukcje podobne do RISC będą działać szybciej niż wersje kompatybilne wstecz.
Liczba rejestrów została również zwiększona przez Intel, aby zmniejszyć liczbę dostępów do pamięci.
I najwyraźniej Intel w końcu zaczął używać notacji R. Kompatybilność wsteczna zapewni, że AX, BX, ... pozostaną, ale założę się, że AX jest tylko synonimem np. R0.
Zastrzeżenie : Powyższe jest moim poglądem na historię. To będzie niekompletne, ponieważ nie byłem w pobliżu, by być świadkiem wcześniejszych części historii. Niemniej mam nadzieję, że niektórym się przyda.
źródło
INX
lubINY
, chociaż kod zajmował dodatkowy bajt. Napisałem dużo montażu dla tego układu i w praktyce tego rodzaju przyrosty były rzadkie poza robieniem matematyki, która tego potrzebowała.ADD 1
działa, więc nie było potrzeby specjalistycznego „Zwiększania A”. I nie pamiętam, żeby tego potrzebowałem.To po prostu oznacza „zarejestruj się”. Z przyczyn historycznych.
źródło