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

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

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

            反思:我开始思考时,就陷入了一种思维怪圈,当时就想,为什么程序运行正确,单步运行就出错,难道单步过程中用到了9号中断?不对啊,明明通过指令屏蔽了键盘中断,如此反复,思索未果,就去想有没有其他的可能,想啊想,想啊想,各种分析,各种思考,就是想不明白,越想越觉得迷惑,几天过去了,又回到了问题的原点才算是终于想通了,问题的解决来自于头脑中一个突然的发问:屏蔽了键盘中断问断,怎么还能接受命令符?对这个问题的思索,才算是解决了问题。
  • 相关阅读:
    python BeautifulSoup库的基本使用
    python操作RabbitMQ
    MySQL主从复制
    python字典与集合操作
    常见术语
    Mac下如何使用homebrew
    springboot整合freemarker
    Servlet与JSP概念理解
    slf4j-api、slf4j-log4j12以及log4j之间什么关系?
    使用nodeJs安装Vue-cli并用它快速构建Vue项目
  • 原文地址:https://www.cnblogs.com/xpjiang/p/4524428.html
Copyright © 2011-2022 走看看