8086用户定义的中断

时间:2014-05-11 04:43:40

标签: assembly interrupt x86-16

我为8086程序使用masm汇编程序。我想实现用户定义的中断,但找不到办法。我只知道如何实现dos中断(INT 21H)和bios中断(INT 10H)。 我研究过8086有空间用于用户定义的中断(在中断向量表中从32到255)

如何在masm中使用这些中断?

1 个答案:

答案 0 :(得分:3)

8086处理器(以及后续运行在实模式下的Intel处理器)使用中断指针表来确定抛出中断时要执行的操作。该表位于低内存的前1k(0000:0000 - 0000:03ff)中,并包含一个CS:IP值表 - 每256个可能的中断一个 - 在发生中断时加载。

当你的程序启动时,需要填充该表中与其想要使用的中断相对应的条目,并使用相应的函数指针(我认为)是little-endian编码。注意不要与已定义的任何其他中断发生冲突。完成此操作后,如果启用了中断,则只要抛出相应的中断,就应自动调用中断处理程序。请记住在中断处理程序结束时IRET恢复CS:IPFLAGS的状态,一旦触发中断,它们就会被推送到堆栈。

(我不知道你是否可以重新映射INT 21h做其他事情,自己没有尝试过,但我不能想象这样做的意外结果会很漂亮。)