第十二章 内中断
中断源分为:
①硬件中断
②软件中断(int 21h也属于此)
硬件中断包括:
① 外中断:外设中断请求(可屏蔽)
② 内中断:硬件出错,运算出错(不可屏蔽)
当cpu有如下情况发生的时候,将产生相应的中断信息
① 除法错误,比如执行div指令产生的除法溢出
② 单步执行;
③ 执行into指令;
④ 执行int指令。
8086cpu用称为中断类型码的数据来标识中断信息的来源。中断类型码为字节型数据,可以表示256种中断信息的来源。
用来处理中断信息的程序被称为中断处理程序,一般来说,需要对不同的中断信息编写不同的中断信息编写不同的处理程序。
中断类型的码的作用就是用来定位中断处理程序。
中断向量表,就是中断处理程序入口地址的列表。
中断向量表必须放在0000:0000~0000:03ff单元中。
一个表项占两个字,高地址字存放段地址,低地址字存放偏移地址。
cpu硬件用中断类型码找到中断向量,并用它设置cs和ip的过程被称为中断过程。
中断处理程序编写的常规步骤:
① 保存用到的寄存器;
② 处理中断;
③ 恢复用到的寄存器;
④ 用iret指令返回
iret含义为将当前ip入栈,将cs入栈,将标志寄存器入栈。
在中断过程中,寄存器入栈的顺序是标志寄存器,cs,ip
一般情况下,从0000:200~0000:2ff的256个字节的空间所对应的中断向量表都是空的。
汇编编译器可以处理表达式。+,-,*,/
如果TF=1,则执行一条指令后,cpu就要转去执行1号中断处理程序。
中断过程:
① 取得中断类型码N;
② 标志寄存器入栈,TF=0、IF=0;
③ CS、IP入栈;
④ (ip)=(4n),(cs)=(4n+2).
cpu提供单步中断功能的原因是,为单步跟踪程序的执行过程,提供了实现机制。
有些情况下,cpu在执行完当前指令后,即便发生中断,也不会响应。
- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56