SetInt 9h,KbdEvent(这是什么)??? (MASM)

时间:2015-10-26 15:18:25

标签: assembly dos interrupt masm drivers

有人可以告诉我这两行在代码中的作用(DOS键盘驱动程序)吗?

GetInt 9h,OldKbdEvent
SetInt 9h,KbdEvent

OldKbdEvent在代码中的其他地方定义如下:     OldKbdEvent DD ? KbdEvent作为代码中其他位置的标签存在。这些是定义这些符号的唯一实例。

在这两行之后,代码向DOS发出中断27h(终止并保持驻留),这意味着DOS终止程序但将其保留在内存中以便稍后恢复。

1 个答案:

答案 0 :(得分:0)

如果您查看代码,我希望您找到一对宏GetIntSetInt。继续名称,这些将获取或存储一个值到中断表,位于0000:0000 - 你正在处理Int 0x09,所以他们将访问0000:(0x9 * 4)

基本上,他们在int表中获取并设置键盘处理int的值。 16位表由256个条目组成,每个条目4个字节,2个用于段,2个用于偏移。当cpu收到一个int时,它会在将执行转移到该点之前查找该表中的地址。

这里有一些代码可以实现我想象的SetInt:

cli                             ;no interruptions
mov bx, 0x09                    ;hardware interrupt #
shl bx, 2                       ;multiply by 4
xor ax, ax
mov gs, ax                      ;start of memory
mov [gs:bx], word keyhandler
mov [gs:bx+2], ds               ; segment
sti