8086/8088和ARM核汇编语言程序设计
第11章高级汇编语言技术
11/12/2017
1
第11章高级汇编语言技术
宏汇编
条件汇编
重复汇编
第11章高级汇编语言技术
库的使用
11/12/2017
2
第11章高级汇编语言技术
什么是宏?
宏(或宏指令)是源程序中一段有独立功能的程序代码,只需定义一次,可以多次调用。
为什么使用宏汇编?
在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。使用宏指令语句可以减少程序书写错误,缩短源程序长度,使源程序编写像高级语言一样清晰、简洁。特别是使用宏库后,可以提高编程效率。
为了减少编程的工作量,通常采用两种方法:
①将程序段编写为独立的子程序
②将程序段定义成宏
宏汇编
由此引出宏定义、调用、参数传递、嵌套等问题
11/12/2017
3
第11章高级汇编语言技术
宏定义的格式
由伪指令MACRO与ENDM实现。
形式如下:
宏指令名 MACRO [形式参数表]
... ; 宏体
ENDM
宏定义
宏汇编
说明:
(1) 宏指令名由编程序者自定,但必须符合标号的命名规则。
(2) MACRO和ENDM是一对伪指令,分别表示宏定义的开始和结束。
(3) 宏体必须是指令、伪指令及宏指令构成的程序段。
(4) 形参表可根据需要作取舍。当需要设置多个形参时,各形参之间要用逗号分隔。
11/12/2017
4
第11章高级汇编语言技术
宏定义的功能
将宏体定义为一条宏指令,以便在其后的程序中通过
对宏指令的调用(宏调用)来使用对应的宏体。
宏汇编
宏定义
注意:
宏应该先定义,再调用.
11/12/2017
5
第11章高级汇编语言技术
以下宏定义所定义的宏指令AX10可以实现
寄存器AX内容乘以10的功能。
AX10 MACRO ;宏名 AX10
PUSH DX
SAL AX,1
MOV DX,AX
SAL AX,1
SAL AX,1
ADD AX,DX
POP DX
ENDM
宏汇编
宏定义
11/12/2017
6
第11章高级汇编语言技术
宏汇编
宏调用和宏扩展
宏调用的格式
宏调用的格式为: 宏指令名[实参表]
说明:
宏指令名所指定的宏指令的定义必须放在该宏调用
之前。
实参表通常与宏定义中形参表相对应。当需要使用
多个实参时,各实参之间要用逗号分隔。
实参可以是常数、寄存器、存储单元、地址表达式、指令的操作码或者是操作码的一部分。
11/12/2017
7
第11章高级汇编语言技术
宏扩展
在汇编源程序时自动用宏指令的内容(宏体)代替宏指令,叫宏扩展。
宏汇编
宏调用和宏扩展
宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用(宏指令)时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取代
这样,在程序的目标代码中,每个宏指令语句位置上都包含有相应宏体的目标代码,因此宏指令的使用不会减少程序的目标代码长度。
注意:它与子程序的差别。前者在翻译阶段,后者在执行阶段起作用。
11/12/2017
8
第11章高级汇编语言技术
宏汇编
宏调用和宏扩展
Call Q
Call Q
Call Q
Q:
RET
子程序Q
Q A,B
Q C,D
Q E,F
Q MACRO X,Y
ENDM
主程序
主程序
主程序
展开
子程序调用和宏调用的工作方式
11/12/2017
9
第11章高级汇编语言技术
两个字操作数相乘
宏定义:
MULTIPLY MACRO OPR1,OPR2,RESULT
PUSH DX
PUSH AX
MOV AX,OPR1
IMUL OPR2
MOV RESULT,AX
MOV RESULT+2,DX
POP AX
POP DX
ENDM
宏调用:
…
MULTIPLY CX,VAR,XYZ[BX]
…
MULTIPLY 240,BX,SAVE
宏汇编
宏调用和宏扩展
11/12/2017
10
第11章高级汇编语言技术
安徽理工大学计算机汇编教程-高级汇编语言技术 来自淘豆网www.taodocs.com转载请标明出处.