wordpress网站设密码错误,卸载西部数码网站管理助手,长安网页设计公司,深圳市宝安区投资推广署0 前言
基于王爽《汇编语言》和Coursera的《计算机组成》课程。
1 中断分类
CPU在执行指令的过程中#xff0c;产生了一个异常/中断#xff0c;因为CPU只能同时执行一条指令#xff0c;所以需要暂停该指令的执行#xff0c;转而去处理异常/中断信息。
这个异常可以来…0 前言
基于王爽《汇编语言》和Coursera的《计算机组成》课程。
1 中断分类
CPU在执行指令的过程中产生了一个异常/中断因为CPU只能同时执行一条指令所以需要暂停该指令的执行转而去处理异常/中断信息。
这个异常可以来源于
内部中断 指令执行本身例如 0号中断除法错中断 自动检测、INT 0、4号中断溢出中断 INTO、INT 4程序调试例如1号中断单步中断 INT 1、3号中断断点中断 INT 3 外部中断与CPU相关的信号有关 可屏蔽中断不可屏蔽中断
2 内中断实例分析除法错中断
我们来看一看除法错中断发生的完整过程来理解中断的相关概念。
2.0 来源
程序实例
assume cs:datasg
datasg segment
start:mov ax,1000hmov bh,1div bhmov ax,4c00hint 21h
datasg ends
end start2.1 产生 检测
很明显1000h / 1得到的商超过了8位AL的范围会产生溢出。从而被CPU内部的中断检测部件检测出来触发中断机制。
2.2 触发 执行
中断机制被触发后会做出一系列动作先执行中断程序再回来继续执行原程序注意这里的说明相对抽象。
识别中断源触发对应的中断信息这里是0号中断保存现场 标志寄存器入栈 pushf修改标志寄存器IF 0、TF 0不接收可屏蔽中断不进行单步中断CS:IP入栈老大CS先入栈然后是IP 根据中断向量表中相应中断源的值修改CS:IP执行中断服务程序执行完后执行iret依次出栈恢复现场。接着执行下面的指令可能是出现异常的指令也可能是下一条指令与实际情况有关
2.3 修改0号中断
0号中断是存储在8086CPU内存的中断向量表中0x0000 ~ 0x03ff共400H也就是1MB的空间。
写一段程序然后将其拷贝到被保护的内存区域指令和数据都要然后将中断向量表对应的地址修改这样这段程序就成为了中断服务程序可以被动调用也可以主动调用。
3 对中断的理解
3.1 中断是什么
指令执行过程中有其他事务要优先处理需要放下当前执行的指令执行完其他事务再回来执行。
这就好比你在写作业突然你妈妈让你去买酱油你就需要先放下作业买完酱油回来再写作业。这里买酱油就是一个中断。
3.2 中断来源于哪
程序内部出现异常程序内部主动请求中断外部设备请求中断
外部中断分为可屏蔽可以不理会和不可屏蔽中断必须执行不可忽略。
3.3 中断何时发生
查看中断向量表即可。
3.4 中断执行过程是什么
检测到中断保存现场屏蔽外界中断屏蔽单步中断根据中断向量表的地址修改CS:IP执行中断服务程序恢复现场继续执行
3.5 中断服务程序是什么?
普通的一段程序如果其入口地址被放在了中断向量表的某个中断中这个程序就是【中断服务程序】。
发生中断时系统给出的解决方案就是中断服务程序。其入口地址存放在中断向量表中程序系统默认有也可以自己编写。
3.6 中断服务程序如何编写和安装?
编写一段普通的程序指令 数据将其拷贝到特殊的内存位置指令和数据都要一起拷贝将其入口地址写入到中断向量表中
3.7 中断的功能是什么
3.7.1 自动调用Checked异常处理
比如除法错中断就是系统自动检测并处理的。
3.7.2 手动调用Unchecked异常处理
比如溢出中断需要手动写INTO(Interrupt Overflow)指令才会进行处理否则运算溢出的时候不做任何处理。
3.7.3 手动调用系统调用System Call
主动使用中断能够帮助程序员快速实现一些功能这也就是基于中断机制的功能调用极大提高了开发效率。
4 单步中断 断点中断
这两个中断类型就是单步调试和断点调试背后的实现机制方便程序员调试程序。
4.1 单步中断
TF标志位为1的时候发生单步中断然后就被置0防止无限嵌套中断发生。
单步中断是为了方便调试程序和查看寄存器等相关内容的值。
4.2 断点中断
对于INT n。n一共是256个占1个字节INT指令码占1个字节共2个字节而**断点中断INT 3**特殊占1个字节其编码是1100_1100B这与其实现机制有关。
断点中断是通过INT 3指令主动调用的执行的时候该指令会临时替换断点处的1个字节遇到了就发生中断显示寄存器和其他相关内容的值便于程序员调试。
x86指令系统中指令最少1个字节因此INT 3也是1个字节这样INT 3的替换至多影响1条指令。 如果不是1个字节可能影响2条指令发生错误。
4.3 应用
例如debug的t命令还有插入断点等都是基于单步中断和断点中断机制实现它们的出现是为了方便程序调试并且在debug程序中已经能够实现中断触发对着这种指令不要写在程序中调试程序直接让程序运行在调试模式下就好了。