Prehľad registrov architektúr procesorov

Čo sú registre?
Registre sú pamäťami procesorov na najnižšej úrovni. Prístup ku nim je veľmi rýchly podobne ako presun dát medzi nimi. Jednotlivé architektúry sa odlišujú v tom, koľko používajú registrov a na aké účely ich využívajú.
O čom je nasledujúci článok ?
V SOJ programátor priamo pracuje s registrami a majú na beh programu v spojitosti s inštrukčnou sadou výrazný dopad. V tejto sekcií teda popíšem najznámejšie architektúry v tom zmysle, že určím koľko registrov obsahujú, koľko dát sa do nic zmestí a na aké účely sa využívajú.
Architektúry, ktorým sa venujem:

» Motorola 68000

» Zilong Z80

» IA-32(32bitová x86 architektúra)

» X86-64 (64bitová x86 architektúra)

» Intel 8086 (x86)

» ARM

Motorola 68000

- 8 32bitových všeobecne použiteľných dátových registrov (D0-D7)

- 8 32bitových adresných registrov (A0-A7)

- A7 register bol ukazovateľ na vrch zásobníka, označovaný aj SP

Ideálny počet registrov
Tento počet registrov bol ideálny, pretože umožňoval rýchle reakcie na prerušenia(ukladalo sa len 15 alebo 16 hodnôt), no zároveň ich počet bol dostačujúci k rýchlym výpočtom.
Výhody 2och typov registrov
Umožňoval dosiahnuť vyšší stupeň paralelizmu používaním pomocnej vykonávacej jednotky pre adresné registre.
Použitie registrov
Ktorýkoľvek register , môže byť použitý na akékoľvek operácie okrem priameho adresovania. Len adresné registre môžu slúžiť ako zdroj adresy, dátové registre môžu definovať posunutie adresy(offset).
Status register
Porovnávacie, logické a aritmetické operácie nastavujú flag bity v tomto registri, aby ich neskôr mohli použiť podmienené skoky. Flag bity sú:

- zero (Z)

- carry (C)

- overflow (V)

- extend (X)

- negative (N)

Zilong Z80

- akumulátor (A), 8bitový register na aritmetické, logické, I/O a load/store operácie

- flag register, 8bitový, obsahuje 6 jedno-bitových flagov

- 8-bitové univerzálne registre B,C,D,E,H,L

- 16bitové registre AF, BC, DE, HL, ktoré vznikli spojením 8bitových registrov

- 16bitové registre pre indexové adresovanie IX,IY

- 16bitový SP register(ukazovateľ zásobika)

- 16bitový PC(program counter), obsahuje adresu ďalšej inštrukcie

- Interrupt vektor (I), 8bitový register, obsahuje vrchných 8 bitov adresy, kde nastalo prerušenie

- Memory refresh (M), 8bitový register na dynamickú obnovu pamäte

Univerzálny BC register
8bitový register B a 8bitový register C, môžu byť používané aj ako spárovaný 16bitový BC register. Register B tvorí vrchných 8 bitov a C spodných 8 bitov slova. BC register môže slúžiť na nepriame adresovanie, ale aj ako počitadlo bytov pre blokové a I/O inštrukcie.
Univerzálne DE a HL registre
Podobne aj DE a HL vznikli kombináciou 8 bitových registrov D a E, respektíve H a L. Okrem toho, že obsahujú viac miesta sa využívajú aj na nepriame adresovanie.
SP register (ukazovateľ zásobníka)
Dekrementuje sa pri vložení položky do zásobníka(push) a inkrementuje pri vybratí položky zo zásobnía(pop).

 

IA-32 (32bitové procesory architektúry Intel x86)

- Univerzálne 32 bitové registre EAX, EBX, ECX, EDX

- Indexové registre na adresáciu v pamäti, 32 bitové , ESI, ESP, EBP, EDI, EIP

- Segmentové registre na ukladanie adresy segmentu, 16 bitové, CS, DS, ES, FS, GS, SS

- EFlags register, 32 bitový, register príznakov

Univerzálne registre
Dá sa pristupovať buď k celému 32 bitovému registru, spodným 16im bitom registra, prípadne k hornému alebo dolnému bytu spodných 16ich bitov. Napríklad pre EAX register platí:

- EAX , celý 32bitový register

- AX, spodných 16 bitov EAX

- AH, vrchných 8 bitov AX

- AL, spodných 8 bitov AX

Obdobne sa chovajú aj EBX, ECX a EDX.

Využitie univerzálnych registrov
Univerzálne registre môže programátor použiť akokoľvek, zároveň ale majú špeciálne funkcie:

- EAX, akumulátor, mnoho inštrukcií ho má ako impicitný operand

- EBX, bázový register, používaný k adresácií

- ECX, počítač, ráta opakovania cyklu

