Registrele de control
---------------------
CR0
286
- CR0[ 0] (bitul 0 din CR0) = PE - Protected Mode Enable;
- CR0[ 1] = MP - Math Present (coprocesor);
- CR0[ 2] = EM - Emulate Numeric Extension;
- CR0[ 3] = TS - Task Switched;
386
- CR0[ 4] = ET - Extension Type. Starea acestui bit specifica tipul
coprocesorului din sistem: 287 sau 387;
- CR0[31] = PG - Pagin Enable;
486
- CR0[ 4] = ET - Extension Type este setat pe 1 (nu poate lucra cu 287);
- CR0[ 5] = NE - Numeric Error Enable. Starea lui specifica procesorului ce
actiune sa faca in cazul unei exceptii de virgula flotanta. Daca este 0 in
cazul unei erori de virgula flotanta procesorul va activa linia /FERR; iar daca
este 1, atunci la aparitia unei erori va genera exceptia 0fh;
- CR0[16] = WP - Write Protect. Cand este setat interzice sistemului de
operare sa scrie in paginile marcate cu read-only. Procesorul 386 permite
programelor cu nivelele de privilegiu 0, 1 si 2 sa scrie in paginile marcare
ca read-only;
- CR0[18] = AM - Alignment Mask;
- CR0[29] = NW - Not Write-through.
CR1
Nu este implementat.
CR2
A fost implementat incepand cu 386 si este identic la toate procesoarele. Este
folosit doar daca procesorul este in modul protejat si este activata paginarea;
in acest caz continand adresa liniara pe 32 de biti care a cauzat o exceptie de
pagina.
CR3 (Page Directory Base Address register)
A fost implementat incepand cu 386 si este folosit doar in modul protejat cu
paginarea activata.
386
- CR3[11]..CR3[31] = Page Directory Base Address. Contine adresa fizica de
baza pentru tabela primara de pagini. Aceasta adresa este multiplu de 4Ko;
486
- CR3[ 3] = PWT - Page Write-Through;
- CR3[ 4] = PCD - Page Cache Disable.
CR4
A fost initial introdus la procesoarele Pentium si a fost mai apoi inclus si in
versiunile mai noi de 486.
- CR4[ 0] = VME - Virtual 8086 Mode Extension Enable. Cand acest bit este pe 0
orice incercare de executie a unei instructiuni relativa la intreruperi (CLI,
STI, INT, PUSHF, POPF si IRET) este tratata in acelasi mod ca la 386.
Presupunand ca procesorul este in modul protejat si incearca sa execute una din
instructiunile precedente dintr-un program DOS (program de mod real), daca VME
este 0, procesorul genereaza o exceptie; iar daca VME este 1, procesorul permite
executarea acestor instructiuni si nu genereaza exceptie (si este folosit ca si
indicator pentru validarea intreruperilor VIF);
- CR4[ 1] = PVI - Protected Mode Virtual Interrupt
- CR4[ 2] = TSD - Time Stamp Disable;
- CR4[ 3] = DE - Debug Extension. Cand acest bit este pe 0, caracteristicile
pentru debug sunt aceleasi de la 386; iar daca DE este setat se valideaza
posibilitatea de breakpoint pentru IO;
- CR4[ 4] = PSE - Page Size Extension;
- CR4[ 6] = MCE - Machine Check Enable.
EFlags
- EFlags[ 0] = CF - Carry Flag;
- EFlags[ 2] = PF - Parity Flag;
- EFalgs[ 4] = AF - Auxiliary Carry Flag;
- EFlags[ 6] = ZF - Zero Flag;
- EFlags[ 7] = SF - Sign Flag;
- EFlags[ 8] = TF - Trap Flag;
- EFlags[ 9] = IF - Interrupt Enable Flag;
- EFlags[10] = DF - Direction Flag;
- EFlags[11] = OF - Overflow Flag;
- EFlags[12,13] = IOPL - I/O Privilege Level;
- EFlags[14] = NT - Nested Task;
- EFlags[16] = RF - Resume Flag;
- EFlags[17] = VM - Virtual 8086 Mode;
- EFlags[18] = AC - Alignment Check;
- EFlags[19] = VIF - Virtual Interrupt Flag;
- EFlags[20] = VIP - Virtual Interrupt Pending;
- EFlags[21] = ID - ID Flag.