2011-10-04 7 views
1

BIOS가있는 Atom-32bit-intel 보드 n450을 가지고 있습니다. 내 목표는 APIC 타이머와 linke를 ISR (0x21)과 함께 사용하는 것입니다. Atom-32bit-intel 보드의 BIOS가 IDT 및 GDT를 만드나요?

 /*Read the IDTR*/ 
     sidt (idt_ptr) 

     /*Read the GDTR*/ 
     sgdt (gdt_ptr) 

그래서 내가 시도 : 잠시 후, 나는 이미 존재 IDT와 GDT (아마도 BIOS에 의해 건설)와 필요를 (소프트웨어는 C 언어와 & T 조립에있다) 구축되지 것을 discoverd 단지 IDT 내 ISR을 연결하는 IDT의 주소를 사용합니다 :

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+2) = (flags>>8)&0xFF00; 
    *(Interrupt_Address+3) = (base>>16)&0xFFFF; 

} 

을 나는 ISR33 전화 할 때 : $ 0x21, 소프트웨어 충돌을 int로 : SingleStep CPU [1] 오류 : 프로세서 실행합니다.

그래서 어디서 잘못 되었습니까 ???

비고 :이클립스 Heros (AT & T 어셈블리)를 사용하면 코드가 보호 모드 (CR0.PE = 1 인 것처럼 보입니다. 아마도 BIOS에서 설정 한 것입니다)입니다.

답변

0

해결 방법 :) BIOS가 있기 때문에 이미 GDT/IDT를 구축 했으므로 sidt 및 sgdt 명령어를 사용하여 주소를 찾았으며 idt에 ISR을 추가했습니다.