宏指令及子程序设计实验()

  • 格式:doc
  • 大小:61.50 KB
  • 文档页数:6

下载文档原格式

  / 16
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

宏指令及子程序设计实验

一、实验目的

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