-320- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
msg ELSE msg ENDIF main code |
db 'Hello db 'Hello endp ends end |
,cowgirl!',0dh,0ah,07h,24h ,cowboy!',0dh,0ah,07h,24h main |
;否则使用以下的字符串 ;条件判断部分结束 |
||||||||||||||||||
程序中新增的"IF"、"ELSE"和"ENDIF"就是用于完成条件汇编的伪指令,这三条伪指令之间有两部分源程序,"IF"下面的源程序把字符串MSG定义成"Hello,cowgirl","ELSE"下面的程序段将MSG定义成"Hello,cowboy"。这样一来编译程序就会有两种选择,到底编译哪块程序就要依条件来定。 具体来说,当"IF"伪指令之后的表达式值为"1"时,则"IF"下面的程序段被编译,"ELSE"下面的程序段舍去。若"IF"之后的表达式为"0",则"ELSE"下面的程序段将被编译,而"IF"下面的程序段被舍去。 在这个程序之中我们一开始就定义了"GIRL EQU 1",很明显这个程序只能输出"Hello,cowgirl!"了,因为"Hello,cowboy!"根本没有被编译。如果需要把这个程序给男孩子,只要把源程序开始修改为"GIRL EQU 0"就可以了。 采用条件汇编技术的一个优点就是能加强程序的可移植性,比如有两台同一型号的PC电脑,结构几乎完全相同,只是一台使用VGA显示卡而另一台使用EGA卡。为这样的两台电脑编写程序就可以采用条件汇编技术,把涉及显示功能的程序段搞成下面这样: |
|||||||||||||||||||||
IF ELSE ENDIF |
VGA . . . . . . |
(用于VGA卡的程序段) (用于EGA卡的程序段) |
|||||||||||||||||||
当使用EGA显示卡的用户拿到这样的源程序之后就无需自己对程序进行修改了。 类似的情况还有一些,比如TASM编译程序支持的伪指令与MASM早期版本略有不同,为使源程序能适应不同的编译程序,采用条件汇编技术也是很有必要的。 条件汇编还有其它一些用于判断条件的伪指令,我们讨论的"IF"是最简单的一个,其它的伪指令都列在表10-1中,以供大家研究参考,限于篇幅,本节不再详细讨论。 |
|||||||||||||||||||||
表11-1 条件汇编伪指令 | |||||||||||||||||||||
伪指令 | 说明 | ||||||||||||||||||||
IF 表达式 | 求出表达式的值,如果此值不是0则编译其后的程序段 | ||||||||||||||||||||
IFE 表达式 | 与"IF"相反,如果表达式的值为0则编译其后的程序段 | ||||||||||||||||||||
IFDEF 符号 | 如果符号在源程序中有定义,则编译其后的程序段 | ||||||||||||||||||||
IFNDEF 符号 | 与"IFDEF"相反,如果符号在源程序中没定义则条件成立 | ||||||||||||||||||||
IFB 自变量 | 如果自变量为空则条件成立 | ||||||||||||||||||||
IFNB 自变量 | 与"IFB"相反,如果自变量不空则条件成立 | ||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |