用 80x86 汇编语言编写程序时,可以使用微软推出的软件 MASM.EXE 来进行编译。
这个软件的名称,第一个字母是“M”,它代表了“宏汇编”的意思。
使用这个编译软件,就允许我们自己编写“宏指令”了。
宏指令和子程序很像。
使用子程序时,经过编译后,子程序的代码是独立存在的,可以由主程序反复的调用,整个程序比较简短。
使用宏指令时,编译后的产生目标程序很长,因为在编译的时候,软件会把宏指令的代码插入到“宏调用”的位置。
代码较长,换来的是执行速度的提高,因为省去了子程序调用、返回的操作。
现在,很多人都是利用 C 语言编程,因为 C 语言带有很多的函数库,基本就已经可以满足初级需要了。
如果利用宏指令概念和方法,我们也就可以编写自己的宏指令库,调用的时候,使用自定义的宏指令,这也就是相当于自己创作了一种新的语言。
呵呵,汇编语言,处处都涉及到计算机的内部,以至于现在没有多少人能够弄这个。
下面介绍一个关于宏的实例,其中完整的包括了:宏定义、参数引用、宏调用。
如果读者有兴趣,再看看编译后的列表文件,还会看到“宏展开”的现象。
题目:在数据段建立本班学生档案(包括姓名学号),编写根据学号查找姓名的程序。
要求:通过输入学号,输出对应的学生姓名。
做而论道编写的程序如下。
;---------------------------------
;宏定义
CHA MACRO NUMB ;宏名称以及参数
LEA DX, STRING1
MOV BL, NUMB ;取参数
MUL BL
ADD DX, AX
MOV AH, 9
INT 21H
ENDM ;宏定义结束
;---------------------------------
DATA SEGMENT ;数据段
STRING1 DB 'Zhang san $'
CHANG EQU $ - STRING1
STRING2 DB 'Li si $'
STRING3 DB 'Wang er $'
STRING4 DB 'xiao hong $'
STRING5 DB 'fang fang $'
STRING6 DB 'ming ming $'
STRING7 DB 'bing bing $'
DATA ENDS
;---------------------------------
CODE SEGMENT ;代码段
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV AH, 1
INT 21H ;INPUT: '0' ~ '6'
AND AL, 0FH ;AL = 0~6
CHA CHANG ;宏调用
MOV AH, 4CH ;结束程序
INT 21H
CODE ENDS
END START
;---------------------------------
为了简明起见,程序中没有编写针对误输入而排除错误的程序段。
题目链接:http://zhidao.baidu.com/question/510078955.html
提问者评价:谢谢!