文档介绍:第七章高级汇编语言技术
§ 宏汇编
§ 重复汇编
§ 条件汇编
宏(Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法
——统称宏结构
1
§ 宏汇编
在汇编语言中,如果在源程序中多次使用到同一个程序段,则可以将这个程序段定义成一个“指令”,叫宏指令。
2
仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变
通过形参、实参结合实现参数传递,简捷直观、灵活多变
还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢
需要利用寄存器、存储单元或堆栈等传递参数
比较
宏
子程序
共同点:简化源程序的书写;节省编程的工作量
3
宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法
通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序
比较
宏
子程序
4
§ 宏汇编
宏:具有宏名的一段汇编语句序列
——宏定义时书写
宏指令:这段汇编语句序列的缩写
——宏调用时书写
宏展开:宏指令处用这段宏代替的过程
——宏汇编时实现
宏的参数功能强大,颇具特色
配合宏,还有宏操作符和有关伪指令
5
一、宏定义
mainbegin MACRO ;定义名为mainbegin的宏,无参数
mov ax,***@data ;宏定义体
mov ds,ax
ENDM ;;宏定义结束
宏名 macro [形参表]
宏定义体
endm
mainend MACRO retnum ;带有形参retnum
mov al, 0
mov ah, retnum ;宏定义中使用参数
int 21h
ENDM
宏注释符
6
宏调用及其展开
start: mainbegin ;宏调用,建立DS内容
……
mainend 4ch ;宏调用,返回DOS
end start
宏名[实参表]
宏调用的实质是在汇编过程中进行宏展开
对于宏来说,先定义,后调用。
宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取代
7
宏展开
start: mainbegin ;宏指令
1 mov ax,***@data ;宏展开
1 mov ds,ax
mainend 4ch ;宏指令
1 mov al,0 ;宏展开
1 mov ah,4ch
1 int 21h
在汇编时,用宏定义体的代码序列替代宏指令的过程
8
宏展开
当宏汇编程序扫描到宏指令语句(即宏调用)时,宏汇编程序就把宏指令定义中宏体的程序段代码替代宏指令语句。
若是带参数的宏调用,则同时用相应的实参替代宏体中对应形参的位置,并对原有宏体代码作修改。
9
宏展开
下面是一个源程序的列表文件,它展示了宏定义、宏调用和宏展开的全部过程。
在列表文件中,左边带“+”号的指令是宏汇编程序在宏展开时自动生成的指令。
宏定义本身不生成任何目标代码,宏指令语句本身也不生成目标代码,它仅表示宏调用出现的位置。
10