分类:
2009-08-28 23:13:39
内中断
1>
概念
中断信息:cpu正在执行的同时,检测到从cpu外外部发送过来或从内部产生的一种特殊信息
中断:cpu不再接着(刚执行完的指令)向下执行,而是转去处理这个特殊信息
2>
内中断的产生
除法错误 0
单步执行 1
执行int0指令 4
执行int指令(格式 int n ;n为字节型立即数,是提供个哦cpu的中断类型码)
3>
中断来源:
中断信息中包含有中断信息的来源的编码,8086cpu用称为中断类型码的数据来标识中断信息的来源
中断类型码:一个字节型数据 简称中断源
中断类型码的作用定位中断处理程序
4>
中断处理程序
cpu收到中断信息后,对中断进行处理的程序,我们编程决定
用中断类型码到中断向量,并设置cs:ip 硬件自动完成
8086在收到中断信息后,所引发的中断过程
1(从中断信息中)取得中断类型码
2标志寄存器的值入栈 ;pushf
3设置标志寄存器中第8位和第9位=0 ;tf=0,if=0 原因:tf=1会引发1号中断
4cs内容入栈 ;push cs
5ip内容入栈 ;push ip
*6从内存地址为 中断类型码*4 和中断类型码*4+2 (ip)=(N*4) (cs)=(N*4+2)
两个字节中读取中断处理程序的入口地址设置ip和cs
7执行自己编写的中断处理程序
7>
中断处理程序
cpu随时可以检测到中断信息
中断处理程序编写方法
1保持用到的寄存器
2处理中断
3恢复用到的寄存器
4用iret指令返回
iret指令执行后,cpu回到执行中断处理程序前的执行点继续执行程序
这个过程:pushf push cs push ip (pop ip pop cs popf)iret
8>
除法错误中断处理
地址运算:01234568910111213
4个一组计算首地址4*N
第一个0123 首地址0 4个字节
第二个4567 4
第三个891011 8
中断处理程序的存放
由于经常发生,需要放在内存中,安全的内存区域
内存0000:0000--00000:03e8 大约1kb空间是系统存放中断处理程序入口地址的中断向量表
8086仅支持256个,有多余的空间,一般系统和应用程序都用不到这些空间.因此可以考虑来存中断处理程序
入口地址从0*4地址单元开始存放
段地址存放0*4+2 0000:0002 字单元
偏移地址存放 0000:0000 字单元
如:
0000:0000 68 10 a7 00
6810 高10 低68 ip=1068
a700 高00 第a7 cs=00a7
cs存放在高地址上,ip存放在低地址上
中断0
cs 00a7
ip 1068
要做的事情
编写中断程序do0 ,显示字符
将do0送入0000:0200处
将do0的入口地址存储在中断向量表0号表项中
assume cs:code
code segment
start :
do0的安装程序 ;将do0 的程序复制到0000:0200处
设置中断向量表 ;将do0的入口地址保存在0号表项中
;到此安装的程序称为中断处理程序,可以进行中断的处理
mov ax,4c00
int 21h
do0: 显示字符串
mov ax,4c00h
int 21h
do0end nop
code ends
end start
9>
安装部分
安装使用movsb将do0的代码送入0:200处
设置es:di to
设置ds:si from
设置cx传输长度 ;计算方法mov cx,offset do0end- offset do0
rep movsb
int 21h 貌似是结束!
自己写的应用程序中断要返回
iret
10>
设置中断向量
do0的入口地址是0:200,写入中断向量的0号表项中
0:0存放ip mov word ptr es:[0*4],200h
0:2存放cs mov word ptr es:[0*4+2],0
11>单步中断
cpu执行完一条指令后,检测tf=1引起单步中断
提供此功能的原因:
为单步跟踪程序的执行过程,提供了实现的机制
12>
响应中断的特殊情况
一般cpu检测到中断后去响应
特殊中断:cpu检测到中断但没有作出响应
讨论下其中一种情况
将设置ss和sp的指令连续存放,在此之间,不会引发中断过程
chinaunix网友2011-06-05 02:18:19
大连法律咨询在线 http://www.fabowang.com 大连律师在线咨询 http://www.fabowang.com 大连法律顾问网 http://www.fabowang.com 大连律师咨询 http://www.fabowang.com