外中断

CPU通过总线和端口来与外部设备进行联系,外部可屏蔽中断的中断类型码是通过数据总线送入CPU的。

        IF=1,CPU响应中断,引发中断过程

        IF=0,不响应可屏蔽中断

        sti指令,设置IF=1

        cli指令,设置IF=0

中断过程:

      (1) 取得中断类型码N

      (2) pushf

      (3) TF=0,IF=0

      (4) push CS

      (5) push IP

      (6) (IP)=(N*4),(CS)=(N*4+2)

不可屏蔽中断的中断过程:

(不可屏蔽中断的中断类型码固定为2,不用获取)

     (1) pushf

     (2) TF=0,IF=0

     (3) push CS

     (4) push IP

     (5) (IP)=(8),(CS)=(0AH)

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

键盘按下一个键产生的扫描码为通码

键盘松开一个键产生的扫描码为断码

扫描码长度为一字节,通码第7位为0,断码第7位为1

断码=通码+80h


键盘输入到达60H端口时,引发9号中断

9号中断是可屏蔽中断,由BIOS提供的,用来进行基本的键盘输入处理

执行int 9中断:

      (1)读出60H端口中的扫描码

      (2)如果是字符扫描码,将扫描码和对应的字符码(ASCII码)送入内存BIOS键盘缓冲区,如果是控制键,则将其转为状态字节写入存储状态字的单元

      (3)对键盘系统进行相关的控制

在BIOS键盘缓冲区中可存储15个键盘输入,一个键盘输入用一个字单元存放,高位扫描码,低位字符码

0040:17单元存放键盘状态字节,记录了控制键和切换键的状态

键盘输入的处理过程:

1、键盘产生扫描码

2、扫描码送入60H端口

3、引发9号中断

4、CPU执行int 9中断例程处理键盘输入

int指令执行中断过程: 模拟

(1) 取得中断类型码N (1)不需要定位入口地址

(2) 标志寄存器入栈 (2)pushf

(3) TF=0,IF=0 (3)pushf

pop ax

and ah,11111100b ;IF为flag的第9位

;TF为flag的第8位

push ax

popf

(4) CS、IP入栈 (4)call dword ptr ds:[0]

(5) (IP)=(N*4),(CS)=(N*4+2)

因为在进入中断例程后,IF和TF都已置0,没有必要再进行设置了,对于模拟int指令可以精简为:

pushf ;标志寄存器入栈

call dword ptr ds:[0] ;CS、IP入栈;(IP)=ds:[0],(CS)=ds:[2]

CPU对外设输入的通常处理方法:

(1)外设的输入端口

(2)向CPU发出外中断(可屏蔽中断)信息

(3)CPU检测到可屏弊中断信息,如果IF=1,cpu在执行完当前指令后响应中断,执行相应的中断例程

(4)可在中断例程中实现对外设输入的处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值