文档介绍:宏汇编
重复汇编
条件汇编
第七章高级汇编语言技术
1
1. 宏汇编
宏:源程序中一段有独立功能的程序代码。
宏指令:用户自定义的指令。在编程时,将多次
使用的功能用一条宏指令来代替。
汇编语言程序
指令
伪指令(伪操作)
宏指令
2
优:模块化
省内存
缺:开销大
宏定义:
Q macro x,y
…
endm
主程序:
…
Q a, b
…
Q c, d
…
Q e, f
…
目标程序:
…
…
…
…
…
…
优:
参数传送简单,执行效率高
缺:
占用内存空间大
主程序:
…
CALL ----
…
CALL ----
…
CALL ----
…
子程序:
…
…
…
RET
3
宏展开:汇编程序把宏调用展开
宏定义体复制到宏指令位置,实参代虚参
LOCAL中的标号??0000~??ffff
宏定义:
macro_name MACRO [哑元表] ; 形参/虚参
[LOCAL 标号表]
……
……; 宏定义体
ENDM
宏调用: (必须先定义后调用)
macro_name [实元表] ; 实参
4
例:保存寄存器
宏展开:
1 push ax
1 push bx
1 push cx
1 push dx
1 push si
1 push di
宏定义:
savereg MACRO
push ax
push bx
push cx
push dx
push si
push di
ENDM
宏调用: 
savereg
5
例:两个字相乘
宏定义:
multiply MACRO opr1,opr2,result
push dx
push ax
mov ax,opr1
imul opr2
mov result,ax
pop ax
pop dx
ENDM
宏调用:
 multiply cx,var,xyz[bx]
宏展开:
1 push dx
1 push ax
1 mov ax,cx
1 imul var
1 mov xyz[bx],ax
1 pop ax
1 pop dx
6
例:求绝对值
宏定义:
absol MACRO oper
LOCAL next
cmp oper,0
jge next
neg oper
next:
ENDM
宏调用:
……
absol var
……
absol bx
……
宏展开:
……
1 cmp var,0
1 jge ??0000
1 neg var
1 ??0000:
……
……
1 cmp bx,0
1 jge ??0001
1 neg bx
1 ??0001:
……
7
宏汇编操作符: & ;; %
符号1 & 符号2
宏展开时,合并前后两个符号形成一个符号。
;; 注释
宏展开时,;;后面的注释不予展开。
% 表达式
汇编程序将%后面的表达式转换为数字,并在展开期间用这个数取代哑元。
8
leap macro cond,lab
j&cond lab
endm
宏定义:
宏调用:
leap z, there
……
leap nz, here
宏展开:
1 jz there
……
1 jnz here
9
宏定义:
msg macro lab,num,xyz
lab&num db ‘HELLO MR.&xyz’
endm
宏调用:
msg ary,1,wang
……
msg ary,2,zhang
宏展开:
1 ary1 db ‘HELLO ’
……
1 ary2 db ‘HELLO ’
10