宏指令及子程序设计实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档