Date: 17 Jan 1994 12:08:12 -0800 (PST) From: Gregory Eakin Subject: Re: IDTR and GDTR bases in go32 To: djgpp AT sun DOT soe DOT clarkson DOT edu Cc: ptan AT compudyn DOT com Dear Paul, Here is what the GDT and IDT look like under djgpp. #include typedef struct { unsigned int base : 32; unsigned int limit : 16; unsigned int filler : 16; } IDTR; typedef struct { unsigned int base : 32; unsigned int limit : 16; unsigned int filler : 16; } GDTR; typedef struct { unsigned int limit : 16; unsigned int base : 24; unsigned int filler : 7; unsigned int present : 1; unsigned int limit2 : 4; unsigned int filler2 : 4; unsigned int base2 : 8; } LDTR; IDTR idtr; GDTR gdtr; LDTR ldtr; unsigned char xxxx[8]; int main() { int i; asm ("sidt _idtr"); asm ("sgdt _gdtr"); asm ("sldt _ldtr"); printf("idtr base = 0x%08x, limit = 0x%04x\n",idtr.base,idtr.limit); printf("gdtr base = 0x%08x, limit = 0x%04x\n",gdtr.base,gdtr.limit); printf("ldtr base = 0x%08x, limit = 0x%04x\n", ldtr.base|(ldtr.base2<<24), ldtr.limit|(ldtr.limit2<<16)); /* This shows how the bytes are backwards! */ asm ("sidt _xxxx"); printf("idtr = "); for (i=0; i<8; i++) printf("0x%02x ", xxxx[i]); printf("\n"); return 0; } -- Greg