*386 *the registers and memory structures within the 386/486 *19920118/wj van ganswijk *extended flags register (eflags) fedcba98 76543210 0 0....... ........ must be 0 .1...... ........ back link available for current task ..ll.... ........ input/output and IF_flag_change maximum privilege level ....1... ........ overflow .....1.. ........ direction ......1. ........ enable interrupts (may sometimes not be changed by user) .......1 ........ enable single stepping traps ........ 1....... sign ........ .1...... zero ........ ...1.... auxiliary carry flag ........ .....1.. parity ........ .......1 carry ........ ..0.0.0. must be 0 2 ........ .....1.. give fault17 on alignment fault ........ ......1. enable virtual mode (8086) ........ .......1 skip breakpoint int on next instruction and change to 0 00000000 00000... must be 0 *segment descriptors, as pointed to by the gdtr, idtr and ldtr *the first descriptor in the gdt must be empty fedcba98 76543210 0 llllllll llllllll segment limit 15..0 (in granules) (aligned if pages) 2 bbbbbbbb bbbbbbbb segment base 15..0 4 bbbbbbbb segment base 23..16 5 1....... present .pp..... privilige level ...10d.. data segment: expansion down/up segment ...10.w. data segment: segment may be written into ...11c.. code segment: conforming (only exe'ble if ..) ...11.r. code segment: readable .......1 accessed ...0.001 system segment: tss, available ...0.011 system segment: tss, busy ....1... system segment: 486/80286 version ...00010 system segment: ldt ...0.1.. gate descriptor, see below 6 1....... 4kpage/byte granularity .1...... 32/16 bits operation default (valid in code segment only) ..0..... must be 0 ...1.... available for OS ....llll segment limit 19..16 (in granules) 7 bbbbbbbb base 31..24 *gate descriptor *variatie op de segment descriptor, onderscheidbaar door het type in byte 5 fedcba98 76543210 0 oooooooo oooooooo offset within the target code segment 15..0 2 ssssssss ssssssss target code or task state segment selector 4 000..... must be 0 ...ppppp parameter count 32/16 bit for 486/80286 gates 5 1....... valid .ll..... maximum allowed level of caller ...1.... data segment, see above ...0.0.. system segment, see above ...0.100 call gate ...00101 task gate (80286 or 486) ...0.110 interrupt gate ...0.111 trap gate ....1... 486/80286 version 6 oooooooo oooooooo offset within the target code segment 31..16 *segment register, in protected mode 0 nnnnnnnn nnnnn... table entry number ........ .....1.. local/global table ........ ......ll privilege level *task state segment *as selected by the segment descriptor pointed to by the task register 00 32bit: (0:back link),esp0,(0:ss0),esp1,(0:ss2),esp2,cr3 20 32bit: eip,eflags,eax,ecx,edx,ebx,esp,ebp 40 32bit: esi,edi,(0:es),(0:cs),(0:ss),(0:ds),(0:fs),(0:gs), 60 32bit: (0:ldt),(bit_map_offset:debug_trap bit), 68 operating system info bit_map_offset: i/o permission bitmap up to 64kbit/8==8kbyte ffh terminator? *global descriptor table register (gdtr) 0 16bit: limit 2 32bit: base *interrupt descriptor table register (idtr) 0 16bit: limit 2 32bit: base *local descriptor table register (ldtr) 0 16bit: selector *task register 0 16 bit: selector *control register 0 (cr0) *the lower half is the 80286 machine status word (msw) register fedcba98 76543210 0 00000000 000..... must be 0 ........ ..1..... handle floating point exceptions via int16/external_int ........ ...1.... must be 1 ........ ....1... task switched, set by hw, (gives fault7 on fp instruction) ........ .....1.. emulate copressor via fault7 ........ ......1. give fault7 on wait instruction after task switch ........ .......1 enable segment based protection mode 2 1....... ........ enable paging (may only be set in protected mode) .00..... ........ +cache_fill +wr_through&invalidates .01..... ........ invalid .10..... ........ -cache_fill +wr_through&invalidates .11..... ........ -cache_fill -wr_through&invalidates ...00000 00000.0. must be 0 ........ .....1.. enable alignment check bit in eflags (486 only) ........ .......1 enable write protect from supervisor write access *control register 2 (cr2) fedcba98 76543210 fedcba98 76543210 0 aaaaaaaa aaaaaaaa aaaaaaaa aaaaaaaa last page fault linear address *control register 3 (cr3) fedcba98 76543210 fedcba98 76543210 0 bbbbbbbb bbbbbbbb bbbb.... ........ base of page directory (4k aligned) ........ ........ ........ ...1.... disable page cache (486 only) ........ ........ ........ ....1... page write through (486 only) ........ ........ ....0000 000..000 must be 0 *end