文档详情

宏指令及子程序设计实验..doc

发布:2017-01-03约字共9页下载文档
文本预览下载声明
实验目的及实验环境 实验环境: 熟悉宏指令、宏定义、宏调用以及宏展开的概念;掌握宏指令的定义与调用的方法。 掌握子程序的定义、调用以及调用程序与子程序之间参数的传递方法。 了解宏指令与子程序的异同以及各自的适用场合。 实验环境:80x86系列微型计算机一台以及进行汇编语言程序设计所必需的编程工具(文本编辑器、ASM.EXE、LINK.EXE、DEBUG.EXE) 实验内容 从键盘输入10个无符号十进制数(小于256),将其转换为二进制数并存放在NUM字节型变量中,找出其中的最大数,并将找出的最大数在屏幕上显示出来。 要求: ① 在屏幕上显示字符串提示信息的功能由宏指令DSTRING实现; ② 将键盘输入的十进制数转换成二进制数由子程序DTOB实现; ③ 在N个无符号字节型二进制数中找出最大数的功能由子程序FMAX实现; ④ 将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的功能由子程序BTOAD实现。 程序运行结果如右图所示。 方案设计 编程指导 显示提示信息的宏指令DSTRING的编写 宏指令通常用于在程序中需要反复使用但所需指令条数又不是很多的情形;而对于需要经常使用且需要较多指令才能完成的功能通常通过子程序调用来实现。这是因为,从执行速度上看,由于子程序调用涉及到保护断点的操作,因此,子程序调用比宏调用执行时间相对要稍长一些;但从生成的可执行文件的大小方面考虑,子程序调用生成的文件要小一些。读者在进行汇编语言程序设计时,应综合考虑两者的利弊,以便进行合理选择。 下面给出实现提示信息显示的宏指令的定义: DSTRING MACRO STRING PUSH DX PUSH AX MOV DX,OFFSET STRING MOV AH,09H INT 21H POP AX POP DX ENDM 请读者注意,宏指令应该先定义,后调用。因此,宏定义通常紧跟在代码段中段寄存器赋值指令之后给出。 将键盘输入的十进制数转换为二进制数的子程序DTOB的编写 子程序的定义方法请参阅教材“5.6.4 子程序设计”一节。将十进制数转换为二进制数的程序代码请参阅本书“2.4.3 实验内容”中“编程指导”部分。 在N个无符号字节型二进制数中找出最大数的子程序FMAX的编写 请参阅教材“5.6.3 循环程序设计”一节例5.12。 将一个无符号字节型二进制数转换为十进制数并在屏幕上显示的子程序BTOAD的编写 程序代码请参阅本书“2.4.3 实验内容”中“编程指导”部分。 程序框架 COUNT EQU 10 DATA SEGMENT NUM DB 10 DUP(?) IBUF DB 7,0,6 DUP(?) OBUF DB 6 DUP(?) INFOR1 DB Please input 10 numbers:,0AH,0DH,$ INFOR2 DB The max found in the 10 numbers is $ INFOR3 DB 0AH,0DH,$ DATA ENDS STACK SEGMENT stack DATA2 DW 40 DUP(?) TOP EQU LENGTH DATA2 STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK start: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV AX,TOP MOV SP,AX DSTRING INFOR1 MOV BX,OFFSET NUM MOV CX,COUNT LOOP1: CALL DTOB DSTRING INFOR3 MOV [BX],AL INC BX LOOP LOOP1 MOV AX,OFFSET NUM PUSH AX ;通过堆栈向子程序传递参数(数据个数及数据在数据段内的偏移地
显示全部
相似文档