nullnull 宏汇编
重复汇编
条件汇编第七章 高级汇编语言技术null1. 宏汇编 宏:源程序中一段有独立功能的程序代码。
宏指令:用户自定义的指令。在编程时,将多次
使用的功能用一条宏指令来代替。 nullnull宏展开:汇编程序把宏调用展开
宏定义体 复制到宏指令位置,实参代虚参
LOCAL中的标号 ??0000~??ffff宏定义:
macro_name MACRO [哑元
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
] ; 形参/虚参
[LOCAL 标号表]
……
…… ; 宏定义体
ENDM宏调用: (必须先定义后调用)
macro_name [实元表] ; 实参null例:保存寄存器宏展开:
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
宏调用:
saveregnull例:两个字相乘
宏定义:
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]null例:求绝对值
宏定义:
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:
……null宏汇编操作符: & ;; %
符号1 & 符号2
宏展开时,合并前后两个符号形成一个符号。
;; 注释
宏展开时,;;后面的注释不予展开。
% 表达式
汇编程序将%后面的表达式转换为数字,并在展开期间用这个数取代哑元。nullnullnull例:定义宏指令STRG,实现存储字符串的功能
宏定义: STRG MACRO STRING
DB ‘&STRING&’
ENDM
宏调用: STRG 25-1
STRG % 25 -1
宏展开: 1 DB ‘25-1’
1 DB ‘24’nullnull列表伪操作:
.LALL :在LST清单中列出宏展开后的全部
语句(包括注释)。
.SALL :在LST清单中不列出任何宏展开后的
语句。
.XALL :缺省的列表方式,只列出宏体中产生
目标代码的语句。nullstarter macro csname, dsname
assume cs:csname, ds:dsname, es:dsname
push ds
sub ax, ax
push ax
mov ax, dsname
mov ds, ax
mov es, ax
endm宏调用:
. xall
starter code, datanull建立宏库:>EDIT EXP.ASM>EDIT MACRO . MAC调用宏库:null重复伪操作 REPT
REPT 表达式
…… ;重复块
ENDM2. 重复汇编用于连续产生完全相同或基本相同的一组代码。不定重复伪操作 IRP/IRPC
IRP 哑元,<自变量表>
…… ;重复块
ENDM
IRPC 哑元,字符串
…… ;重复块
ENDMnull例:把字符‘A’到‘Z’的ASCII码填入数组TABLEnull例:产生一组指令,将字数组TAB的内容入栈保存null例:建立ARRAY数组.lall
ARRAY LABEL WORD
REPT 7
DW $+2
ENDM
DW ARRAYnullIRP REG,
PUSH REG
ENDM1 PUSH AX
1 PUSH BX
1 PUSH CX
1 PUSH DX汇编后:例:生成一组入栈指令汇编后:例:生成存储字符串的汇编语句null3. 条件汇编 根据条件把一段源程序包括在汇编语言程序内或者排除在外。IF 自变量 ; 为条件
…… ; 自变量满足条件则汇编此块
[ELSE]
…… ; 自变量不满足条件则汇编此块
ENDIF一般格式:nullIF 表达式 ;表达式≠0,则汇编
IFE 表达式 ;表达式=0,则汇编
IF1 ;在第一遍扫视期间满足条件
IF2 ;在第二遍扫视期间满足条件
IFDEF 符号 ;符号已定义,则汇编
IFNDEF 符号 ;符号未定义,则汇编
IFB <自变量> ;自变量为空,则汇编
IFNB <自变量> ;自变量不为空,则汇编
IFIDN <字符串1>,<字符串2> ;串1与串2相同
IFDIF <字符串1>,<字符串2> ;串1与串2不同nullnull例:宏定义的递归调用: POWER实现 ( X * 2N ); 宏定义
POWER MACRO X, N
SAL X, 1
CNT=CNT+1
IF CNT-N
POWER X, N
ENDIF
ENDM
; 宏调用
CNT=0
POWER AX, 3nullnullnull第七章作业Page 278 7.1 7.3
7.5 7.7
7.9 7.14
7.16 7.17