我正在使用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;
}
答案 0 :(得分:2)
基本上,是的。你必须有一个GDT,这样你才能有一个段来“指向”IDT中断向量。注意,(据我所知)你可以同时加载IDT和GDT,但是在加载GDT之前你不能使用IDT。如果你试图在最好的情况下获得三重错误。
答案 1 :(得分:0)
已解决:),因为有一个BIOS,它已经构建了GDT / IDT,所以我找到了使用sidt和sgdt指令的地址,并且我将我的ISR添加到了sidt