- EDX, rozšírenie akumulátora

Indexové registre
Sú 32 bitové, ale dá sa pristupovať aj k spodnej 16bitovej časti:

- ESI, index pre zdroj (čítanie)

- EDI, index pre cieľ (zapisovanie)

- EBP, ukazovateľ na záznam aktívnejprocedúry na zásobníku

- ESP, ukazovateľ vrcholu zásobníku

- EIP, ukazovateľ na ďalšiu inštrukciu, pristupuje sa k nemu skokmi

Segmentové registre
Pomocou nich sa adresuje pamäť. Prístupných je len 16 bitov registra.

- CS, ukazuje na segment s kódom programu

- DS, ukazuje na segment, kde sú dáta

- ES, extra segment

- SS, zásobníkový segment

- FG a GS, pribudli od modelov 80386

EFlags
Ide o register príznakov, je 32 bitový, jeho spodných 16bitov sa nazýva Flags. Ukladajú sa sem informácie o stave procesora, úspešnosti vykonania operácií atď...

 

Obr.1 Registre architektúry IA-32 (Intel x86 32bitová)

X86-64 (64 bitová architektúra X86)

Ich registre sú podobné ako pri IA-32 architektúre. Rozdiel je v tom, že majú 64bitov a pred názov registra sa pridáva prefix "r". Takže registre X86-64 sú:

- RAX, RBX, RCX, RDX, univerzálne 64bitové registre

- RSI, RSP, RDI, RBP, indexové 64 bitové registre

- R8, R9, R10, R11, R12, R13, R14, R15, univerzálne 64bit registre

Nové registre oproti 32 bitovej verzii
R8-R15 sú nové univerzálne registre s takzvaným REX prefixom, ktoré boli pridané až v 64bitovej architektúre X86. Dá sa pracovať aj s ich 8, 16 a 32 bitovými verziami a to podľa nasledujúceho pravidla(X je číslo medzi 8-15):

- rXb, spodných 8 bitov registra rX

- rXw, spodných 16 bitov registra rX

- rXd, spodných 32 bitov registra rX

- rX, celý 64bitový register

Používanie nových registrov s REX prefixom
Inštrukcie používajúce REX prefix, pracujú s registrami inak, ako sme pri x86 architektúrach zvyknutí. Zmeny:

- nedajú sa použiť registre AH, BH, CH, DH

- dá sa sprístupniť spodných 8 bitov indexových registrov, SIL, DIL, SPL, BPL

Špeciálne kombinácie registrov
Existuje niekoľko kombinácií segmentových a všeobecných registrov, ktoré ukazujú na dôležité adresy:

- CS:IP, ukazuje na miesto, kde program načíta ďalší byte kódu

- SS:SP, ukazuje na miesto odkiaľ bola vložená posledná položka do zásobníka

- DS:SI, ukazuje na dáta, ktoré sa prekopírujú do ES:DI


8086 (16bitová x86 architektúra)
Táto architektúra je veľmi podobná IA-32 architektúre, ktorá je vlastne nástupcom 8086 procesorov. IA-32 som ale spomenul ako prvú, pretože je veľmi podobná tak 8086 architektúre, tak aj X86-64 architektúre, ktorá je jej nasledovníkom. Jediným rozdielom je, že registre majú len 16 bitov.

Zoznam registrov

- Univerzálne 16bitové registre AX, BX, CX, DX

- Indexové 16bitové registre SI, DI, BP, SP

- Segmentové 16bitové registre ES, CS, DS, SS

- IP register, ukazovateľ na ďalšiu inštrukciu

- Flag register, 16bitový register príznakov

Obr.2 Registre 8086 procesora

                                        

Register príznakov
Register príznakov je modifikovaný po aritmetických alebo porovnávacích operáciach. Nedá sa k nemu pristupovať priamo, väčšinou k nemu pristupujeme prostredníctvom podmienených skokov.

Obr.3 Vysvetlenie bitov registra príznakov

ARM architektúra

Aby som uvidol jeden extrémny príklad, vybral som si procesor 6502 spadajúci pod ARM architektúru. Počet registrov je veľmi malý, no napriek tomu bol v 80tych rokoch tento procesor veľmi obľúbený a mnoho známych procesorov vzniklo práve z 6502, napr. Apple II.

 
Registre

- Akumulátor, na výsledky aritmetických operácií

- X, prvý univerzálny register

- Y, druhý univerzálny register

- PC, program counter, ovlyvňuje chod pogramu

- SP, ukazovateľ na vrch zásobíka

- PSR, Processor Status Register, register príznakov

          

Slovník skratiek

  • JSA - jazyky symbolických adries
  • VPJ - vyššie programovacie jazyky
  • CPU - procesor
  • ISA - inštrukčná sada
  • ASM - assembler
  • OS - operačný systém

Diskusia