1

我正在研究 Atom-32bit 板(AT&T 组件),这个板上还没有软件。

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

这个想法只是将 ISR 与 APIC 计时器一起使用。

/*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;

}
4

2 回答 2

2

基本上,是的。你必须有一个 GDT,这样你就可以有一个段来“指向”一个 IDT 中断向量。请注意,(据我所知)您可以同时加载 IDT 和 GDT,但在加载 GDT 之前您不能使用 IDT。如果您尝试这样做,充其量只会犯三重错误。

于 2011-10-03T16:12:10.280 回答
0

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

于 2011-10-28T13:43:54.257 回答