Registrele - acestea sunt amintiri speciale, care sunt amplasate direct pe procesor. Lucrul cu registre este mult mai rapid decât celulele de memorie, astfel încât registre sunt utilizate pe scară largă în programele de limbaj de asamblare si compilatoare limbaj de nivel înalt.
Registrele pot fi împărțite în registre de uz general. instrucțiuni pointer. steaguri înregistrare și registre segment.
Registrele cu scop general
Pentru uz general, registre includ un grup de 8 registre care pot fi utilizate pentru programarea în limbaj de asamblare. Toate registrele sunt lungi de 32 de biți și pot fi împărțite în două sau mai multe părți.
După cum se vede din figură, ESI înregistrează, EDI, ESP și EBP permite accesul la inferiori 16 biți ai nume SI, DI, SP și BP respectiv și registrul EAX, EBX, ECX și EDX permit accesul atât inferioare 16 biți (denumirile AX , BX, CX si DX), și doi octeți individual Jr. (nume AH / AL, BH / BL, CH / CL și DH / DL).
înregistrează numele vine de la destinația lor:
- EAX / AX / AH / AL (registrul acumulator) - acumulator;
- EBX / BX / BH / BL (registru de bază) de bază -registr;
- ECX / CX / CH / CL (contor registru) - un contor;
- EDX / DX / DH / DL (registru de date) - registrul de date;
- ESI / SI (sursa index registru) - indicele sursă;
- (Registru de index destinație) EDI / DI - cod receptor (destinatar);
- ESP / SP (stiva registru indicator) - stiva registru pointer;
- EBP / BP (bază pointer registru) - Înregistrează baza indicatorul frame stivă.
În ciuda specializării existente, toate registrele pot fi folosite în orice operațiuni de mașini. Cu toate acestea, trebuie să luăm în considerare faptul că anumite comenzi funcționează numai cu anumite registre. De exemplu, înmulțire și împărțire instrucțiuni folosesc EAX și EDX înregistrează pentru stocarea datelor de intrare și rezultatul operației. Comenzile de control al ciclului ECX registru este utilizat ca un contor buclă.
Din păcate, numărul de registre prea puțin, și este adesea dificil de a găsi o cale de a le utiliza în mod optim.
PEI (instrucțiunea pointer) registru conține offset următoarea comandă care urmează să fie efectuată. Acest registru este direct disponibil pentru programator, dar încărcarea și modificarea valorilor sale produse de diferite echipe de management, care să includă comenzi de salturi condiționate și necondiționate, procedurile de apel și returnarea procedurilor.
Flag - acest bit având valoarea 1 ( „flag este setat“), în cazul în care o anumită condiție este îndeplinită, iar valoarea 0 ( „reset flag“) în alt mod. Procesorul are un steaguri de registru. conține un set de steaguri care reflectă starea actuală a procesorului.
Steagurile valoare CF, DF și IF pot fi modificate în mod direct steaguri înregistra prin instrucțiuni speciale (de exemplu, direcția CLD pentru a reseta pavilion), dar nu și instrucțiuni care permit adresa la steagurile înregistra ca un caz obișnuit. Cu toate acestea, puteți salva steagurile înregistrați pentru stiva sau AH registru și de a restabili pavilioanele registrul acestora folosind instrucțiuni LAHF. SAHF. PUSHF. PUSHFD. POPF și POPFD.
steaguri de stare (biți 0, 2, 4, 6, 7 și 11) reflectă rezultatul executării instrucțiunilor aritmetice, cum ar fi ADD. SUB. MUL. DIV.
- CF pavilion Carry este setat atunci când se deplasează de la cel mai semnificativ bit / împrumut, în cel mai semnificativ bit și indică prezența deverseze în aritmetică întreg fără semn. De asemenea, utilizat în aritmetică lung.
- PF Paritatea Flag este setat atunci când octetul cel mai puțin semnificativ al rezultatului conține un număr par de biți de date. Inițial, acest indicator a fost axat pe utilizarea programelor de comunicare: transferul de linii de comunicații de control poate fi, de asemenea, transmise bit de paritate, și instrucțiunile pentru a verifica pavilion paritate facilitează verificarea integrității datelor.
- Un pavilion transport auxiliar AF este setat atunci când transferul biților treilea rezultat / împrumutul în al treilea bit al rezultatului. Acest flag este axat pe utilizarea BCD (binar codificat zecimal, BCD) aritmetica.
- Zero pavilion ZF este setat în cazul în care rezultatul este zero.
- pavilion Sign SF este valoarea celor mai semnificativi biți ai rezultatului, care este bitul de semn în semn aritmetică.
- preaplin de pavilion al este setat atunci când rezultatul întreg este prea lung pentru plasarea în operandul destinație (registru sau locație de memorie). Acest steag arată prezența deverseze în semnul aritmeticii întreg.
Dintre aceste steaguri pot schimba doar de pavilion CF direct prin intermediul instrucțiunilor STC. CLC CICM.
steagurile de stare permit aceleași instrucțiuni aritmetice produc un rezultat de trei tipuri diferite: nesemnate și semnat binar-zecimal (BCD) număr întreg. Dacă rezultatul este considerat un întreg fără semn, atunci indicatorul CF indică starea de preaplin (prin transfer sau împrumut) să semneze rezultatul transferului sau a creditului prezintă sub pavilionul, în timp ce pentru transferul BCD rezultat / împrumut arată steagul AF. Reflectă pavilion semn SF rezultat semn, ZF pavilion reflectă și fără semn, semn și rezultatul zero.
Numărul întreg lung flag aritmetică CF este utilizat în conjuncție cu adăugarea de instrucțiuni de transfer (ADC) și scăderea cu împrumut de la dest (SBB) pentru împrumut propagare transporta sau calculată de la o descărcare lungă a celeilalte.
Flag PF a fost introdus pentru compatibilitatea cu alte arhitecturi de microprocesoare și în scopul propus este rar utilizat. Mai frecvent utilizate în conjuncție cu alte drapele de stat în aritmetice: instrucțiuni de comparație (... FCOM FCOMP etc.) în coprocesorul matematică instalate în ea steaguri-condiții C0, C1, C2 și C3, iar aceste steaguri pot fi copiate steaguri înregistrare. Se recomandă utilizarea de instrucțiuni AX FSTSW pentru a salva cuvintele de stare coprocesor registru AX și instrucțiuni SAHF pentru conținutul ulterioare copiere AH registru inferior 8 biți de steaguri înregistrați, C0 intră în pavilion CF, C2 - PF, C3 - ZF. flag C2 este setat, de exemplu, în cazul argumentelor incongruent (NaN sau format neacceptat) în instrucțiuni de comparare FUCOM.