宏汇编程序
宏汇编程序-MASM 汇编( Assemble )就是把用汇编语言编写的源程序翻译(汇编)成机器语言的目标程序。
简介
宏汇编程序-MASM 汇编( Assemble )就是把用汇编语言编写的源程序翻译(汇编)成机器语言的目标程序。其基本工具是汇编程序。可使用小汇编程序( ASM ), 也可以使用微软公司产品宏汇编程序(MASM )。实验推荐使用宏汇编程序,因为它不但可以代替 ASM ,而且可以汇编具有宏定义的汇编程序。
宏意思是源程序中的一段有独立功能的程序代码
使用宏指令需先定义,后调用。(这一点和子程序可是不一样啊)
宏定义是用一组伪操作来实现的,其格式如下:
宏指令名 MACRO<形式参量表>
......
ENDM
MACRO和ENDM是一对伪操作,在这对伪操作之间是宏定义体。调用时使用‘宏指令名’来调用该宏定义。‘宏指令名’由程序设计者给定,必须以字母开头。参量表也由程序设计者给定。
例如,宏定义,求两个字节型变量的乘积,结果为字型
multiply MACRO opr1, opr2, result ;其中multiply为宏定义名,opr为两个乘数,result为结果
push dx
push ax
mov ax,opr1
imul opr2
mov result, ax
pop ax
pop dx
ENDM ;宏定义到此结束
DATA SEGMENT
XX DB 4EH ;定义XX
YY DB 8AH ;定义YY
ZZ DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MULTY XX,YY,ZZ ;宏调用,用实参代替虚参
MOV AX,4C00H
INT 21H
CODE ENDS
END START
宏库的建立与调用,(一般以mac后缀)
建立宏库,很简单,编上号码,变成一个程序就是了
例如 MACRO.MAC macro1 MACRO
........
ENDM
...... macro2 MACRO
.........
ENDM
.......
(想用多少用多少)
调用,方式include加上 路径
不举例子了,很简单。
简单说一下宏调用和子程序的区别:
子程序在程序执行期间调用,只占用自身大小的一段空间。
(必须到子程序的IP,好处是节省内存,效率高,但是因为要保存返回地址,转向地址,时间长,适合长代码,频繁调用的)
宏调用,在汇编期间被展开,调用一次展开一次。
原作者注:可能有失误之处,请大家指出,另外这是学习的记录
更改者注:感觉原来的作者写的有些乱,刚学的时候都没看懂,所以后来做了部分删减和修改。