前言:学习X86指令体系下的中断指令和中断返回指令
引起中断的事件或设备称为”中断源”,原程序被中断的地方称为”断点”。CPU被中断后转去执行的程序称为”中断处理程序”或”中断子程序”
中断类型
外部非屏蔽中断NMI:中断源来自CPU之外,不受IF控制的中断,通常情况下CPU必须响应这类中断
外部可屏蔽中断INTR:中断源来自CPU之外,是否响应中断IF标志控制,IF = 1时CPU才响应中断。涉及指令有关中断CLI,开中断STI
内部中断:中断源为程序执行过程中程序自身引发的中断事件。内部中断有四种
(1):除法错中断:被0除或除法中断
(2):单步中断:当单步标志TF = 1时,每执行一条指令后产生单步中断(1号中断)
(3):溢出中断:执行中断指令INTO时,如OF = 1,则产生溢出中断
(4):INT指令中断:执行中断调用指令
INT n
,产生指令中断,其中n = 0~255
中断处理程序
该程序的第一条指令的地址为中断处理程序的入口地址
CPU要执行某个中断处理程序,必须获得该程序的入口地址,所以中断信息(中断类型号)与中断处理程序入口地址间必须建立某种联系
中断向量表
将所有的中断处理程序的入口地址集中存放在绝对地址为00000~003FFH存储空间。
每个中断源都有一个类型号,每个中断处理的程序的入口地址占4个字节(IP,CS各2个字节)
中断处理程序的入口地址 = 中断类型号 × 4,
中断类号01FH为BIOS中断; 20H3FH为DOS中断; 60H~67H为用户中断
中断指令和中断返回指令
中断指令INT
指令格式: INT n ;中断调用指令,产生n号中断,n为8位立即数
溢出中断指令INTO
指令格式:INTO ;溢出中断指令,若溢出标志OF = 1,说明发生溢出,则产生4号中断;OF = 0本指令不起作用
中断返回指令IRET
指令格式:IRET
中断与子程序的关系
- 相同点:暂停当前程序的执行,转而执行另外一个程序;当程序执行结束后,CPU都自动恢复有原程序的执行
- 不同点:子程序调用是用CALL指令实现的,而中断只有发出中断请求的事件,没有调用中断的指令;子程序的返回指令是RET,而中断服务程序的返回指令是IRET