我正在尝试为旧的dos游戏创建一个简单的“作弊”程序,通过将其自身加载到内存中,然后拦截键盘输入并在按下某个键时执行某些操作。
所以我通过
捕获输入cli
mov ax, [es:9*4+2]
mov [origseg], ax
mov ax, [es:9*4]
mov [origint], ax
mov word [es:9*4], kbhandler
mov [es:9*4+2],cs
sti
然后,在kbhandler的末尾,我通过
将控制传递给原始处理程序push word [origseg]
push word [origint]
retf
根据调试器,这可行,但最终崩溃了 “非法未处理的中断称为0”(在dosbox中)。我已经减少了自己的处理程序,除了上面的代码之外什么也没有,问题仍然存在。
对我做错了什么的想法?