0%

X86指令体系下的中断指令和中断返回指令

前言:学习X86指令体系下的中断指令和中断返回指令

引起中断的事件或设备称为”中断源”,原程序被中断的地方称为”断点”。CPU被中断后转去执行的程序称为”中断处理程序”或”中断子程序”

中断类型

  1. 外部非屏蔽中断NMI:中断源来自CPU之外,不受IF控制的中断,通常情况下CPU必须响应这类中断

  2. 外部可屏蔽中断INTR:中断源来自CPU之外,是否响应中断IF标志控制,IF = 1时CPU才响应中断。涉及指令有关中断CLI,开中断STI

  3. 内部中断:中断源为程序执行过程中程序自身引发的中断事件。内部中断有四种

    (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