第十五章 外中断
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的基础。
- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56