②将送屏幕显示用子程序实现。 二.分析设计思想
用户可将常用的具有特定功能的程序段编写成子程序使用。一般过程定义伪操作的格式为: 过程名 PROC Attribute …… 过程名 ENDP
Attribute是指类型属性,可以是NEAR或FAR,调用程序和过程在同一个代码段中使用NEAR,不在同一个代码段中,使用FAR。 1. 子程序段内调用与返回
(1)调用格式: CALL 过程名 (2)CPU执行CALL指令
首先将断口地址压入堆栈,为返回做准备,然后把子程序入口的有效地址→IP,从而转入子程序。 (3)返回指令: RET
在具有NEAR属性的子程序中,RET指令从栈顶弹出2个字节→IP,然后SP+2→SP。从而回到断点。 2. 软中断程序设计 (1)中断:
中断就是当系统运行或者程序运行期间在遇到某些特殊情况时,需CPU暂停执行现行程序,自动去处理随机事件,处理完毕后再返回被中断的程序,这一全过程称为中断。处理随机事件的程序,
13
就称为中断服务子程序。中断分为CPU中断(像除法错等)、软件中断(INT n指令而引发的中断)和硬件中断(由CPU以外的器件发出的中断请求信号而引发的中断)。 (2)中断向量
中断向量就是中断子程序的入口地址(由段基址CS和有效地址IP组成,占4个字节)存储在中断向量表中。微机系统中可以使用0—255共256个中断。当80x86系统工作在实模式时,内存的000H~3FFH被用作于中断向量表,向量表中包含了256个中断入口,参见表10-1,【表6】且在系统启动时由BIOS或DOS负责初始化。
(3)软中断程序设计
用户可自己开发中断服务程序,用它取代系统原有的服务程序,过程如下:
? 编写中断服务子程序,用IRET指令返回
? 确定使用的中断号n,修改中断向量表中4×n~4×n+3单元的对应中断服务程序入口
? INT n指令调用中断,此时CPU保护现场:将F、CS、IP寄存器入栈,然后从中断向量表中4×n~4×n+3单元取出n型中断向量写入IP,CS中,CPU根据CS:IP的值转向服务子程序。 ? 当执行IRET时,恢复现场:从堆栈中弹出6个字节传送给IP、CS、F寄存器,回到断点继续执行。
? 程序结束返回DOS之前,要恢复系统的中断向量设置。
14
三. 程序清单及相关注解
;数码转换及显示:实验利用47H号中断将一组字符转换成16进制数码,并在屏幕上显示出来 DDATA SEGMENT CSBAK DW ? IPBAK DW ? MKBAK DB ? SW DW ?
MES DB 'The data in buf1 are:',0AH,0DH,'$' BUF1DB 11H,22H,33H,44H,55H,66H,77H,88H,99H
DB 0AAH,0BBH,0CCH,0DDH,0EEH,0FFH,00H DDATA ENDS
15
CODE SEGMENT
ASSUME CS:CODE,DS:DDATA START:
MOV MOV MOV 中断矢量
MOV MOV MOV MOV MOV 定义中断入口
CLD STOSW MOV MOV MOV STOSW MOV MOV
DX,OFFSET MES ;显示提示信息 AX,ES:[DI] CSBAK,AX AX,SEG MYINT
;保存原有CS
ES,AX
DI,4*47H AX,ES:[DI] IPBAK,AX
;保存原有IP
AX,DDATA DS,AX AX,0
;修改47H号中断的
AX,OFFSET MYINT ;修改为用户自
AH,09H
21H;显示BUF1中的内容
16
INT