本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
学习教材:《汇编语言(第4版)》王爽著 此笔记是书中内容+自我总结,方便查阅和复习 请支持原著
CPU通过端口与芯片(外部设备)交换数据
一、外中断信息
前几章的内中断来源于CPU内部,而此处外中断来源于外部设备,中断码通过总线传入CPU
外中断分为两类:
Ⅰ、可屏蔽外中断
CPU可以不响应的外中断,如果IF=1,执行完当前指令CPU响应,如果IF=0,则不响应
前面中断例程中IF置零就是禁止其他可屏蔽中断
几乎所有由外部设备引发的外中断都是可屏蔽的
手动置IF
sti置IF为1(set IF),cli置IF为0(clean IF)
Ⅱ、不可屏蔽外中断
执行完当前后立即响应,不可屏蔽中断的类型码固定为2,因此不需要取得,中断例程直接到标志寄存器入栈
通常紧急事件都是不可屏蔽外中断
二、键盘处理——可屏蔽外中断
以下是键盘输入的处理过程
- 键盘接口寄存器在60h
- 按下一个键产生一个扫描码叫通码,放开产生一个断码,送入到60h端口。其中:通码第七位为0断码的为1,通码+80h=断码。
- 送入后芯片向CPU发送中断9,如果IF=1,引发int 9中断例程
- int 9中断例程:读取扫描码,若是字符键,转化为ASCII送入内存的BIOS键盘缓冲区,,可以存15个输入,一个输入用一个字存储,高位扫描码低位ASCII;如果是控制键和切换键,则将其换成状态字节写入内存中存储状态字节的单元0040:17
检测点15.1
(1)精简int 9中断例程
pushf
call dword ptr ds:[0]
(2)排除问题
代码片段
cli
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2]
sti
后记
CPU对外部输入的通常处理方法
-
输入送入端口
-
向CPU发送可屏蔽外中断信息
-
CPU检测到终端信息,且IF=1,执行中断例程
“端口和中断机制,是CPU进行I/O的基础。”