有人可以告诉我这两行在代码中的作用(DOS键盘驱动程序)吗?
GetInt 9h,OldKbdEvent
SetInt 9h,KbdEvent
OldKbdEvent
在代码中的其他地方定义如下:
OldKbdEvent DD ?
KbdEvent
作为代码中其他位置的标签存在。这些是定义这些符号的唯一实例。
在这两行之后,代码向DOS发出中断27h(终止并保持驻留),这意味着DOS终止程序但将其保留在内存中以便稍后恢复。
答案 0 :(得分:0)
如果您查看代码,我希望您找到一对宏GetInt
和SetInt
。继续名称,这些将获取或存储一个值到中断表,位于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