微机接口技术——中断
中断的基本概念
中断:是指CPU在执行程序的过程中,由于某种外部或内部事件的作用,使CPU停止当前正在执行的程序而转去为该事件服务,待时间服务结束后,又能自动返回到被中止了的程序中继续执行的过程。
中断源:能够引发CPU中断的信息源
比如:
8254 0#
,由此引发的中断称为日时钟中断;
键盘接口
,由此引发的中断称为键盘中断;
设备故障
,由此引发的中断称为故障中断
中断的分类
-
外部中断 : 外部事件引发的中断
- 即由CPU以外的设备发出,并由CPU的中断请求信号引脚输入所引发的中断称为
外部中断
,也叫硬件中断
- 即由CPU以外的设备发出,并由CPU的中断请求信号引脚输入所引发的中断称为
-
内部中断 : 由CPU内部事件,即由CPU硬件故障或程序执行中的事件所引发的中断称为内部中断。
拓展:又分为软件中断和异常
-
软件中断 : 执行有定义的
INT n
指令而引发的中断- BIOS中断
- DOS中断
- DOS专用中断
- DOS保留中断
- 用户可调用的DOS中断
- 保留给用户开发的中断
-
异常 : 由于CPU本身故障、程序故障等引发的中断
- 故障(Fault)
- 陷阱(Trap)
- 中止(Abort)
-
-
软件中断由于程序事先安排好,因此发生时间可预知;而外部中断和异常的发生是随机的。
中断系统 :为实现中断而采取的硬件,软件措施
中断系统应具备的基本功能 :
-
对于硬件中断,接口电路中应具备
屏蔽
和开放
的功能,这种功能由程序员通过软件去控制。 -
能实现中断判优(中断排队),当有多个中断源提出请求时,应能优先响应高级别的中断。
-
能够实现中断嵌套,即高级别的中断源能够中断低级别的中断服务程序。
-
响应中断后,能自动转入中断处理,处理完毕能自动返回断点。
80X86 中断指令
-
开中断指令 STI
功能:使F寄存器中
I
标志置1,CPU处于开中断状态 -
关中断指令 CLI
功能:使F寄存器中
I
标志置0,CPU处于关中断状态。 -
软件中断指令 INT n
为中断类型码,
n
为0~255之间有定义的无符号整数。 功能:无条件转向n型中断服务子程序
-
中断返回指令 IRET
功能:依次从栈顶弹出6个元素→
IP
,CS
,F
如果栈顶是
INT n
的断口地址,则执行IRET
后,返回断点,否则不能。
-
IRET
是中断服务子程序的出口指令 -
IRET
和RET
的区别-
IRET
从栈顶弹出6 个元素→IP
,CS
,F
远程
RET
,从栈顶弹出4个元素→IP
,CS
近程
RET
,从栈顶弹出2个元素→IP
-
中断向量和中断向量表
-
中断系统是为实现中断而采取的软,硬件措施
-
中断指令,中断向量和中断向量表是实现中断的重要软件措施。
CPU依据中断向量号获取中断服务子程序入口地址,但在实模式下和保护模式下采用不同的途径:
-
中断向量:中断向量是实模式下,中断服务子程序的入口地址
它由2部分组成:
- 服务程序所在代码段的段基址 2 个字节
- 服务程序入口的偏移地址 2 个字节
- 中断服务程序入口的物理地址 = 段 基 址 ( 十 六 进 制 ) × 16 + 偏 移 地 址 ( 十 六 进 制 ) 段基址(十六进制) \times 16 + 偏移地址(十六进制) 段基址(十六进制)×16+偏移地址(十六进制)
- 2 4 = 16 2^4 = 16 24=16, 对于二进制就是左移4位, 对十六进制就是左移一位
-
中断向量表: 所有中断向量的集合
-
中断向量表的设置
CPU规定:在实模式下,中断向量表需设置在系统的RAM最低端的
1K
单元(0 ~ 3FFH
) -
中断向量表的表地址与中断类型的关系
举个栗子 :
21H
型中断向量:存放在84H~ 87H
单元中 问:
9CH
型中断向量存放在何处?解: ∵ 9 C H × 4 = 9CH× 4= 9CH×4= 10011100 00 = 270 H =270H =270H
∴ 9 C H 9CH 9CH型中断向量存于 270 H ~ 273 H 270H ~ 273H 270H~273H单元中
注: n × 4 = n 的 二 进 制 后 接 00 n\times 4 = n的二进制后接00 n×4=n的二进制后接00 即相当二进制后面接两个零, 相当于 2 2 = 4 2^2 = 4 22=4
十进制数后加0相当于乘以10; 同理, 二进制数后加0相当于乘以2.
- 每个入口占用4 Bytes (即每个中断向量占4字节), 低字为段内偏移 , 高字为段基址;
- 中断向量表大小为1 KB (即1024 Bytes) , 共 256 个入口
- 每个中断号对应的中断向量占4个字节, 有256个中断号, 4 × 256 = 1024 4\times 256 = 1024 4×256=1024个字节, 即 1 K B 1KB 1KB.
例子:某中断的中断类型号为
68H
,试述中断操作过程。 解:
① 取中断类型号
68H
② 计算中断向量地址 68 H × 4 = 1 A 0 H 68H×4=1A0H 68H×4=1A0H
③ 取中断入口地址 C S = A 000