第十五章 外中断
体现了cpu的I/O能力。
1)cpu如何得知外设输入了?
2)cpu如何得到外设的输入?
15.1 接口芯片和端口
cpu通过端口和外部设备进行联系
15.2 外中断信息
外部设备通过外中断来通知cpu 引发中断过程,处理外设的输入。
外中断源:
1. 可屏蔽中断
可屏蔽中断是cpu可以不响应的外中断。 例如IF =1 则cpu会响应可屏蔽中断,如果IF=0 cpu则不响应
内中断引发的中断过程:
1)取中断类型码n;
2)标志寄存器入栈, IF=0, TF=0
3) CS,IP入栈
4)(IP)=(n*4), (CS) = (n*4 + 2)
如果需要接受可屏蔽外部中断设置IF =1
sti; if = 1
cli; if = 0
(std; df = 1
cld; df = 0)
2. 不可屏蔽中断
在8086中,不可屏蔽中断固定为2.,不需要取中断类型码
1) 标志寄存器入栈,IF=0, TF=0
2) CS, IP入栈
3)(IP) = (8), (CS) = (0AH)
15.3 PC机键盘的处理过程
1. 键盘输入
按下和松开按键产生扫描码
存放在端口60h
按键产生通码;松开一个键产生断码。扫描码长度为1个字节,通码第七位是0 ,断码第七位是1
断码 = 通码 + 80h
2. 引发9号中断
有键盘输入,除了在端口60h存放相应的扫描码,还会向cpu发送INT 9 中断。
3. 执行int 9 中断的例程
BIOS中有中断9的例程,用来进行基本的键盘输入处理。
15.4 编写int 9 中断例程
1)键盘产生扫描码
2)扫描码送入60h端口
3)引发9号中断
4)cpu执行int9中断例程处理键盘输入。
编程:在屏幕依次显示 a~z ,并且可以让人看清。在显示过程中,按下ESC键后,改变现实颜色。
运行代码如下
assume cs:code
stack segmentdb 128 dup (0)
stack endscode segment
start: mov ax, stackmov ss, axmov sp, 128mov ax, 0b800hmov es, axmov ah, 'a's: mov es:[160*12 + 40*2], ahcall delayinc ahcmp ah, 'z'jna smov ax, 4c00hint 21hdelay: pushfp