Mail Archives: djgpp/1994/01/17/15:18:37
Dear Paul,
Here is what the GDT and IDT look like under djgpp.
#include <stdio.h>
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
- Raw text -