汇编入门学习笔记 (十三)—— 外中断
来源:互联网 发布:swoole mysql 长连接 编辑:程序博客网 时间:2024/04/29 05:10
疯狂的暑假学习之 汇编入门学习笔记 (十三)—— 外中断
参考: 《汇编语言》 王爽 第15章
1.外中断信息
外中断分为可屏蔽中断和不可屏蔽中断
可屏蔽中断
先看看内中断所引发的中断过程:
(1)取中断类型吗n。
(2)标志寄存器入栈,设置IF=0,TF=0.
(3)CS、IP入栈
(4)(IP)=(n*4),(CS)=(n*4+2)
可屏蔽中断的中断过程于内中断所引发的中断过程不同的地方只是,第一步不同。可屏蔽中断的中断过程,CPU要先看IF的值,如果IF=0就不执行中断,如果IF=1执行中断。
不可屏蔽中断
不可屏蔽中断是CPU必须相应的中断。不可屏蔽中断很少,所以中断类型吗固定为2,中断过程不需要取中断类型吗
不可屏蔽中断的中断过程:
(1)标志寄存器入栈,设置IF=0,TF=0.
(2)CS、IP入栈
(3)(IP)=(8),(CS)=(0AH)
2. PC机键盘的处理过程
当我们按下一个键时,键盘上的芯片产生一个扫描码,扫描吗说明了按下键盘的键在键盘的位置。扫描吗被送入主板上的相关接口芯片的寄存器中,该寄存器的端口是60h。一般按下一个键的扫描吗叫通吗,松开一个键的扫描吗叫断码,通吗第7位0,断码第7位1,即 断码=通吗 + 80h
键盘的扫描吗到达60h是,相关芯片就会向CPU发出中断类型吗为9的可屏蔽中断信息。
int 9 中断例程主要工作:
(1)读出60h端口的扫描吗
(2)如果是字符键的扫描吗,就将该扫描吗和它所对应的字符吗(ASCII吗)送入内存中的BIOS键盘缓冲区;如果是控制键(如Ctrl)和切换键(如CapsLock)的扫描吗,则将其转变为状态字节(用二进制位记录控制键和切换键状态的字节)写入内存中存储的状态字节单元
(3)对键盘系统进行相关的控制。比如,相相关芯片发出应答信息。
3. 修改int 9 中断
先实现,在屏幕中间间隔显示‘a’ ~ 'z' 字符,要实现间隔显示,就要有延时,用循环非常多的次数来延时。
实现代码:
assume cs:codecode segmentstart:mov ax,0b800hmov es,axmov al,'a's:mov es:[160*12+40*2],alcall delay ;循环10000000次,用来延时inc alcmp al,'z'jna smov ax,4c00hint 21h;delay:push axpush dxmov dx,1000h ;外层循环1000h次,内层循环100000h次mov ax,0s1:sub ax,1sbb dx,0cmp ax,0jne s1cmp dx,0jne s1pop dxpop axretcode endsend start
再实现按下ESC键后,改变显示字符的颜色
assume cs:codestack segmentdb 128 dup(0)stack endsdata segmentdw 0,0data endscode segmentstart:mov ax,stackmov ss,axmov sp,128mov ax,datamov ds,axmov ax,0mov es,axpush es:[9*4]pop ds:[0] ;将原来的int 9 中断例程的入口保存到 ds:0、ds:2中push es:[9*4+2]pop ds:[2] mov word ptr es:[9*4],offset int9 ;在中断向量表中设置新的int 9*4中断例程的入口地址mov es:[9*4+2],csmov ax,0b800hmov es,axmov al,'a's:mov es:[160*12+40*2],alcall delay ;循环10000000次,用来延时inc alcmp al,'z'jna smov ax,0mov es,axpush ds:[0]pop es:[9*4]push ds:[2]pop es:[9*4+2]mov ax,4c00hint 21h;delay:push axpush dxmov dx,1000h ;外层循环1000h次,内层循环100000h次mov ax,0s1:sub ax,1sbb dx,0cmp ax,0jne s1cmp dx,0jne s1pop dxpop axretint9:push axpush bxpush esin al,60hpushf pushfpop bxand bh,11111110b ;设置IF=0.TF=0push bxpopfcall dword ptr ds:[0] ;模拟调用原来的int 9*4中断例程cmp al,1 ;1就是ESC的键盘扫描码jne int9retmov ax,0b800hmov es,axinc byte ptr es:[160*12+40*2+1] ;每次按下ESC键加1,来改变颜色属性int9ret:pop espop bxpop axiretcode endsend start
- 汇编入门学习笔记 (十三)—— 外中断
- 汇编--学习笔记(十三)-中断及中断处理程序
- 汇编--学习笔记(十三)-中断(二)- 自我总结
- 汇编入门学习笔记 (一)—— 基础知识、寄存器
- 汇编入门学习笔记 (八)—— 转移指令
- 汇编入门学习笔记 (十一)—— 内中段
- 汇编学习笔记--内中断
- 汇编入门学习----第二天(1)--中断【原创】
- 属性—Swift学习笔记(十三)
- stm32学习笔记——入门定时器中断
- 汇编入门学习笔记(一)
- 汇编入门学习笔记(二)
- 汇编学习--7.16--外中断
- 8086汇编学习笔记9-中断
- [汇编学习笔记][第十二章内中断]
- 8086汇编学习笔记9-中断
- 汇编入门学习笔记 (二)—— 寄存器(内存访问)、栈
- 汇编入门学习笔记 (三) —— 第一个程序
- 《CS:APP》 chapter 7 Linking 笔记
- 使用Ghost还原系统为什么容易出问题?
- 在给数据库输入数据时,提示:ORA-02291:违反完整性约束条件(HUYANG.SYS_C009677)-未找到父项关键字........
- 分享猫
- linux文件系统,dup2等
- 汇编入门学习笔记 (十三)—— 外中断
- 考研复试机试题(2009)
- [ext/iconv/iconv.lo] Error 1
- MySQL性能优化的最佳20+条经验
- 南阳 OJ 204 (Coin Test)(字符串处理)
- SEAndroid安全机制中的进程安全上下文关联分析
- hadoop错误解决方案参考 慢慢更新...
- 图像代数运算:平均值去噪,减去背景
- 黑马程序员--OC之Foundation框架