一个想了好几天的问题——关于8086cpu本身编写9号中断不能单步的问题

       在《汇编语言》第十五章中咱们可能遇到这样的问题:程序运行正确,可是debug单步调试,却没法运行,修改int 9h中断例程入口地址的指令,虚拟模式下,debug提示指令无效,而在实模式下,则程序卡死。

       这里个人见解以下:由于咱们单步的时候,当设置9号中断偏移地址的指令执行后,这时段地址尚未进行相应的设置,而单步键入命令(如:t命令)的时候程序要调用键盘中断程序,这就致使程序转去一个错误的地址执行程序,这就形成了一种假象—程序卡死,其实这时只是键盘中断的入口地址不正确,致使键入的字符失去 响应,这样的话,若是咱们要用debug调试程序,就须要用g命令跳过设置int 9中断入口地址的指令,使其连续设置9号中断入口地址,以免上述问题的发生。也许你会有这样的迷惑(实际上是个人迷惑),就是在设置9号中断入
口地址的时候咱们已经经过cli屏蔽了键盘中断,这时应该不会响应9号中断啊?那我要反问一句,那你cli以后,为何还能键入命令符?其实不难猜测,这是debug自己的问题,其内部实现上,在执行完一条指令后,应该有相似sti这样的指令执行,使其接受键盘中断,为下一条命令的输入提供前提条件。

        反思:我开始思考时,就陷入了一种思惟怪圈,当时就想,为何程序运行正确,单步运行就出错,难道单步过程当中用到了9号中断?不对啊,明明经过指令屏蔽了键盘中断,如此反复,思索未果,就去想有没有其余的可能,想啊想,想啊想,各类分析,各类思考,就是想不明白,越想越以为迷惑,几天过去了,又回到了问题的原点才算是终于想通了,问题的解决来自于头脑中一个忽然的发问:屏蔽了键盘中断问断,怎么还能接受命令符?对这个问题的思索,才算是解决了问题。
相关文章
相关标签/搜索