Chinaunix首页 | 论坛 | 博客
  • 博客访问: 497313
  • 博文数量: 161
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1947
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-25 01:20
文章分类

全部博文(161)

文章存档

2011年(44)

2010年(47)

2009年(48)

2008年(22)

我的朋友

分类:

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的指令连续存放,在此之间,不会引发中断过程

 

阅读(934) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-06-05 02:18:19

大连法律咨询在线 http://www.fabowang.com 大连律师在线咨询 http://www.fabowang.com 大连法律顾问网 http://www.fabowang.com 大连律师咨询 http://www.fabowang.com