宏指令及子程序设计实验()
- 格式:doc
- 大小:61.50 KB
- 文档页数:6
宏指令及子程序设计实验
一、实验目的
1、熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法。
2、掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法。
3、了解宏指令与子程序的异同以及各自的适用场合。
二、实验内容
1、
从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并将找出的最大数在屏幕上显示出来。
要求:
①在屏幕上显示字符串提示信息的功能由宏指令DSTRING实现;
②将键盘输入的十进制数转换成二进制数由子程序DTOB实现;
③在N个无符号字节型二进制数中找出最大数的功能由子程序FMAX实现;
④将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的功能由子程序BTOAD实现。
程序运行结果如右图所示。
COUNT EQU 10
DA TA SEGMENT
N UM DB 10 DUP(?)
IBUF DB 7,0,6 DUP(?)
OBUF DB 6 DUP(?)
I NFOR1 DB "Please Input 10 numbers:",0AH,0DH,'$'
I NFOR2 DB "The max found in the 10 number is $"
I NFOR3 DB 0AH,0DH,'$'
DA TA ENDS
STACK SEGMENT stack
D A TA2 DW 40 DUP(?)
T OP EQU LENGTH DATA2 STACK ENDS
CODE SEGMENT
A SSUME CS:CODE,DS:DA TA,SS:STACK START: MOV AX,DA TA
M OV DS,AX
M OV AX,STACK
M OV SS,AX
M OV AX,TOP
M OV SP,AX
DSTRING MACRO STRING
P USH DX
P USH AX
M OV DX,OFFSET STRING
M OV AH,09H
I NT 21H
P OP AX
P OP DX
E NDM
D STRING INFOR1
M OV BX,OFFSET NUM
M OV CX,COUNT
LOOP1: CALL DTOB
D STRING INFOR3
M OV [BX],AL
I NC BX
L OOP LOOP1
M OV AX,OFFSET NUM
P USH AX
M OV CX,COUNT
P USH CX
C ALL FMAX
D STRING INFOR2
C ALL BTOAD
M OV AH,4CH
I NT 21H
DTOB PROC NEAR
P USH CX
M OV DX,OFFSET IBUF
M OV AH,0AH
I NT 21H
M OV CL,IBUF+1
M OV CH,0
M OV SI,OFFSET IBUF+2
M OV AX,0
AGAIN: MOV DX,10
M UL DX
A ND BYTE PTR [SI],0FH A DD AL,[SI]
A DC AH,00H
I NC SI
L OOP AGAIN
P OP CX
R ET
DTOB ENDP
FMAX PROC NEAR
M OV AL,NUM
M OV SI,OFFSET NUM
M OV CX,9
LOOP2: INC SI
C MP AL,[SI]
J AE LOOP3
X CHG AL,[SI]
LOOP3: DEC CX
J NZ LOOP2
X OR AH,AH
M OV OBUF,AL
R ET
FMAX ENDP
BTOAD PROC NEAR
M OV BX, OFFSET OBUF+5 M OV BYTE PTR [BX],'$'
M OV CX,10
LOOP4: MOV DX,0
D IV CX
A DD DL,30H
D EC BX
M OV [BX],DL
O R AX,AX
J NZ LOOP4
M OV DX,BX
M OV AH,09H
I NT 21H
R ET
BTOAD ENDP
CODE ENDS
E ND START
2、实验习题:
计算1+2+3+……+N.要求N由键盘输入;给出必要的提示信息(由宏调用实现);累加功能由子程序调用实现;二进制数(累加和)转换为十进制数并显示子程序调用实现.
(1) 实验源代码:
STACK SEGMENT stack
DB 100 DUP(?)
STACK ENDS
DA TA S EGMENT
INF1 DB "Please input a number N(0-65535): $"
IBUF DB 7,0,6 DUP(?)
OBUF DB 6 DUP(?)
INF2 DB 0AH,0DH,"$"
DA TA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DA TA
MOV DS,AX
DSTRING MACRO STRING
PUSH DX
PUSH AX
MOV DX,OFFSET STRING
MOV AH,09H
INT 21H
POP AX
POP DX
ENDM
DSTRING INF1
CALL DTOB
CALL ADDN
CALL BTOAD
MOV AH,4CH
INT 21H
DTOB PROC NEAR
PUSH CX