宏指令及子程序设计实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五:宏指令及子程序设计实验
院系名称:电子工程学院
学生姓名:李倩(33)
专业名称:电子信息工程
班级:电子0808
宏指令及子程序设计实验
5.5.1 实验目的
1、熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法。
2、掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法。
3、了解宏指令与子程序的异同以及各自的适用场合。
5.5.2 实验预习要求
1、复习宏指令的定义与调用方法。
2、复习过子程序的定义与调用方法。
3、根据“2.5.3 实验内容”中给出的流程图和程序框架编写源程序,以便上机调试。
4、从“2.5.4 实验习题”中任选一道题目,编写源程序,以便上机调试。
5.5.3 实验内容
从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并将找出的最大数在
屏幕上显示出来。
要求:
①在屏幕上显示字符串提示信息的
功能由宏指令DSTRING实现;
②将键盘输入的十进制数转换成二
进制数由子程序DTOB实现;
③在N个无符号字节型二进制数中
找出最大数的功能由子程序FMAX实现;
④将一个无符号字节型二进制数转
换为十进制数并在屏幕上显示的功能由子
程序BTOAD实现。
程序运行结果如右图所示。
1、编程指导
(1)显示提示信息的宏指令DSTRING的编写
宏指令通常用于在程序中需要反复使用但所需指令条数又不是很多的情形;而对于需要经常使用且需要较多指令才能完成的功能通常通过子程序调用来实现。这是因为,从执行速度上看,由于子程序调用涉及到保护断点的操作,因此,子程序调用比宏调用执行时间相对要稍长一些;但从生成的可执行文件的大小方面考虑,子程序调用生成的文件要小一些。读者在进行汇编语言程序设计时,应综合考虑两者的利弊,以便进行合理选择。
下面给出实现提示信息显示的宏指令的定义:
DSTRING MACRO STRING
PUSH DX
PUSH AX
MOV DX,OFFSET STRING
MOV AH,09H
INT 21H
POP AX
POP DX
ENDM
请读者注意,宏指令应该先定义,后调用。因此,宏定义通常紧跟在代码段中段寄存器赋值指令之
后给出。
(2)将键盘输入的十进制数转换为二进制数的子程序DTOB的编写
子程序的定义方法请参阅教材“5.6.4 子程序设计”一节。将十进制数转换为二进制数的程序代码请参阅本书“2.4.3 实验内容”中“编程指导”部分。
(3)在N个无符号字节型二进制数中找出最大数的子程序FMAX的编写
请参阅教材“5.6.3 循环程序设计”一节例5.12。
(4)将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的子程序BTOAD的编写程序代码请参阅本书“2.4.3 实验内容”中“编程指导”部分。
2、源程序:
COUNT EQU 10
DA TA SEGMENT
MA DB 0
NUM DB 10 DUP(?)
IBUF DB 7,0,6 DUP(?)
OBUF DB 6 DUP(?)
INFOR1 DB "Please input 10 numbers:(<256)",10,13,'$'
INFOR2 DB "THE MAX FOOUND IN THE 10NUMBERS IS "
INFOR3 DB 10,13,'$'
DA TA ENDS
STACK SEGMENT STACK
D A TA2 DW 40 DUP(?)
TOP EQU LENGTH DA TA2
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DA TA,SS:STACK
S TART: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX
DSTRING MACRO STI
PUSH DX
PUSH AX
LEA DX,STI
MOV AH,9
INT 21H
POP AX
POP DX
ENDM
DSTRING INFOR1
MOV BX,OFFSET NUM
MOV CX,COUNT
LOOP1: CALL STOB
DSTRING INFOR3
MOV [BX],AL
INC BX
LOOP LOOP1
MOV AX,OFFSET NUM
PUSH AX
MOV CX,COUNT
PUSH CX
CALL FMAX
DSTRING INFOR2
CALL BTOAD
MOV AH,4CH
INT 21H
STOB PROC
PUSH CX
PUSH BX
PUSH DX
MOV DX,OFFSET IBUF
MOV AH,10
INT 21H
MOV CL,IBUF[1]
XOR CH,CH
MOV DL,0
MOV BL,1
MOV SI ,OFFSET IBUF[1]
INC SI
ADD SI,CX
LOP5: MOV AL,[SI]
SUB AL,30H
MUL BL
ADD DL,AL
MOV AL,10
MUL BL
MOV BL,AL
DEC SI
LOOP LOP5
MOV AL,DL
POP DX
POP BX
POP CX
R ET
STOB ENDP
;定义在N 个无符号字节型二进制数中找出最大数的子程序FMAX FMAX PROC