汇编网首页登录博客注册
fpamc的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态

[2012-05-18 22:20] 第15章笔记

第十五章 外中断
cpu通过端口和外部设备进行联系。
外中断源有两类:
① 可屏蔽中断

当cpu检测到可屏蔽中断信息时,如果IF=1则cpu在执行完当前指令后响应中断,引发中断过程:如果IF=0,则不响应可屏蔽中断。
可屏蔽中断信息来自于cpu内部,中断类型码是通过数据总线送入cpu的;而内中断的中断类型码是在cpu内部产生的。
中断过程将IF置0的原因就是,在进入中断处理程序后,禁止其他的可屏蔽中断。
sti,设置IF=1
cli,设置IF=0

② 不可屏蔽中断
当cpu检测到不可屏蔽中断信息时,则在执行完当前指令后,立即响应,引发中断过程。
对于8086cpu,不可屏蔽中断的中断类型码固定为2,所以中断过程中,不需要取中断类型码。
不可屏蔽中断过程为:
1. 标志寄存器入栈,IF=0,TF=0
2. cs、ip入栈
3. (ip)=(8),(cs)=(0AH)
当外设有需要处理的事件发生时,相关芯片向cpu发出可屏蔽中断信息。不可屏蔽中断是在系统中有必须处理的紧急情况发生时用来通知cpu的中断信息。

断码=通码+80H
键盘的输入到达60H端口是时,相关芯片就会向cpu发出中断类型码为9的可屏蔽信息。
BIOS提供了int 9中断例程
工作如下:
1. 读出60H端口的扫描码
2. 字符扫描码,将其对应的字符码同时放到BIOS键盘缓冲区;
控制键和切换键的扫描码,则将其转变为状态字节,写入内存中存储状态字节的单元。
3. 对键盘系统进行相关的控制

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

0040:17单元存储键盘状态字节
0:右shift状态,置1表示按下右shift键;
1:左shift状态,置1表示按下左shift键;
2:ctrl状态,置1表示按下ctrl键;
3:alt状态,置1表示按下alt键;
4:ScrollLock状态,置1表示Scroll指示灯亮;
5:NomLock状态,置1表示小键盘输入的是数字;
6:CapsLock状态,置1表示输入大写字母;
7:Insert状态,置1表示处于删除态;

键盘输入的处理过程:
① 键盘产生扫描码
② 扫描码送入60H端口
③ 引发9号中断
④ CPU执行int 9中断例程处理键盘输入

在自己编写的中断例程中调用BIOS的int 9中断例程来实现硬件细节处理。
要在程序返回前,将中断向量表中的int 9 中断例程的入口地址恢复为原来的地址。

cpu对外设输入的通常处理方法:
① 外设的输入送入端口;
② 向cpu发出外中断(可屏蔽中断)信息;
③ cpu检测到可屏蔽中断信息,如果IF=1,cpu在执行完当前指令后响应中断,执行相应的中断例程;
④ 可在中断例程中实现对外设输入的处理。

端口和中断机制,是cpu进行I/O的基础。
评论次数(2)  |  浏览次数(792)  |  类型(汇编笔记) |  收藏此文  | 

[  tomato   发表于  2012-05-18 22:36  ]

O(∩_∩)O

[  fpamc   发表于  2012-05-18 22:43  ]

呵呵~~O(∩_∩)O~~

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码