汇编11--内中断

11.1内中断的产生
CPU可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来或内部产生的一种特殊信息,并且可以立即对所接受的信息进行处理,这种特殊的信息,我们可以称其为:中断信息。中断的意思是,CPU不再接着向下执行,而是转去处理这个特殊信息
当发生以下信息时,将产生相应的中断信息
(1)除法错误,比如div指令发生溢出
(2)单步执行
(3)执行into指令
(4)执行int指令

11.2中断处理程序
中断信息中包含有标识中断源的类型码。中断类型码的作用就是用来定位中断处理程序

11.3中断向量表
CPU用8位的中断类型码通过中断向量表找到响应的中断处理程序的入口地址
8086CPU中,中断向量表指定放在内存单元地址0处,从内存单元0000:0000到0000:03FF的1024个单元中存放着中断向量表。
(中断向量表的下标是从0开始的)
中断向量表中,一个表占两个字节,一个表存放一个中断向量,也就是一个中断处理程序的入口地址,,这个入口地址包括段地址和偏移地址,所以一个表占两个字,高地址存放段地址,低地址存放偏移地址。

存储N号中断源对应的中断处理程序入口的偏移地址的内存单元为4N
存储N号中断源对应的中断处理程序入口的段地址的内存单元为4N+2

11.4中断过程
下面是CPU收到中断信息后,所引发的中断过程
(1)从中断信息中取得中断类型码。
(2)标志寄存器的值入栈(因为在中断过程中要改变标志寄存器的值),所以先将其保存在栈中
(3)设置标志寄存器的第8位TF和第9位IF的值为0
(4)CS的内容入栈
(5)IP的内容入栈
(6)从内存地址为中断类型码*4和中断类型码*4+2的两个字单元中读取中断处理程序的入口设置IP和CS

11.5中断处理程序和iert指令
下面是中断处理程序的子程序的常规步骤:
(1)保存用到的寄存器
(2)处理中断
(3)回复用到的寄存器
(4)用iret指令返回
iert指令的功能用汇编语言描述为:
pop ip
pop cs
popf

EX:
计算某个子程序的开始 offset 子程序的标号
计算某个程序的大小 offset 子程序开始的标号 - offset子程序结束的标号
但是子程序的结束标号要这样写
xxxend:nop

单步中断:
CPU在执行一条指令之后,如果检测到标志寄存器的TF位为1,则产生单步中断引发中断过程,在进入中断处理程序之前,设置TF = 0,

举例一种响应中断的特殊情况
在执行完向ss寄存器传送数据的指令后,即便是发生中断,CPU也不会响应。所以我们要把设置ss和sp的指令放在一起。

ex
int指令
int n,n为中断类型码,它的功能是引发中断程序。
CPU执行int n指令,相当于引发一个n号中断的中断过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值