如何使用 LIDT 创建 IDT 我在 Intel-Atom 32 位(汇编 AT&T)上工作

发布于 2024-12-07 10:34:28 字数 950 浏览 2 评论 0原文

如何使用 LIDT 创建 IDT 我从事 Intel-Atom 32 位(Assembly AT&T)工作。 我使用 MocroC OSII 作为操作系统, 我这样做了,但它不起作用:

    Load_IDT:
push    %ebp    //save the context to swith back
mov     %esp,%ebp

movw    $256*8, -6(%esp) //256 ISR possible
movl    $IDT, -4(%esp)   //IDT is a table of 256*8bytes
lidt    -6(%esp)

pop     %ebp //Return to the calling function
ret



    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>>4)&0xFF00;
    *(Interrupt_Address+1) = (base>>16)&0xFFFF;

}


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

How to create an IDT using LIDT
I work on Intel-Atom 32bits (Assembly AT&T).
I am using the MocroC OSII as an OS,
i did this but it doesn,t work:

    Load_IDT:
push    %ebp    //save the context to swith back
mov     %esp,%ebp

movw    $256*8, -6(%esp) //256 ISR possible
movl    $IDT, -4(%esp)   //IDT is a table of 256*8bytes
lidt    -6(%esp)

pop     %ebp //Return to the calling function
ret



    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>>4)&0xFF00;
    *(Interrupt_Address+1) = (base>>16)&0xFFFF;

}


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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

风尘浪孓 2024-12-14 10:34:28

已解决:),因为有BIOS,它已经内置了GDT/IDT。

Resolved :), as there is a BIOS, it already built the GDT/IDT.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文