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.