2011-10-03 133 views
1

我正在使用Atom-32位板(AT & T組件),此主板上還沒有軟件。我是否需要neet GDT來構建IDT?

我需要構建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

解決:),因爲有一個BIOS,它已經建立了GDT/IDT,所以我發現使用SIDT和SGDT指令有地址,我將自己ISR到SIDT

2

基本上是的。你必須有一個GDT,以便你可以有一個段「指向」一個IDT中斷向量。請注意,(據我所知),您可以同時加載IDT和GDT,但在加載GDT之前,您無法使用IDT。如果你嘗試着,你最好會得到三重錯誤。

+0

:10X我會讓一個如此 –

+0

@Alex:一些更新:我發現原子板上有一個BIOS,所以我檢查了IDT和GDT「/ *讀取IDTR */sidt(idt_ptr)/ *讀取GDTR */sgdt(gdt_ptr )「並且他們存在,看起來像BIOS製造它們。我試圖使用它們(見上面的函數fill_interrupt),之後,我用「int $ 0x20」,PFFFF代碼再次崩潰.....: - (....任何線索或備註或問題??? –

+0

@必須做什麼?是的,BIOS可能會加載GDT和IDT,但是實際上是IBM PC標準,在您啓動加載器之前,您會重新進入實模式(無GDT或IDT)。 32位「主板有什麼特別之處?它是用於個人電腦的典型Intel Atom主板嗎? – Earlz