我的问题是我必须在不使用dos.h等系统库的情况下重新编程中断,所以我不能使用像getvect或setvect这样的函数。我已经在C中创建了工作程序(使用asm插入)但它使用的是DOS函数。如何在没有dos.h的情况下使用asm而不是使用asm?
我考虑过将程序写入内存中的固定位置,然后在中断向量表中更改adres但我不知道如何执行此操作 - 尤其是该程序主要位于C中。
我必须重新编程系统时钟中断和LPT中断。系统时钟的定时器已经加速,因此我每隔几次就必须产生原始的系统时钟中断。
答案 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
它应该是这样的,虽然我不记得非常精确