《汇编语言》学习(十五)外中断
来源:互联网 发布:子域名爆破工具 编辑:程序博客网 时间:2024/05/14 14:58
《汇编语言》第十五章主要通过拦截“BIOS键盘输入中断例程”(int 9)为例,介绍X86 CPU外部中断的机制和处理过程。本文将简述“外中断”的基本原理和给出所有习题的答案。
一、什么是外中断
1,CPU的第二项功能
CPU的第一项功能是“执行指令,进行运算”,除此之外,CPU的第二项功能就是“控制外部设备”,具体来说就是,CPU对外设的IO功能(Input/Output)。
为了简化,我们仅讲解Input功能。CPU要及时处理外设的输入,需要处理好以下两个问题:
1)外设的输入随时可能发生,CPU如何得知?
2)CPU从何处得到外设的输入?
2,外中断和端口
首先,我们来回答上面的两个问题。对于第一个问题,CPU设计者设计了外中断机制,实时感知当前是否有外设的输入。外中断和内中断类似,当中断发生时,CPU在执行完当前指令后,就会转去执行相应的中断例程,然后再返回中断发生前的地方继续原理的执行流程。
外中断与内中断不同的是:1)中断源不同;2)标志位不同。外中断产生后,会检测“IF”中断标志位(可屏蔽中断),内中断的单步调试中断,则检测“TF”中断标志位。
第二个问题的答案是,CPU通过端口和外部设备进行联系,即“外中断信息缓存在相应的端口中”。
二、键盘输入的处理过程
1,键盘输入
键盘上的每一个键相当于一个开关,键盘中有一个芯片会对各个键盘的开关状态进行扫描,产生扫描码,并发送到主板上相关的接口芯片的寄存器中,该寄存器的端口地址为60h。
按下和松开键盘,都会产生扫描码,前者称为通码(对应电路的通路),后者称为断码(对应断路)。两者有一个线性关系:断码 = 通码 + 80h
2,引发9号中断
键盘的输入到达60h端口时,相关的芯片就会向CPU发出中断类型码为9的可屏蔽中断信息。CPU检测到该中断信息后,如果IF=1,则响应中断,引发中断过程,转去执行int 9中断例程。
3,执行int 9中断例程
BIOS提供了int 9中断例程,如下:
1)读取60h端口中的扫描码;
2)发送扫描码和对应的字符ANSII码到内存的BIOS键盘缓存区或修改状态字(后者对应控制码)。
3)对键盘系统进行控制。
三、习题
检测点15.1
拦截int 9中断例程
assume cs:codestack segment db 128 dup(0)stack endsdata segment dw 0,0data endscode segment start:mov ax,stack mov ss,ax mov sp,128 mov ax,data mov ds,ax mov ax,0 mov es,ax ; interrupt vector table push es:[9*4] pop ds:[0] push es:[9*4+2] pop ds:[2] ; save the orignal entry address cli mov word ptr es:[9*4],offset int9 mov es:[9*4+2],cs ; replace the entry address sti mov ax,0b800h mov es,ax mov ah,'a's:mov es:[160*12+40*2],ah call delay inc ah cmp ah,'z' jna s mov ax,0 mov es,ax cli push ds:[0] pop es:[9*4] push ds:[2] pop es:[9*4+2] ; recover IVT sti mov ax,4c00h int 21h delay:push ax push dx mov dx,1000h mov ax,0 s1:sub ax,1 sbb dx,0 cmp ax,0 jne s1 cmp dx,0 jne s1 pop dx pop ax ret int9:push ax push bx push es in al,60h pushf ;pushf ;pop bx ;and bh,11111100b ;push bx ;popf ; set IF=0,TF=0 call dword ptr ds:[0] ; call orignal int 9 routine cmp al,1 ; esc - 01 jne int9ret mov ax,0b800h mov es,ax inc byte ptr es:[160*12+40*2+1] ; change the propety value int9ret:pop es pop bx pop ax iret code endsend start
- 汇编语言学习笔记(十五)外中断
- 《汇编语言》学习(十五)外中断
- 王爽 《汇编语言》 读书笔记 十五 外中断
- [汇编语言学习笔记][第十五章 外中断]
- 汇编语言学习笔记(十二)内中断
- 《汇编语言》学习(十二)内中断
- 王爽《汇编语言》(第二版) 学习笔记 (第十五章 外中断)
- 王爽《汇编语言》(第二版) 学习笔记 (第十五章 外中断)
- 汇编语言学习笔记(随笔记) 内部中断
- 汇编语言-端口和外中断
- 汇编语言学习第十二章-内中断
- 汇编语言 王爽(第三版)实验十五
- 王爽《汇编语言》(第二版) 学习笔记 (第十二章 内中断)
- 王爽《汇编语言》(第二版) 学习笔记 (第十二章 内中断)
- cortex_m3_stm32嵌入式学习笔记(十五):待机唤醒实验(WK_UP外部中断)
- 汇编语言学习(开篇)
- 汇编语言学习(一)
- 汇编语言学习(二)
- MAC 重置MySQL root 密码
- Android菜鸟练习第六课 万能适配器
- hbase基础知识
- POJ 1061 青蛙的约会
- Eigen: C++开源矩阵计算工具——Eigen的简单用法
- 《汇编语言》学习(十五)外中断
- 进程
- android 6.0权限开发---拍照,打开相册问题
- 空心三角形
- PHP字符串所有函数
- java和mysql定义的字段类型不一致,前端取值问题
- 16进制色值
- 论文中图片加方框 matlab代码
- js中 !==和 !=的区别是什么