我需要GST来构建IDT吗?

时间:2011-10-03 15:40:14

标签: assembly x86 osdev

我正在使用Atom-32bit主板(AT& T组装),此主板上还没有软件。

我是否需要构建GDT来构建/使用IDT?

这个想法只是使用带有APIC计时器的ISR。

/*Change the address of idt_entries table */
fill_interrupt(ISR_Nbr,(unsigned int) isr33, 0x08, 0x8E);


static void fill_interrupt(unsigned char num, unsigned int base, unsigned short sel, unsigned char flags)
{
    unsigned short *Interrupt_Address;

    /*address = idt_ptr.base + num * 8 byte*/
    Interrupt_Address = (unsigned short *)(idt_ptr.base + num*8);

    *(Interrupt_Address) = base&0xFFFF;
    *(Interrupt_Address+1) = sel;
    *(Interrupt_Address+1) = (flags>>8)&0xFF00;
    *(Interrupt_Address+1) = (base>>16)&0xFFFF;

}

2 个答案:

答案 0 :(得分:2)

基本上,是的。你必须有一个GDT,这样你才能有一个段来“指向”IDT中断向量。注意,(据我所知)你可以同时加载IDT和GDT,但是在加载GDT之前你不能使用IDT。如果你试图在最好的情况下获得三重错误。

答案 1 :(得分:0)

已解决:),因为有一个BIOS,它已经构建了GDT / IDT,所以我找到了使用sidt和sgdt指令的地址,并且我将我的ISR添加到了sidt