文档介绍:会计学
1
宏汇编汇编语言
一、宏汇编
内容
宏定义
宏调用
宏展开
第1页/共33页
1、宏定义
宏名 macro [形参表]
┇ ;宏指令体(宏体)
endm
(1)宏名(宏指令名) :给出该宏定义的名称(第一个符号必
须是字母) 。
(2)macro/ endm 系统提供的定义宏的伪指令。
(3)形参表 :给出宏定义中所用到的形式参数,参数可以没 有,或带有一个或是多个,当是多个参数时,每个形参之间需用逗号隔开。具体参数可以是常数、变量、指令或它们的一部分,也可以是表达式。
(4)宏指令体 :一组有独立功能的汇编程序代码。其中可以包括指令、伪指令及宏指令等。
第2页/共33页
1、宏定义(续)
fillseg macro Dsegname ;带有形参Dsegname
mov ax, Dsegname ;宏定义中使用参数
mov ds,ax
endm ;宏定义结束
举例:
思考:
此处的形参Dsegname是什么?
Dsegname是数据段的段名
第3页/共33页
2、宏调用
宏名 [实参表] ;调用时,只需使用宏指令名来调用该宏定义
例如:对上面的宏定义的调用形式为:
┆
FILLSEG DATA ; DATA为数据段的段名
┆
说明:(1)汇编时,汇编程序对每个宏调用作宏展开 ––– 用宏定义体取代源程序中的宏指令名,用实参代替宏定义中的形参。取代时,实参和形参是一一对应的。 若实参个数>形参个数,则多余实参不考虑 , 若实参个数 <形参个数,则多余形参作“空” 处理。
(2)取代后,所得到的语句应该是有效的,否则汇编程序将会指示出错。
(3)每调用一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关。
第4页/共33页
3、宏展开
宏调用的实质是在汇编过程中进行宏展开
宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取代。
1 MOV AX,DATA
1 MOV DS,AX
例如:上面的宏调用,其展开形式为:
第5页/共33页
宏汇编应用举例 例5-9
data segment
buf1 db 0dh,0ah,'what are your name?$'
buf2 db 0dh,0ah,'my name is liyang!$'
data ends
code segment
assume ds:data,cs:code
start: mov ax,data
mov ds,ax
disp macro m
lea dx,m
mov ah,9
int 21h
endm
disp buf1
disp buf2
mov ah,4ch
int 21h
code ends
end start
第6页/共33页
宏汇编应用举例 例5-17 P148
multiply macro opr1,opr2,result ; 定义宏
push dx
push ax
mov al,opr1
imul opr2
mov result,ax
pop ax
pop dx
endm
data segment
a db 3
b dw ?
data ends
stack segment stack
db 200 dup(0)
stack ends
code segment
assume ds:data,cs:code,ss:stack
start: mov ax,data
mov ds,ax
mov cl,2
mov bx,0
multiply cl,a,b[bx] ; 宏调用
mov dx,b[bx]
add dl,30h
mov ah,2
int 21h
mov ah,4ch
int 21h
code ends
end start
第7页/共33页
宏——具有宏名的一段汇编语句序列
——宏定义时书写
宏指令——这段汇编语句序列的缩写
——宏调用时书写
宏展开——宏指令