Wojskowa Akademia Techniczna
Technika Mikrokomputerowa
Referat
Temat: Architektura procesorów PowerPC.
Wykonał:
Arkadiusz Netczuk
Spis treści:
Rys historyczny procesorów z rodziny PowerPC.
Cechy charakterystyczne architektury PowerPC.
Bloki wewnętrzne procesora z rodziny PowerPC.
Rejestry procesora.
Format instrukcji.
Charakterystyka rozkazów architektury PowerPC.
1. Rys historyczny.
Architektura mikroprocesorów z rodziny PowerPC została stworzona przez konsorcjum AIM (Apple - IBM - Motorola). Współpraca firm została zapoczątkowana w roku 1990 przedstawieniem IBM-owi przez Apple projektu „Star Trek”, który dotyczył między innymi portowania systemu MacOS na sprzęt Intela. IBM przyjmując ofertę postawił warunek, iż wykorzystywaną platformą ma być nowy produkt IBM-a - układ z architekturą POWER. Po wstępnych pracach uznano, iż architektura ta nie będzie idealna, w związku z tym postanowiono zbudować nowy procesor kompatybilny z architekturą POWER spełniający następujące wymogi:
- szeroki zakres zastosowań, od prostych mikrokontrolerów aż do procesorów przeznaczonych do serwerów i stacji roboczych,
- prosta konstrukcja umożliwiająca na budowę układów o bardzo krótkich cyklach,
- obsługa rozwiązań wieloprocesorowych,
- kompatybilność szyny systemowej z linią 88k (produkt Motoroli)
- 64-bitowa architektura będąca nadzbiorem 32-bitowej zapewniająca binarną kompatybilność z 32-bitowymi aplikacjami
- zapewnienie środków do konstrukcji jednostek wysoce superskalarnych
Nową architekturę nazwano PowerPC (Performance Optimization With Enhanced RISC Performance Computing). Pod koniec 1992 roku pojawia się procesor PowerPC 601 charakteryzujący się integracją architektur POWER i PowerPC. Nowy procesor obsługiwał większość z instrukcji POWER i PowerPC. PPC 601 był superskalarny, posiadał trzy potoki i był w stanie przydzielić do trzech 32-bitowych instrukcji w każdym cyklu: jedną do jednostki stałoprzecinkowej (FXU), jedną do jednostki zmiennoprzecinkowej (FPU) oraz jedną do układu przewidywania rozgałęzień (BRU). 32kB pamięć cache (L1) zapewniała 32-bitowy interfejs dla FXU, 64-bitowy dla FPU i 256-bitowy dla kolejek instrukcji i pamięci. Szyna systemowa miała 32-bitową linię adresową oaz 64-bitową linię danych.
Rys: Obudowa procesora PowerPC 601.
Rys: Ewolucja architektury PowerPC
Najważniejsze zastosowania:
- Macintosh (1994-2006)
- AS/400, System i
- Superkomputery Blue Gene
- Konsole do gier: PlayStation 3, Nintendo Wii, Xbox 360
- Urządzenia sieciowe
- Systemy wbudowane
2. Cechy charakterystyczne architektury PowerPC.
Procesor PowerPC został zaprojektowany zgodnie z filozofią RISC, z uwzględnieniem zastosowania superskalarności. Procesor wspiera zarówno notację „big endian” jak i „little endian” z możliwością zmiany trybu interpretacji w trakcie pracy procesora. Jest to możliwe dzięki bitowi kolejności bajtów zawartego w rejestrze MSR (Machine State Register). Domyślnie procesor pracuje w trybie „big endian”.
Rodzina procesorów PowerPC zawiera sekwencyjne i procesowe układy kontrolne do obsługi przerwań pobierania i wykonywania instrukcji oraz zawiera implementację listy rozkazów, modelu przechowywania danych i innych rozwiązań zdefiniowanych w założeniach architektury PowerPC.
Liczby zmiennoprzecinkowe reprezentowane są jako część ułamkowa zawierająca znak liczby oraz wykładnik potęgi liczby 2. Kodowanie zapewnia następujące reprezentacje:
- skończoną wartość liczbową,
- wartość nieskończoną
- wartości, które nie są liczbami („NaN” - Not a Number)
Operacje wykorzystujące nieskończoność produkują rezultaty zgodne z konwencją matematyczną. Wartość „NaN” nie ma matematycznej interpretacji. Dekodowanie tych wartości pozwala na diagnostykę. Mogą być wykorzystane do wskazania niezainicjowanych wartości i mogą być efektem pewnych niepoprawnych operacji.
Architektura PowerPC zapewnia 32 64-bitowe rejestry zmiennoprzecinkowe ponumerowane od 0 do 31. Wszystkie zmiennoprzecinkowe operacje zawierają 5-bitowe pole, które określa który rejestr FPR ma być wykorzystany do wykonania danej instrukcji. Każda instrukcja interpretuje zawartość rejestru FPR (Floating-point Register) jako wartość wykorzystującą format podwójnej precyzji. Każda instrukcja zmiennoprzecinkowa inna niż odczyt i zapis do pamięci pobiera wartości z rejestrów FPR oraz rezultaty umieszcza również w rejestrach FPR. Rejestry FPSCR (Floating-point Status and Control Register) oraz CR (Condition Register) zawierają dodatkowe informacje na temat rezultatów wykonania niektórych instrukcji zmiennoprzecinkowych.
Operacje odczytu i zapisu umieszczają 64 bity danych bez dokonywania konwersji pomiędzy pamięcią a rejestrami zmiennoprzecinkowymi. Operacja załadowania pojedynczej precyzji dokonują konwersji na format podwójnej precyzji
Rys: Uproszczony schemat architektury procesora PowerPC 604.
3. Bloki wewnętrzne procesora z rodziny PowerPC.
Mikroprocesor rodziny PowerPC zawiera następujące bloki funkcjonalne:
- układ wykonawczy rozkazów rozgałęzień (Branch processing)
- układ arytmetyki stałoprzecinkowej (Fixed-point Processing)
- układ arytmetyki zmiennoprzecinkowej (Float-point Processing)
Rys: Model logiczny sekwencji wykonywania operacji.
Układ Skoków (Branch Processor):
Układ skoków posiada trzy 32-bitowe rejestry:
- Condition Register
- Link Register
- Count Register
Architektura PowerPC wspiera również implementacje 64-bitowe tych rejestrów.
Układ stałoprzecinkowy (Fixed-point Processor):
Układ stałoprzecinkowy do instrukcji nieuprzywilejowanych wykorzystuje następujące rejestry:
- 32 rejestry GPR (General Purpose Register)
- rejestr XER (Integer Exception Register)
Rejestry ogólnego przeznaczenia są głównym wewnętrznym mechanizmem przechowywania danych układu stałoprzecinkowego.
Układ zmiennoprzecinkowy (Floating-point Processor).
Układ zmiennoprzecinkowy obejmuje następujące rejestry:
- 32 rejestry FPR.
- rejestr FPSCR.
Układ zmiennoprzecinkowy udostępnia wysokiej jakości wykonanie operacji zmiennoprzecinkowych do wykonywania operacji arytmetycznych, porównań oraz do przenoszenia danych zmiennoprzecinkowych pomiędzy pamięcią, a rejestrami FPR.
4 Rejestry procesora.
Rejestry bazowe trybu użytkownika:
- CR - 32-bitowy rejestr warunku (Condition Register)
- LR - 64-bitowy rejestr powiązań (Link Register)
- CTR - 64-bitowy rejestr licznika (Count Register)
- GPR0-31 - 32 64-biowe rejestry ogólnego przeznaczenia (General Purpose Registers)
- XER - 64-bitowy rejestr wyjątków operacji stałoprzecinkowych (Integer Exception Register)
- FPR0-31 - 32 64-bitowe rejestry zmiennoprzecinkowe (Floating-Point Registers)
- FPSCR - 32-bitowy rejestr statusu i kontroli operacji zmiennoprzecinkowych (Floating-point Status and Control register)
Rejestry zarządzania zegarem trybu użytkownika:
- TBU - 32-bitowa górna podstawa czasu (Time Base Upper)
- TBL - 32-bitowa dolna podstawa czasu (Time BAse Lower)
Rejestry do użytku przez oprogramowanie trybu użytkownika:
- USPRG0 - 64-bitowy rejestr do zastosowań oprogramowania użytkownika (User Software-use SPR 0)
- SPRG3-7 - 64-bitowe rejestry do zastosowań przez oprogramowanie (Software-use SPRs)
Rejestry bazowe trybu nadzorcy:
- MSR - 32-bitowy rejestr stanu maszyny (Machine State Register)
- PVR - 32-bitowy rejestr wersji procesora (Procesor Version Register)
- PIR - 32-bitowy rejestr identyfikacji procesora (Procesor Identification Register)
Rejestry wykorzystania przez oprogramowanie trybu nadzorcy:
- SPRG0-7 - 64-bitowe rejestry wykorzystania przez oprogramowanie (Software-use SPRs)
Rejestry przerwań trybu nadzorcy:
- SRR0 - 64-bitowy rejestr zapisania/przywrócenia (Save/Restore Register 0)
- SRR1 - 32-bitowy rejestr zapisania/przywrócenia (Save/Restore Register 1)
- CSRR0 - 64-bitowy krytyczny rejestr zapisania/przywrócenia (Critical Save/Restore Register 0)
- CRRS1 - 32-bitowy krytyczny rejestr zapisania/przywrócenia (Critical Save/Restore Register 1)
- DEAR - 64-bitowy rejestr adresowy wyjątku danych (Data Exception Address Register)
- ESR - 32-bitowy rejestr objawu wyjątku (Exception Syndrom Register)
- IVPR - 64-bitowy rejestr prefiksu wektora przerwań (Interrupt Victor Prefix Register)
- IVOR0-7 - 32-bitowe rejestry przesunięcia wektora przerwań (Interrupt Victor Offset Registers)
Rejestry kontroli przechowywania trybu nadzorcy:
- PID - 32-bitowy rejestr identyfikacji procesu (Precess Identification Register)
Rejestry zarządzania zegarem trybu nadzorcy:
- TCR - 32-bitowy rejestr kontroli zegara (Timer Control Register)
- TSR - 32-bitowy rejestr statusu zegara (Timer Status Register)
- TBU - 32-bitowa górna podstawa czasu (Time Base Upper)
- TBL - 32-bitowa dolna podstawa czas (Timer Base Lower)
- DEC - 32-bitowy „dekrementer” (Decrementer)
- DECAR - 32-bitowe automatyczne przeładowanie „dekrementera” (Decrementer Auto-Reload)
Rejestry debugowania:
- DBCR0-2 - 32-bitowe rejestry kontroli debugowania (Debug Control Registers)
- DBSR - 32-bitowy rejestr stanu debugowania (Debug Status Register)
- IAC1-4 - 64-bitowe porównania adresów instrukcji (Instruction Adress Compare)
- DAC1-2 - 64-bitowe porównania adresów danych (Data Adress Compare)
- DVC1-2 - 64-bitowe porównania wartości danych (Data Value Compare)
5. Format instrukcji
Każda instrukcja jest długości 4 bajtów. Kiedy procesor pobiera instrukcję, wówczas 2 najmłodsze bity są ignorowane. Analogicznie, kiedy procesor wywołuje adres instrukcji, wówczas dwa najmłodsze bity instrukcji są zerami.
Bity 0-5 zawsze określają kod instrukcji. Wiele instrukcji posiada również rozszerzony kod operacji. Pozostałe bity instrukcji zawierają pola instrukcji.
Format I:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-29 |
Pole wartości stałej |
30 |
Bit adresacji bezwzględnej |
31 |
Bit zmiany rejestru LR |
Format B:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-10 |
Opcje skoków warunkowych |
11-15 |
Pole określające bit rejestru CR jako warunku skoku |
16-29 |
Wartość przemieszczenia skoku |
30 |
Bit adresacji bezwzględnej |
31 |
Bit zmiany rejestru LR |
Format SC:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-29 |
Nie używane |
30 |
Pole rozszerzonego kodu operacji |
31 |
Nie używane |
Format D:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-10 |
Pole określające rejestr GPR, FPR, CR bądź FPSCR jako cel lub źródło; określające warunki do pułapki; określa czy instrukcja porównania dotyczy liczb całkowitych 32 bądź 64 bitowych |
11-15 |
Pole określa nr rejestru GPR jako celu bądź źródła |
16-31 |
Wartość stała całkowitoliczbowa |
Format DS:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-10 |
Pole określające rejestr GPR jako cel lub źródło |
11-15 |
Pole określa nr rejestru GPR jako celu bądź źródła |
16-29 |
Wartość stała całkowitoliczbowa |
30-31 |
Pole rozszerzonego kodu operacji |
Format X:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-10 |
Pole określające rejestr GPR, FPR, CR bądź FPSCR jako cel lub źródło; określające warunki do pułapki; określa czy instrukcja porównania dotyczy liczb całkowitych 32 bądź 64 bitowych |
11-15 |
Pole określa nr rejestru GPR, FPR, FPSCR bądź CR jako cel lub źródła |
16-20 |
Pole określa nr rejestru GPR, FPR, FPSCR bądź CR jako źródła; określa ilość bitów do przesunięcia; wartość umieszczana w rejestrze FPSCR |
21-30 |
Pole rozszerzonego kodu operacji |
31 |
Bit zmiany wartości rejestru CR |
Format XL:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-10 |
Pole określające rejestr GPR jako cel lub źródło |
11-20 |
Pole określa nr rejestru GPR, FPR, FPSCR bądź CR jako cel lub źródła |
21-30 |
Pole określa numer rejestru SPR bądź CR |
31 |
Bit zmiany wartości rejestru CR |
Format XFX:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-10 |
Pole określające rejestr GPR jako cel lub źródło |
11-20 |
Pole określa nr rejestru GPR, FPR, FPSCR bądź CR jako cel lub źródła |
21-30 |
Pole rozszerzonego kodu operacji |
31 |
Bit zmiany wartości rejestru CR |
Format XFL:
Bit |
Znacznie |
0-5 |
Kod operacji |
6 |
Nie używane |
7-14 |
Maska służąca do określenia pól rejestru FPSCR |
15 |
Nie używany |
16-20 |
Pole określa numer rejestru FPR jako źródło |
21-30 |
Pole rozszerzonego kodu operacji |
31 |
Bit zmiany wartości rejestru CR |
Format XO:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-10 |
Pole określające rejestr GPR jako cel |
11-15 |
Pole określające rejestr GPR jako cel lub źródło |
16-20 |
Pole określające rejestr GPR jako źródło |
16-20 |
Pole określa numer rejestru FPR jako źródło |
21 |
Aktywuje możliwość ustawienia pól ov i so w rejestrze XER dla arytmetyki rozszerzonej |
21-30 |
Pole rozszerzonego kodu operacji |
31 |
Bit zmiany wartości rejestru CR |
Format A:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-10 |
Pole określające rejestr FPR jako cel |
11-15 |
Pole określające rejestr FPR jako źródło |
16-20 |
Pole określające rejestr FPR jako źródło |
21-25 |
Pole określające rejestr FPR jako źródło |
26-30 |
Pole rozszerzonego kodu operacji |
31 |
Bit zmiany wartości rejestru CR |
Format M:
Bit |
Znacznie |
0-5 |
Kod operacji |
6-10 |
Pole określające rejestr GPR jako źródło |
11-15 |
Pole określające rejestr GPR jako cel lub źródło |
16-20 |
Pole określające rejestr FPR jako źródło; wartość przesunięcia w rozkazie obrotu |
21-25 |
Pole określające pierwszy bit maski w rozkazie obrotu |
26-30 |
Pole określające ostatni bit maski w rozkazie obrotu |
31 |
Bit zmiany wartości rejestru CR |
6. Charakterystyka rozkazów architektury PowerPC.
Instrukcje Skoków (Branch Instructions).
Instrukcje skoków służą do zmiany sekwencji wykonywanych rozkazów. Zakresem skoków jest jedno słowo, zatem układ skoków ignoruje 30 i 31 bit adresu skoku jest ignorowany. Wszystkie instrukcje skoków mogą być użyte w nieuprzywilejowanym stanie.
Adres docelowy instrukcji skoków określona jest w jeden z następujących sposobów:
- adres docelowy jest sumą stałej oraz adresu instrukcji skoku,
- adres docelowy jest adresem absolutnym podanym jako parametr instrukcji,
- adres docelowy jest wartością zawartą w Link Register,
- adres docelowy jest wartością zawartą w Count Register.
Instrukcje skoków zawierają rozkazy skoków bezwarunkowych i skoków warunkowych. Instrukcje skoków mogą: być bezwarunkowe, warunkowe, bezwarunkowe z zachowaniem adresu powrotnego, warunkowe z zachowaniem adresu powrotnego. Jeżeli instrukcja skoku ma ustawiony bit „Link” na wartość „1”, wówczas adres zwrotny przechowywany jest w rejestrze Link Register. Adres powrotny jest adresem wskazującym na kolejną instrukcję po rozkazie skoku.
Instrukcje wywołań systemowych (System Call Instructions).
Rozkazy wywołań systemowych wywołują przerwanie systemowe uaktywniające usługę. W architekturze PowerPC instrukcją wywołań systemu jest rozkaz „sc” (System Call).
Instrukcje Rejestru Warunków (Condition Register Instructions).
Instrukcje rejestru warunków kopiują wybrane obszary rejestru CR do innych pól tego rejestru.
Stałoprzecinkowe instrukcje zapisu i odczytu (Fixed-point ).
Instrukcje odczytu przemieszczają informację z lokalizacji zaadresowanej efektywnym adresem do jednego z rejestrów GPR. Instrukcje te obliczają adres efektywny podczas przesuwania danych. Jeżeli instrukcje dostępu nie wywołują żadnych przerwań, wówczas zaadresowany bajt, półsłowo bądź słowo jest umieszczany w docelowym rejestrze GPR. Funkcje zapisu realizują czynność odwrotną. Jeżeli przy zapisie nie wystąpiło przerwanie błędu, wówczas do pamięci zapisywany jest bajt, słowo bądź półsłowo pobrane z źródłowego rejestru GPR.
W programie użytkownika podczas wykonywania instrukcji zapisu/odczytu z niepoprawnym adresowaniem danych instrukcja zostanie wykonana, lecz może wywołać błędy wykonania. Rozkaz może być wykonany przez sprzęt, bądź sterowanie może zostać przekazane do podprogramu przerwania, gdzie dany rozkaz będzie wykonany.
Operacje stałoprzecinkowe na ciągach znaków (Fixed-point String Instructions).
Operacje na ciągach umożliwiają przesuwanie danych z pamięci do rejestrów bądź z rejestrów do pamięci bez troski o porządek. Instrukcje tego typu mogą być wykorzystane do przemieszczania krótkich danych pomiędzy dowolnymi obszarami pamięci bądź do inicjacji długich przesunięć pomiędzy nieuporządkowanymi obszarami pamięci. Instrukcje indeksowego zapisu i odczytu ciągów o zerowej długości nie zmieniają rejestru docelowego.
Stałoprzecinkowe instrukcje porównania (Fixed-point Compare Instructions).
Instrukcje stałoprzecinkowe porównają algebraicznie bądź logicznie zawartość rejestru RA z jedną z wartości:
- ze stałą, 16-bitową wartością rozszerzoną o znak umieszczoną w polu wykonywanego rozkazu,
- ze stałą, 16-bitową wartością dodatnią umieszczoną w polu rozkazu,
- z zawartością wybranego rejestru ogólnego przeznaczenia.
Porównanie algebraiczne porównuje dwie liczby całkowite ze zdankiem. Porównanie logiczne sprawdza dwie liczby całkowite bez znaku.
Stałoprzecinkowe operacje pułapki (Fixed-point Trap Instructions).
Operacje pułapki wykonują testy dla określonych zbiorów warunków. Pułapki mogą być zdefiniowane dal zdarzeń, które nie powinny wystąpić podczas wykonywania programu takich jak przekroczenie zakresu bądź użycie niepoprawnego znaku. Gdy warunek pułapki wystąpi, wówczas systemowy program obsługi pułapki wywołuje przerwanie. Gdy warunek pułapki nie występuje, wówczas program kontynuuje normalne wykonanie.
Warunki rejestru ogólnego przeznaczenia są porównywane z 16-bitową wartością całkowitą ze znakiem bądź z zawartością innego rejestru ogólnego przeznaczenia. Wynik porównania przedstawiony jest poprzez pięć warunków, na których jest przeprowadzany iloczyn logiczny polem opisu warunku umieszczonego w kodzie rozkazu. Opis pola opisu warunków:
- bit 0 - „mniejszy niż”
- bit 1 - „większy niż”
- bit 2 - „równy”
- bit 3 - „logicznie mniejszy niż”
- bit 4 - „logicznie większy niż”.
Całkowitoliczbowe instrukcje obrotu i przesunięcia (Fixed-point rotate and shift instructions).
Układ operacji stałoprzecinkowych wykonuje operacje obrotów na danych pobranych z rejestrów GPR. Instrukcje te wykonują obroty zawartości rejestrów w jednym z następujących sposobów:
- wynik operacji umieszczany jest w rejestrze docelowym pod kontrolą maski. Jeżeli bit maski ustawiony jest na „1”, wówczas skojarzony bit obróconych danych jest umieszczany w rejestrze docelowym. Jeżeli bit maski wynosi „0”, bit skojarzenia w rejestrze docelowym nie zostaje zmodyfikowany.
- rezultat obrotu jest logicznie wymnażany z maską przed umieszczeniem wyniku w rejestrze docelowym.
Instrukcje obrotu w lewą stronę umożliwiają obroty w prawą stronę. Instrukcje przesunięcia wykonują przesunięcia logiczne w lewą i prawą stronę.
Instrukcje całkowitoliczbowe przemieszczania z i do rejestrów specjalnego przeznaczenia (Fixed-point move to or from Special-Purpose Registers Instructions).
Instrukcje przemieszczają zawartość jednego rejestru SPR do innego rejestru SPR bądź do rejestru GPR. Instrukcje te wspierane są przez zbiór rozszerzonych mnemoników. Obejmują zarówno uprzywilejowane i nieuprzywilejowane isntrukcje.
Zmiennoprzecinkowe instrukcje załadowania i odczytania (Floating-point load and store instructions).
Architektura udostępnia operacje załadowania zarówno dla reprezentacji pojedynczej jak i podwójnej precyzji. Dane o podwójnej decyzji ładowane są bezpośrednio do rejestrów FPR, natomiast dane o pojedynczej precyzji poddawane są konwersji do odpowiedników o zwiększonej precyzji. Konwersja dokonywana jest ze względu na wsparcie przez rejestry FPR jedynie operatorów o podwójnej precyzji. Zapis danych do pamięci wspiera precyzję pojedynczą jak i podwójną. Przy zapisie formatu o pojedynczej decyzji dokonywana jest konwersja na pojedynczą precyzję zapisu.
Zmiennoprzecinkowe przemieszczenie (Floating-point Move Instructions).
Operacja przemieszczenia kopiuje zawartość jednego rejestru zmiennoprzecinkowego do innego. Instrukcje te nie zmieniają zawartości rejestru FPSCR.
Zmiennoprzecinkowe instrukcje mnożenia wraz z dodawaniem (Floating-point Multiply-add instructions).
Operacje te łączą operacje mnożenia i operacje dodawania bez operacji pośredniego zaokrąglania wartości. Część ułamkowa wyniku pośredniego jest 106-bitowa, oraz wszystkie 106 bity są używane w etapie addytywnej (odejmowania) rozkazu.
Zmiennoprzecinkowe operacje porównania (Floating-point compare instructions).
Instrukcje porównania udostępniają uporządkowane i nieuporządkowane porównanie zawartości dwóch rejestrów FPR. Wybrane pola rejestru CR są ustawiane w zależności od wyników operacji porównania. Porównanie ustawia bit wybranego pola rejestru CR na „1” oraz wyzerowuje pozostałe bity. Pole FPCC (Floating-point Condition Code) ustawiany jest w taki sam sposób.
Interpretacja obszaru rejestru CR oraz FPCC:
- bit 0 - FPRA < FPRB
- bit 1 - FPRA > FPRB
- bit 2 - FPRA = FPRB
- bit 3 - FPRA ? FPRB (nieuporządkowany)
Gdzie FPRA jest pierwszym rejestrem wskazywanym w kodzie rozkazu, a FPRB jest rejestrem drugim wskazanym w kodzie rozkazu.
Bibliografia: