学汇编,记笔记(十四)《汇编语言》王爽著——外中断

90 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

学习教材:《汇编语言(第4版)》王爽著 此笔记是书中内容+自我总结,方便查阅和复习 请支持原著

CPU通过端口与芯片(外部设备)交换数据

一、外中断信息

前几章的内中断来源于CPU内部,而此处外中断来源于外部设备,中断码通过总线传入CPU

外中断分为两类:

Ⅰ、可屏蔽外中断

CPU可以不响应的外中断,如果IF=1,执行完当前指令CPU响应,如果IF=0,则不响应

前面中断例程中IF置零就是禁止其他可屏蔽中断

几乎所有由外部设备引发的外中断都是可屏蔽的

手动置IF

sti置IF为1(set IF),cli置IF为0(clean IF)

Ⅱ、不可屏蔽外中断

执行完当前后立即响应,不可屏蔽中断的类型码固定为2,因此不需要取得,中断例程直接到标志寄存器入栈

通常紧急事件都是不可屏蔽外中断

二、键盘处理——可屏蔽外中断

以下是键盘输入的处理过程

  1. 键盘接口寄存器在60h
  2. 按下一个键产生一个扫描码叫通码,放开产生一个断码,送入到60h端口。其中:通码第七位为0断码的为1,通码+80h=断码。
  3. 送入后芯片向CPU发送中断9,如果IF=1,引发int 9中断例程
  4. 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对外部输入的通常处理方法

  1. 输入送入端口

  2. 向CPU发送可屏蔽外中断信息

  3. CPU检测到终端信息,且IF=1,执行中断例程

“端口和中断机制,是CPU进行I/O的基础。”