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

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

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

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

转载于:https://www.cnblogs.com/xpjiang/p/4524428.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值