第8章汇编语言高级编程技术 8.1宏 8.2汇编高级语法 8.3模块化程序设让 8.4C和汇编的混合编程 8.5程序优化
第8章 汇编语言高级编程技术 8.1 宏 8.2 汇编高级语法 8.3 模块化程序设计 8.4 C和汇编的混合编程 8.5 程序优化
8.1宏 81.1宏指令的定义和使用 宏指令的使用有3个步骤: 宏定义 宏调用 宏扩展
8.1 宏 8.1.1 宏指令的定义和使用 宏指令的使用有3个步骤: ◼ 宏定义 ◼ 宏调用 ◼ 宏扩展
宏定义 格式: 宏指令名 MACRO[形式参数表] 宏指令体 ENDM 形式参数表给出形参,形参之间用逗号隔开
宏定义 格式: 宏指令名 MACRO [形式参数表] … ;宏指令体 ENDM ◼ 形式参数表给出形参,形参之间用逗号隔开
宏调用和宏扩展 宏调用的格式: 宏指令名[实参数表] 实参应和形参顺序一致 宏扩展: 用宏指令体的语句序列替换宏指令名 并用实参替换形参
宏调用和宏扩展 宏调用的格式 : 宏指令名 [实参数表] ◼ 实参应和形参顺序一致 宏扩展 : ◼ 用宏指令体的语句序列替换宏指令名 ◼ 并用实参替换形参
2. LOCAL伪操作 程序中多次调用宏指令,展开时其中的标 号重复,导致编译出错 解决办法:将宏定义体中的标号说明为局 部标号 格式: local标号1[,标号2,标号3,…
2.LOCAL伪操作 程序中多次调用宏指令,展开时其中的标 号重复,导致编译出错。 解决办法 :将宏定义体中的标号说明为局 部标号 格式:local 标号1[,标号2, 标号3, …]
3. PURGE伪指令 PURGE伪指令取消已定义的宏指令 格式为: PURGE宏指令名[,宏指令名,] 注意: 宏指令被取消的程序就不能再使用这个宏指令 指令取消之前的宏调用已经被展开,不受影响
3.PURGE伪指令 PURGE伪指令取消已定义的宏指令 格式为: PURGE 宏指令名 [, 宏指令名, …] 注意: ◼ 宏指令被取消的程序就不能再使用这个宏指令 ◼ 指令取消之前的宏调用已经被展开,不受影响
8.1.2宏指令中参数的使用 1.MOVE宏指令 MOV指令不允许源操作数和目标操作数同时为内存操作数, 我们如此定义 dwVarA DWORD dwVarB DWORD 50 MOVE MACRo X. Y PUSH Y POP ENDM 调用 move dwVarA, dwVarB,可将后者内容赋给前者
8.1.2 宏指令中参数的使用 1.MOVE宏指令 MOV指令不允许源操作数和目标操作数同时为内存操作数, 我们如此定义: dwVarA DWORD ? dwVarB DWORD 50 MOVE MACRO X, Y PUSH Y POP X ENDM 调用MOVE dwVarA,dwVarB,可将后者内容赋给前者
2.SUBX宏指令 SUB指令执行后,目标操作数中的被减数被“差” 替换掉。我们可以定义一个新的宏指令,它包括 3个参数:被减数( minuend)、减数 ( subtrahend)、差( difference) SUBX MACRO minuend. subtrahend. difference PUSH EAX EAX. minuend SUB EAX. subtrahend difference. EAX
2.SUBX宏指令 SUB指令执行后,目标操作数中的被减数被“差” 替换掉。我们可以定义一个新的宏指令,它包括 3个参数:被减数(minuend)、减数 (subtrahend)、差(difference)。 SUBX MACRO minuend, subtrahend, difference PUSH EAX MOV EAX, minuend SUB EAX, subtrahend MOV difference, EAX
SUBX宏指令(续) ;接上页程序 POP EAX ENDM 要计算ECX=EDX-8,就调用SUBX宏: SUBX edX. 8. ECX
SUBX宏指令(续) ;接上页程序 POP EAX ENDM 要计算ECX=EDX–8,就调用SUBX宏: SUBX EDX, 8, ECX
3.Idx宏指令 对给定的数组下标i,j,元素的地址为: 数组首地址+(i米 Rowsize+j)* Elementsize RowSize表示为数组每行的大小 Elementsize表示为每个元素的大小 横线部分可以用宏指令表示: Idx MACRO l,, RowSize IMUL EBX.I. RowSize ADD
3.Idx宏指令 对给定的数组下标i, j,元素的地址为: 数组首地址 + (i * RowSize + j) * ElementSize RowSize表示为数组每行的大小 ElementSize表示为每个元素的大小 横线部分可以用宏指令表示: Idx MACRO I, J, RowSize IMUL EBX,I, RowSize ADD EBX, J