1、第九章 条件汇编与宏指令,9.1 条件汇编伪操作 9.2 宏伪操作,条件汇编伪操作和宏伪操作命令也是伪指令的一部分,具有条件汇编宏伪操作功能的汇编程序称为宏汇编程序。Microsoft的MASM就是宏(MACRO)汇编程序,它提供了丰富的条件汇编伪操作和宏伪操作命令。,9.1 条件汇编伪操作,条件汇编伪操作允许用户在编制汇编语言程序时规定某种条件,汇编程序在汇编过程中测试条件是否成立,当条件成立时,则将某段汇编语言源程序汇编为目标程序,否则,不进行汇编。 Microsft宏汇编程序提供了十种条件汇编伪操作命令, IF,IF1,IF2,IFE,IFDEF,IFNDEF,IFB,IFNB,IFID
2、N, FDIF。 格式: Ifx cont : 若干语句(称为条件块) ELSE(可选的) : JB)若干语句(称为条件块) ENDIF,9.1 条件汇编伪操作,(1) IF CONT 当条件表达式CONT值不是零时,条件为真。 (2) IFE CONT 当条件表达式CONT值为零时,条件为真。 (3) IF1 如果是第一遍扫描,条件为真。 (4) IF2 如果是第二遍扫描,条件为真。 (5) IFDEF CONT 此操作中的条件CONT是一个符号,如果这个符号已经定义,或者已用EXTRN伪指令说明,则条件为真。 (6) IFNDEF CONT 该伪操作中的条件CONT是一个符号,如果此符号未
3、定义或未经EXTRN伪指令说明,则条件为真。 (7) IFB 如果尖括号中为空,则条件为真。 (8) IFNB 如果尖括号中不为空,则条件为真。 (9) IFIDN , CHR1和CHR2为字符串,如果两个字符串相同,则条件为真。(10) IFDIF, CHR1和CHR2为字符串,如果两个字符串不相同,则条件为真。,9.1 条件汇编伪操作,举例:E91.ASM,9.2 宏伪操作,9.2.1 宏定义与宏结束伪操作命令 9.2.2 参数的使用 9.2.3 宏中的标号处理 9.2.4 宏嵌套 9.2.5 宏与子程序的区别,9.2.1 宏定义与宏结束伪操作命令,宏定义的一般格式 MNAME MACRO
4、 DUMPAR1,DUMPAR2: : 宏体: ENDM 举例:E92.ASM,9.2.2 参数的使用,1. 用参数代替寄存器名字 2. 用参数代表自定义符号和数值 3. 用参数代表指令 4. 用参数代表任何一字符串或子字符串 举例: E93.ASM,9.2.3 宏中的标号处理,1. 把标号定义为参数形式 举例:E94.ASM 2. 在宏定义中声明标号为局部标号格式: LOCAL LAB1,LAB2 举例:E95.ASM,9.2.4 宏嵌套,宏嵌套有两种形式:宏定义中嵌套宏定义和宏定义中嵌套宏调用,两种宏嵌套的深度不限。 1. 宏定义中嵌套宏定义,MAC1 MACRO MAC2 MACRO M
5、AC3 MACROENDMENDMENDM,当宏定义中嵌套宏定义时,必须首先调用最外层宏定义,然后才能调用内层宏定义。下面是一个宏嵌套的例子。,例9.6 用嵌套的形式定义将AL中的数据转换为两个十六进制数的ASCII码的宏指令。,BHTOA1 MACROMOV AH,AL AHHN MACROLOACAL AHHN1MOV CL,4SHR AH,CLCMP AH,10JC AHHN1ADD AH,7 AHHN1: ADD AH,30HENDM ALLN MACROLOCAL ALLN1AND AL,0FHCMP AL,10JC ALLN1ADD AL,7 ALLN1: ADD AL,30HEN
6、DMENDM,有如下宏调用:BHTOA1AHHNALLN,则宏扩展后得到如下程序段:BHTOA1 1 MOV AH,AL AHHN 1 MOV CL,4 1 SHR AH,CL 1 CMP AH,10 1 JC ?0000 1 ADD AH,7 1 ?0000: ADD AH,30H ALLN 1 AND AL,0FH 1 CMP AL,10 1 JC ?0001 1 ADD AL,7 1 ?0001: ADD AL,30H,2. 宏定义中嵌套宏调用,MACA MACROMACBENDM MACB MACROENDM 各宏定义可单独调用。,例:利用宏定义嵌套宏调用的形式,定义将AL中的数据转换为两位十六进制数的ASCII码。,9.2.5 宏与子程序的区别,