;; File: cpu.inc ;; Structure: tss ;; ;; > 31 23 15 7 0 ;; > +----------|----------+----------|----------+ ;; > 0x64 | I/O map base | 00000000 0000000T | ;; > +----------|----------+----------|----------+ ;; > 0x60 | 00000000 00000000 | LDT | ;; > +----------|----------+----------|----------+ ;; > 0x5c | 00000000 00000000 | GS | ;; > +----------|----------+----------|----------+ ;; > 0x58 | 00000000 00000000 | FS | ;; > +----------|----------+----------|----------+ ;; > 0x54 | 00000000 00000000 | DS | ;; > +----------|----------+----------|----------+ ;; > 0x50 | 00000000 00000000 | SS | ;; > +----------|----------+----------|----------+ ;; > 0x4C | 00000000 00000000 | CS | ;; > +----------|----------+----------|----------+ ;; > 0x48 | 00000000 00000000 | ES | ;; > +----------|----------+----------|----------+ ;; > 0x44 | EDI | ;; > +----------|----------+----------|----------+ ;; > 0x40 | ESI | ;; > +----------|----------+----------|----------+ ;; > 0x3C | EBP | ;; > +----------|----------+----------|----------+ ;; > 0x38 | ESP | ;; > +----------|----------+----------|----------+ ;; > 0x34 | EBX | ;; > +----------|----------+----------|----------+ ;; > 0x30 | EDX | ;; > +----------|----------+----------|----------+ ;; > 0x2C | ECX | ;; > +----------|----------+----------|----------+ ;; > 0x28 | EAX | ;; > +----------|----------+----------|----------+ ;; > 0x24 | EFLAGS | ;; > +----------|----------+----------|----------+ ;; > 0x20 | EIP | ;; > +----------|----------+----------|----------+ ;; > 0x1C | CR3 | ;; > +----------|----------+----------|----------+ ;; > 0x18 | 00000000 00000000 | SS2 | ;; > +----------|----------+----------|----------+ ;; > 0x14 | ESP2 | ;; > +----------|----------+----------|----------+ ;; > 0x10 | 00000000 00000000 | SS1 | ;; > +----------|----------+----------|----------+ ;; > 0x0C | ESP1 | ;; > +----------|----------+----------|----------+ ;; > 0x08 | 00000000 00000000 | SS0 | ;; > +----------|----------+----------|----------+ ;; > 0x04 | ESP0 | ;; > +----------|----------+----------|----------+ ;; > 0x00 | 00000000 00000000 | old TSS selector | ;; > +----------|----------+----------|----------+ struc tss .link: resw 1 resw 1 .esp0: resd 1 .ss0: resw 1 resw 1 .esp1: resd 1 .ss1: resw 1 resw 1 .esp2: resd 1 .ss2: resw 1 resw 1 .cr3: resd 1 .eip: resd 1 .eflags: resd 1 .eax: resd 1 .ecx: resd 1 .edx: resd 1 .ebx: resd 1 .esp: resd 1 .ebp: resd 1 .esi: resd 1 .edi: resd 1 .es: resw 1 resw 1 .cs: resw 1 resw 1 .ss: resw 1 resw 1 .ds: resw 1 resw 1 .fs: resw 1 resw 1 .gs: resw 1 resw 1 .ldtr: resw 1 resw 1 .iopb: resw 1 resw 1 endstruc struc gdt_entry .limit_low: resw 1 .base_low: resw 1 .base_mid: resb 1 .access: resb 1 .flags: resb 1 .base_high: resb 1 endstruc struc idt_entry .limit_low: resw 1 .selector: resw 1 .zero: resb 1 .attr: resb 1 .base_high: resw 1 endstruc struc intframe ;; registers .edi: resd 1 .esi: resd 1 .ebp: resd 1 .esp: resd 1 .ebx: resd 1 .edx: resd 1 .ecx: resd 1 .eax: resd 1 ;; .gs: resd 1 .fs: resd 1 .es: resd 1 .ds: resd 1 .intno: resd 1 ;; by x86 hardware .err: resd 1 .eip: resd 1 .cs: resd 1 .eflags: resd 1 ;; crossring .useresp: resd 1 .ss: resd 1 endstruc