您的位置:首页 > 其它

[Intel汇编-MASM]外中断

2014-12-21 14:10 162 查看
1. 外中断的概念:

1) 之前叙述过,外中断基本上都是外设引发的,而外设和CPU通信的桥梁就是端口;

2) 外中断分为可屏蔽中断和不可屏蔽中断两种:

i. 可屏蔽中断:几乎所有由外设引发的外中断都是可屏蔽的,即在程序可以通过设置IF标志位决定是否允许在当前程序中被外中断打断;

*1. sti:set interrupt flag,将IF置1,表示可以允许外中断;

*2. cld:clean interrupt flag,将IF置0,表示不允许外中断;

*3. 还记得中断过程吗?其中有一步就是讲IF置0,这样进入中断处理程序后就可以接受外中断了,但是你可以根据具体需求在中断处理程序中通过指令sti或cli来设置是否允许外中断;

ii. 不可屏蔽中断:

*1. 所有中断类型码为2的都是不可屏蔽中断;

*2. 即不管IF是什么值都无法屏蔽必须执行的中断;

*3. 因此这类中断都是用来处理极端紧急且重要的情况;

*4. 由于不可屏蔽,因此中断过程中不用在识别中断类型码(即比普通中断过程少掉第一步),不可屏蔽中断本质是由硬件实现的;

!所有的中断过程本身就都是由硬件控制的;

2. 使用BIOS进行键盘I/O:

1) 9号中断——键盘输入:

i. 键盘中有一块扫描芯片,可以对键盘上每一个键的开关状态进行扫描,当一个键被按下或被松开时都会产生一个扫描码,按下时产生通码,松开时产生断码,且断码 = 通码 + 80H;

ii. 产生的扫描码会送到60H号端口,一旦扫描码达到端口就会向CPU发出9H可屏蔽外中断信息,如果此时IF=1就会立即执行该中断处理程序;

iii. int 9中断处理的过程:

*1. 从60H处读出扫描码;

*2. 将扫描码进行转换,对于字符码(A~z0~9?!等)会转化成相应的ASCII码并用一个字保存(高8位放扫描码,低8位放相应的ASCII码),然后将其放入BIOS键盘缓冲区(该缓冲区是BIOS在开机时在内存中划的一块专门用于存放键盘输入的缓冲区,最多可以存放15个按键)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: