Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226352
  • 博文数量: 45
  • 博客积分: 1850
  • 博客等级: 上尉
  • 技术积分: 473
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-11 10:21
文章分类
文章存档

2006年(17)

2005年(28)

我的朋友

分类:

2005-09-14 20:21:04

断指令和系统功能调用

一、中断指令
在程序运行时,遇到某些紧急情况(如停电),或者是一些重要错误(如溢出),当前程序应能够暂停。处理器中止当前程序运行,转去执行处理这些紧急情况的程序段。这种情况叫做“中断”,而转去执行的处理中断的子程序叫做“中断服务程序”或“中断处理程序”。当前程序被中断的地方称为“断点”。中断服务程序执行完后应返回原来程序的断点,继续执行被中断的程序。
1、8086的中断类型
8086CPU的中断系统具有256个中断,每个中断用一个唯一的中断向量号标识,向量号也称为矢量号或类型号,它用一个字节表示:0~255,对应256个中断。8086的中断可以分成外部中断和内部中断两类。
(1)外部中断
外部中断来自8086CPU之外的原因引起的程序中断。它又分成两种情况:
●可屏蔽中断——外部的中断请求可以在CPU的内部被屏蔽掉,即CPU可以控制是否引起程序中断。标志寄存器中的中断允许标志IF就是用于控制可屏蔽中断的。
  在系统复位后、任何一个中断服务程序被执行后、以及执行关中断指令CLI后,都使IF=0,这是CPU不让可屏蔽中断中止程序的情况,被称为关中断状态。执行开中断指令STI使IF=1,这是CPU允许可屏蔽中断中止程序的情况,被称为开中断状态。另外,中断服务程序结束,执行中断返回指令IRET,将恢复进入该中断前的IF状态。
  除可屏蔽中断之外的其他中断都不受IF标志控制。可屏蔽中断的向量号由外部提供。
●非屏蔽中断——外部的这个中断请求不能在CPU的内部被屏蔽,CPU必须执行它的处理程序。8086为非屏蔽中断分配了中断向量号02。IBM PC机中,利用它来处理奇偶校验出错、浮点运算出错等情况
(2)内部中断
内部中断是由于8086CPU内部执行程序引起的程序中断。它分成多种情况:
●除法错中断——在执行除法指令时,若除数为0或商超出了寄存器所能表达的范围,则产生除法错中断。8086为他分配的向量号为0。
●指令中断——执行中断调用指令INT n就产生指令中断,也称为软件中断,它的向量号就是n。
INT n指令为2字节指令(机器码为11001101 —n—,第2个字节就是中断向量号n),单向量号为3的指令中断(INT 3)是1字节指令(11001100),较特殊,常用作程序调试的断点中断。
●溢出中断——在执行溢出中断指令INTO时,若溢出标志OF为1,则产生溢出中断。它的向量号为4。
●单步中断——若单步中断TF为1,则在每条指令执行结束后都产生单步中断。它的向量号为1。
2、8086的中断过程
中断服务程序可以被认为是一种特殊的子程序,可以被存放在主存的任何位置。中断服务程序的首(起始、入口)地址,被安排在中断向量表中。
中断向量表设置在主存的最低1KB区域内,物理地址000H~3FFH。向量表从0开始,每4个字节(双字)对应一个中断,低字节存放中断服务程序的偏移地址IP,高字节存放其段地址CS。中断向量号n的中断服务程序存放在中断向量表4Xn的物理地址处。
获得中断向量号n之后,8086CPU对任何一个中断的处理过程都是一样的:
●标志寄存器入栈保存:SP←SP-2,SS:[SP]←FLAGS
●禁止新的可屏蔽中断和单步中断:IF=IF←0
●断点地址入栈保存:SP←SP-2,SS:[SP]←CS;SP←SP-2,SS:[SP]←IP
●读取中断服务程序的起始地址:IP←[nX4],CS←[NX4+2]
中断时,为保证中断服务程序正确返回原来的程序,要把被中断程序的断点处逻辑地址CS:IP压入堆栈保存,还要保存反映现场状态的标志寄存器FLAGS。然后,将中断服务程序的入口地址送CS和IP寄存器转去执行中断服务程序。
  中断服务程序执行完毕后返回原程序,应恢复堆栈中保存的断点地址CS:IP,以及标志寄存器。中断返回指令IRET实现从中断服务程序返回原程序,其过程如下:
●断点地址出栈恢复:IP←SS:[SP],SP←SP+2;CS←SS:[SP],SP←SP+2
●标志寄存器出栈恢复:FLAGS←SS:[SP],SP←SP+2
3、8086的中断指令
INT i8   ;中段调用指令:产生i8号中断
IRET     ;中段返回指令:实现中断返回
INTO     ;溢出中断指令:若溢出标志OF=1,产生4号中断;否则顺序执行
二、系统功能调用
DOS提供给用户的系统功能调用是INT 21H。提供近百个功能供用户选择使用。它主要包括设备管理、目录管理和文件管理三个方面。ROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序。
所有系统功能的调用格式(包括ROM-BIOS调用)都是一样的,一般按如下四个步骤进行:
(1)在AH寄存器中设置系统功能号
(2)在指定寄存器中设置入口参数
(3)用INT 21H(或ROM-BIOS的中断向量号)指令执行功能调用
(4)根据出口参数分析功能调用执行情况。
系统共调用在以前的例子当中已经多次出现过,不再举例说明。
中断和系统功能调用可以说是汇编发挥作用的重要方面之一,需要仔细加以研究。

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