汇编语言之内中断

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_29983883/article/details/102739042

中断的作用就是暂停当前程序的执行,并转去执行另外一个程序。内中断是cpu执行的指令产生的
系统内置的内中断

除法错误,比如执行div指令产生的除法溢出 0
单步执行 1
执行into指令 4
执行int指令 N

中断处理程序

中断处理程序就是cpu收到中断消息后,需要对中断信息进行处理,用来处理的中断信息的程序称为中断处理程序

中断向量表

CPU用8位的中断类型码通过中断向量表找到相应的中断处理程序的入口地址,中断向量表就是中断向量的列表,也就是中断处理程序入口的地址
中断向量表存储位置是,对于8086上,中断向量表指定放在内存地址0处,从内存0000:0000到0000:03FF的1024个单元中存放着中断向量表,

中断过程

CPU收到中断信息后,要对中断信息进行处理,首先引发中断过程,硬件完成中断过程后,CS:IP将指向中断处理程序的入口,CPU开始执行中断处理程序
下面是cpu收到中断信息后,所引发的中断过程

从中断信息中取得中断类型码
标志寄存器入栈
设置标志寄存器的TF和IF的值为0
CS的内容值入栈
IP的内容入栈
在中断向量表中获得中断处理程序的CS和IP

使用汇编语言表示:

pushf
TF = 0,IF = 0
push CS
push IP
(IP) = (N*4),(cs) = (N*4)+2

中断处理程序和iret指令

中断处理程序的过程是

保存用到的寄存器
处理中断
恢复用到的寄存器
用iret指令返回

iret指令汇编描述为

pop Ip
pop CS
popf

响应中断的特殊情况

一般情况下,cpu在执行当前指令后,如果检测到中断信息后,就相应中断,引发中断过程,有些情况下,cpu执行完当前指令,即便发生中断,也不会相应,例如
在执行完设置ss寄存器传中数据的指令后,即便发生中断,CPU也不会相应,这个是因为ss:sp联合指向栈顶。而对他们应该是连续完成,当ss设置完后,如果相应中断,标志寄存器压栈,但是压栈的地方有问题,因为ip的值未设置。所以cpu在执行完ss的值设置后,不会相应中断信息,所以ss和ip的值设置需要连续,并且ss设置放在前面,sp设置放在后面

mov ax,1000h
mov ss,ax
mov sp,0

下面这种设置就错误

mov ax,1000h
mov ss,ax
add ax,10
mov sp,0

单步中断

基本上,cpu在执行一条指令后,如果检测到标志寄存器TF位为1,则产生单步中断,引发中断过程,单步中断的中断类型码为1,

猜你喜欢

转载自blog.csdn.net/qq_29983883/article/details/102739042
今日推荐