当前位置: 代码迷 >> 综合 >> 王爽 《汇编语言》 读书笔记 十五 外中断
  详细解决方案

王爽 《汇编语言》 读书笔记 十五 外中断

热度:81   发布时间:2024-01-20 02:24:03.0

第十五章 外中断

体现了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
  相关解决方案