经典汇编语言教程:9.5 条件汇编伪指令

9.5 条件汇编伪指令

条件汇编伪指令是告诉汇编程序:根据某种条件确定一组程序段是否加入到目标程序中。使用条件汇编伪指令的主要目的是:同一个源程序能根据不同的汇编条件生成不同功能的目标程序,增强宏定义的使用范围。

条件汇编伪指令与高级语言(如:C/C++)的条件编译语句在书写形式上相似,在所起作用方面是完全一致的。

9.5.1 条件汇编伪指令的功能

条件汇编伪指令的一般格式如下:

IFnnnn条件表达式
语句组1
[ELSE
语句组2]
ENDIF

其中:IFnnnn是表9.2中的伪指令,“[…]”内的语句是可选的。

条件汇编伪指令是在汇编程序把源程序转换成目标程序时起作用,其一般含义是:若条件汇编伪指令后面的“条件表达式”为真,那么,语句组1将被汇编;否则,语句组2将被汇编(如果含有ELSE伪指令)。

语句组1或语句组2内还可以包有条件汇编伪指令,这时,就形成了嵌套的条件汇编伪指令。一个嵌套的ELSE伪指令总是与最近的、还没有与其它ELSE伪指令相比配的IFnnnn伪指令相比配。

每条条件汇编伪指令的具体含义如表9.3所示。

表9.3 条件汇编伪指令及其功能一览表

伪指令

含义

IF exp

若数值表达式exp的值不为0,则语句组1包含在目标文件中

IFE exp

若数值表达式exp的值为0,则语句组1包含在目标文件中

IFDEF label

若标号label有定义或被说明为EXTRN,则语句组1包含在目标文件中

IFNDEF label

若标号label没有定义,也没被说明为EXTRN,则语句组1包含在目标文件中

IFB <参数>

在宏引用时,若该形参没有相应的实参相对应,则语句组1包含在目标文件中

IFNB <参数>

在宏引用时,若该形参没有相应的实参相对应,则语句组1包含在目标文件中

IFIDN <参数1>, <参数2>

若参数1=参数2,则语句组1包含在目标文件中

IFDIF <参数1>, <参数2>

若参数1≠参数2,则语句组1包含在目标文件中

IF1

若汇编程序在第一遍扫描时,则语句组1包含在目标文件中

IF2

若汇编程序在第二遍扫描时,则语句组1包含在目标文件中

9.5.2条件汇编伪指令的举例

例9.14 编写一个可用DOS或BIOS功能调用输入字符的宏定义。

解:
方法1:使用条件汇编伪指令IF
INPUTMACRO
IFDOS;当符号DOS不为0时,则使用DOS的功能调用
MOV AH, 1H
INT 21H
ELSE;否则,将使用BIOS的功能调用
MOV AH, 10H
INT 16H
ENDIF
ENDM

在引用宏INPUT时,汇编程序会根据DOS是否为0来生成调用不同输入功能的程序段。

方法2:使用条件汇编伪指令IFDEF
INPUTMACRO
IFDEFDOS;当定义了DOS,则使用DOS的功能调用
MOV AH, 1H
INT 21H
ELSE;否则,将使用BIOS的功能调用
MOV AH, 10H
INT 16H
ENDIF
ENDM

在引用宏INPUT时,汇编程序会根据符号DOS是否已定义来生成调用不同输入功能的程序段。

例9.15 编写一个可用功能调用输入字符的宏定义。

解:
READCHMACRO char
MOVAH, 1H
INT21H;接受一个字符,并存入AL中
IFNB<char>;若参数char有实参与之对应
IFDIF <char>, <AL>;若参数char≠AL,则把所输入字符保存到实参中
MOV char, AL
ENDIF
ENDIF
ENDM

上页:上一课 下页:下一课

经典汇编语言教程·相关目录

第1章 汇编语言的由来,数据类型第2章 CPU资源和存储器
第3章 操作数的寻址方式第4章 标识符和表达式
第5章 微机CPU的指令系统第6章 程序的基本结构
第7章 子程序和库第8章 输入输出和中断
第9章 宏第10章 应用程序设计
第11章 数值运算协处理器第12章 汇编语言和C语言
汇编语言重要附录Windows API函数大全
版权所有 © 中山市飞娥软件工作室 证书:粤ICP备09170368号