在c / asm x86中重新编程中断

时间:2012-03-11 19:52:47

标签: assembly x86 interrupt

我的问题是我必须在不使用dos.h等系统库的情况下重新编程中断,所以我不能使用像getvect或setvect这样的函数。我已经在C中创建了工作程序(使用asm插入)但它使用的是DOS函数。如何在没有dos.h的情况下使用asm而不是使用asm?

我考虑过将程序写入内存中的固定位置,然后在中断向量表中更改adres但我不知道如何执行此操作 - 尤其是该程序主要位于C中。

我必须重新编程系统时钟中断和LPT中断。系统时钟的定时器已经加速,因此我每隔几次就必须产生原始的系统时钟中断。

1 个答案:

答案 0 :(得分:3)

据我记忆,中断表开始于0000:0000h。每个中断记录有4个字节:段2的2个字节用于偏移。

xor ax, ax
mov es, ax

mov bx, interrupt_number
mov ax, cs
mov es[bx*4], ax
mov es[bx*4+2], offset yourSubroutine

它应该是这样的,虽然我不记得非常精确