Registrul procesorului este un câmp de o lungime dată în memoria ultra-rapidă cu acces aleator (SRAM) din procesor. Este folosit de procesorul însuși, poate fi fie accesibil, fie inaccesibil de software. De exemplu, la preluarea următoarei instrucțiuni din memorie, aceasta este plasată în registrul de instrucțiuni , care nu poate fi accesat de programator.
Registrele inaccesibile din punct de vedere programatic sunt orice registre de procesor care nu pot fi accesate într-un fel sau altul din programul care se execută. Un exemplu de astfel de registre este registrul de instrucțiuni deja menționat .
Registrele accesibile din punct de vedere programatic sunt registre care pot fi accesate într-un fel sau altul din programul care se execută. Aproape fiecare astfel de registru este desemnat prin identificatorul său de nume la nivel de limbaj de asamblare și codul de identificare numeric corespunzător la nivel de limbaj de mașină. În ceea ce privește accesibilitatea, registrele accesibile programatic nu sunt aceleași și sunt practic împărțite în două subgrupuri mari:
Registrele speciale [3] conțin date necesare funcționării procesorului - decalaje de tabel de bază, niveluri de acces etc.
O parte din registrele speciale aparține dispozitivului de control , care controlează procesorul prin generarea unei secvențe de microinstrucțiuni .
Accesul la valorile stocate în registre se realizează direct la frecvența ceasului procesorului și, de regulă, de câteva ori mai rapid decât accesarea câmpurilor din RAM (chiar dacă memoria cache conține datele necesare), dar cantitatea de RAM este departe depășește cantitatea totală de registre de procesor, „capacitatea” totală a registrelor de uz general / de date pentru procesoarele x86 (de exemplu, Intel 80386 și mai noi) 8 registre de 4 octeți = 32 de octeți (În procesoarele x86-64 - 16 din 8 octeți = 128 de octeți și niște registre vectoriale).
Tabelul arată numărul de registre de uz general în mai multe arhitecturi comune de microprocesoare. Este de remarcat faptul că, în unele arhitecturi, utilizarea registrelor individuale poate fi complicată. Deci, în SPARC și MIPS, registrul numărul 0 nu stochează informații și este întotdeauna citit ca 0, iar la procesoarele x86 cu un registru ESP(pointer către stivă), doar unele comenzi pot funcționa.
Arhitectură | registre întregi |
FP - registre |
Note |
---|---|---|---|
x86-32 | opt | opt | |
x86-64 | 16 | 16 | |
IBM System/360 | 16 | patru | |
z/Arhitectură | 16 | 16 | |
Itanium | 128 | 128 | |
SPARC | 31 | 32 | Registrul 0 (global) rulează mereu |
IBM Cell | 4~16 | 1~4 | |
IBM POWER | 32 | 32 | |
arhitectura puterii | 32 | 32 | |
Alfa | 32 | 32 | |
6502 | 3 | 0 | |
W65C816S | 5 | 0 | |
PIC | unu | 0 | |
AVR | 32 | 0 | |
ARM pe 32 de biți [4] | 16 | variat | |
ARM pe 64 de biți [5] | 31 | 32 | |
MIPS | 31 | 32 | Registrul 0 este întotdeauna zero |
RISC-V | 31 | 32 | În plus, există registrul 0 care returnează întotdeauna zero |
Elbrus 2000 | 256 | aliniat cu
întreg |
32 de registre din două cifre,
256 = 32 de registre globale + 224 de registre de stivă de proceduri [6] |
IP ( English Instruction Pointer ) - un registru care indică decalajul (adresa) instrucțiunilor din segmentul de cod (1234: 0100h segment / offset).
IP - 16 biți (partea inferioară a EIP)
EIP - analogic pe 32 de biți (partea inferioară a RIP)
RIP - analog pe 64 de biți
Registrele de segmente sunt registre care indică segmente.
Toate registrele de segment sunt pe 16 biți.
CS ( segment de cod ) , DS ( segment de date ) , SS ( segment de stivă ) , ES ( segment suplimentar ) , FS, GS
În modul real al procesorului, registrele de segment conțin adresa începutului segmentului de 64Kb, deplasată la dreapta cu 4 biți.
În modul protejat al procesorului, registrele de segmente conţin selectorul segmentului de memorie alocat de OS.
CS este un pointer către un segment de cod. Legarea CS:IP (CS:EIP/CS:RIP - în modul securizat/64 de biți) indică adresa de memorie a următoarei instrucțiuni.
În modul pe 64 de biți, registrele de segment CS, DS, ES și SS nu participă la formarea unei adrese liniare (continue), deoarece segmentarea nu este suportată în acest mod.
Registrele de date sunt folosite pentru a stoca calcule intermediare.
RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, R8 - R15 - 64 de biți (registru AX)
EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI, R8D - R15D - 32 de biți (AX extins)
AX ( acumulator ) , CX ( registru de numărare ) , DX ( registru de date ) , BX ( registru de bază ) , SP ( indicator de stivă ) , BP ( indicator de bază ) SI (, Index sursă ), DI ( index de destinație ), R8W - R15W - 16 biți
AH, AL, CH, CL, DH, DL, BH, BL, SPL, BPL, SIL, DIL, R8B - R15B - 8 biți (jumătăți de registre de 16 biți)
de exemplu, AH - mare AX - jumătate mare de 8 biți
AL - AX scăzut - jumătate inferioară de 8 biți
RAX | RCX | RDX | RBX | ||||||||||||||||||||||||||||
EAX | ECX | EDX | EBX | ||||||||||||||||||||||||||||
TOPOR | CX | DX | BX | ||||||||||||||||||||||||||||
AH | AL | CH | CL | D.H. | DL | BH | BL |
RSP | RBP | RSI | CDI | Rx | |||||||||||||||||||||||||||||||||||
ESP | EBP | ESI | EDI | RxD | |||||||||||||||||||||||||||||||||||
SP | BP | SI | DI | RxW | |||||||||||||||||||||||||||||||||||
SPL | BPL | SIL | DIL | RxB |
unde x este 8..15.
Registrele RAX, RCX, RDX, RBX, RSP, RBP, RSI, RDI, Rx, RxD, RxW, RxB, SPL, BPL, SIL, DIL sunt disponibile numai în modul procesor pe 64 de biți.
Flags register FLAGS (16 biți) / EFLAGS (32 biți) / RFLAGS (64 biți) - conține starea curentă a procesorului.
Registrele de sistem GDTR, LDTR și IDTR au fost introduse în procesoare începând cu Intel286 și sunt concepute pentru a stoca adresele de bază ale tabelelor de descriptori - cele mai importante componente ale arhitecturii sistemului atunci când se lucrează în mod protejat.
Registrul GDTR conține o adresă de bază de 32 de biți (24 de biți pentru Intel286) și o limită de tabel global de descriptori ( GDT ) de 16 biți.
Partea vizibilă a registrului LDTR conține doar selectorul de descriptori LDT ( local descriptor table ). Descriptorul LDT în sine este încărcat automat în partea ascunsă LDTR din tabelul de descriptor global.
Registrul IDTR conține o adresă de bază de 32 de biți (24 de biți pentru Intel286) și o limită de tabel de descriptori de întrerupere ( IDT ) de 16 biți. În modul real, poate fi folosit pentru a schimba locația tabelului vector de întrerupere.
Partea vizibilă a registrului TR conține selectorul Task State Segment Descriptor ( TSS ). Descriptorul TSS în sine este încărcat automat în partea ascunsă a TR din tabelul de descriptor global.
Un registru este o unitate funcțională care primește, stochează și transmite informații. Registrele constau dintr-un grup de declanșatori , de obicei D. După tipul de recepție și emitere a informațiilor, se disting 2 tipuri de registre:
Registrele de deplasare sunt un lanț de flip- flops conectat în serie . Modul principal de operare este deplasarea biților codului de la un declanșator la altul pentru fiecare impuls al semnalului de ceas.
După scop, registrele diferă prin:
IP ( Engleză Instruction Pointer ) - un registru care conține adresa-offset al următoarei instrucțiuni care urmează să fie executată în raport cu segmentul de cod CS în procesoarele din familia x86 .
Registrul IP este asociat cu CS ca CS:IP, unde CS este segmentul de cod curent și IP este decalajul curent față de acel segment.
Registrul IP este un registru pointer pe 16 biți. Pe lângă acesta, acest tip de registre include SP ( English Stack Pointer - stack pointer) și BP ( English Base Pointer - pointer de bază).
Principiul de funcționareDe exemplu, CS conține valoarea , registrul IP stochează offset . 2CB5[0]H123H
Adresa următoarei instrucțiuni de executat este calculată prin adăugarea adresei din CS (Code Segment) la offset-ul din registrul IP:
2CB50H + 123H = 2CC73HAstfel, adresa următoarei instrucțiuni de executat este 2CC73H.
Când instrucțiunea curentă este executată, procesorul schimbă automat valoarea din registrul IP, astfel încât perechea de registru CS:IP indică întotdeauna către următoarea instrucțiune care urmează să fie executată.
EIPÎncepând cu procesorul 80386 , a fost introdusă o versiune pe 32 de biți a registrului pointerului - EIP ( Extended Instruction Pointer ) . În acest caz, IP este capătul de jos al acestui registru (primii 16 biți). Principiul de funcționare a EIP este în general similar cu funcționarea registrului IP. Principala diferență este că în modul protejat, spre deosebire de modul real, registrul CS este un selector (selectorul nu indică segmentul în sine din memorie, ci descriptorul de segment din tabelul de descriptori).
RIPProcesoarele pe 64 de biți folosesc propriul lor registru de indicator de instrucțiuni - RIP .
Partea inferioară a acestui registru este registrul EIP.
Bazat pe RIP, o nouă metodă de adresare relativă RIP a fost introdusă în procesoarele pe 64 de biți. Restul activității RIP este similară cu cea a registrului EIP.
Tehnologii de procesoare digitale | |||||||||
---|---|---|---|---|---|---|---|---|---|
Arhitectură | |||||||||
Arhitectura set de instrucțiuni | |||||||||
cuvânt mașină | |||||||||
Paralelism |
| ||||||||
Implementări | |||||||||
Componente | |||||||||
Gestionare a energiei |
Microcontrolere | ||||||||
---|---|---|---|---|---|---|---|---|
Arhitectură |
| |||||||
Producătorii |
| |||||||
Componente | ||||||||
Periferie | ||||||||
Interfețe | ||||||||
OS | ||||||||
Programare |
|