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


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

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

            反思:我开始思考时,就陷入了一种思维怪圈,当时就想,为什么程序运行正确,单步运行就出错,难道单步过程中用到了9号中断?不对啊,明明通过指令屏蔽了键盘中断,如此反复,思索未果,就去想有没有其他的可能,想啊想,想啊想,各种分析,各种思考,就是想不明白,越想越觉得迷惑,几天过去了,又回到了问题的原点才算是终于想通了,问题的解决来自于头脑中一个突然的发问:屏蔽了键盘中断问断,怎么还能接受命令符?对这个问题的思索,才算是解决了问题。
  • 相关阅读:
    BigDecimal保留几位小数方法及其八种舍入模式
    JAVA 将浮点类型的字符串转换成整数类型 (出现转换异常)
    登录linux服务器,显示为 -bash-4.2$
    linux创建用户并授权
    Linux 磁盘挂载
    ping与 curl与telnet 使用
    Docker运行参容器参数说明
    Docker挂载安装Nginx
    Docker学习
    Linux下 文件存放规范
  • 原文地址:https://www.cnblogs.com/xpjiang/p/4524428.html
Copyright © 2020-2023  润新知