宏汇编
重复汇编
条件汇编
第七章 高级汇编语言技术
1. 宏汇编
宏:源程序中一段有独立功能的程序代码。
宏指令:用户自定义的指令。在编程时,将多次
使用的功能用一条宏指令来代替。
宏展开:汇编程序把宏调用展开
宏定义体 复制到宏指令位置,实参代虚参
LOCAL中的标号 ??0000~??ffff
宏定义:
macro_name MACRO [哑元表] ; 形参/虚参
[LOCAL 标号表]
……
…… ; 宏定义体
ENDM
宏调用: (必须先定义后调用)
macro_name [实元表] ; 实参
例:保存寄存器
宏展开:
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
例:两个字相乘
宏定义:
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]
例:求绝对值
宏定义:
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:
……
宏汇编操作符: ;; %
符号1 符号2
宏展开时,合并前后两个符号形成一个符号。
;; 注释
宏展开时,;;后面的注释不予展开。
% 表达式
汇编程序将%后面的表达式转换为数字,并在展开期间用这个数取代哑元。
例:定义宏指令STRG,实现存储字符串的功能
宏定义: STRG MACRO STRING
DB ‘STRING’
ENDM
宏调用: STRG 25-1
STRG % 25 -1
宏展开: 1 DB ‘25-1’
1 DB ‘24’
列表伪操作:
.LALL :在LST清单中列出宏展开后的全部
语句(包括注释)。
.SALL :在LST清单中不列出任何宏展开后的
语句。
.XALL :缺省的列表方式,只列出宏体中产生
目标代码的语句。
starter macro csname, dsname
assume cs:csname, ds:dsname, es:dsname
push ds
sub ax, ax
push ax
mov ax, dsname
mov
原创力文档

文档评论(0)