首先看一下如下的代码;
可以构建成功;运行如下;
如果去掉
include S:\masm32\include\masm32.inc
include S:\masm32\include\debug.inc
includelib S:\masm32\lib\masm32.lib
includelib S:\masm32\lib\debug.lib
构建,则:
因为 PrintText 宏是包含在masm32.inc或者debug.inc中的;
.386
.model flat,stdcall
option casemap:none
include S:\masm32\include\windows.inc
include S:\masm32\include\user32.inc
include S:\masm32\include\kernel32.inc
includelib S:\masm32\lib\user32.lib
includelib S:\masm32\lib\kernel32.lib
.code
main proc
xor eax, eax
.if !eax
PrintText 'EAX = 0'
.endif
;
mov eax, 3
.if eax == 3
PrintText 'EAX = 3'
.else
PrintText 'EAX != 3'
.endif
;
mov eax, 4
.if eax == 3
PrintText 'EAX = 3'
.elseif eax > 3
PrintText 'EAX > 3'
.else
PrintText 'EAX < 3'
.endif
ret
main endp
end main
如果去掉 option casemap:none 这一句,构建,则会如下;
windows.inc文件中的某些行的语法冲突;
关于此错误,查阅相关资料;先是调整文件包含顺序;
include S:\masm32\include\windows.inc
include S:\masm32\include\user32.inc
include S:\masm32\include\kernel32.inc
includelib S:\masm32\lib\user32.lib
includelib S:\masm32\lib\kernel32.lib
include S:\masm32\include\masm32.inc
include S:\masm32\include\debug.inc
includelib S:\masm32\lib\masm32.lib
includelib S:\masm32\lib\debug.lib
或者
include S:\masm32\include\windows.inc
include S:\masm32\include\user32.inc
include S:\masm32\include\kernel32.inc
include S:\masm32\include\masm32.inc
include S:\masm32\include\debug.inc
includelib S:\masm32\lib\user32.lib
includelib S:\masm32\lib\kernel32.lib
includelib S:\masm32\lib\masm32.lib
includelib S:\masm32\lib\debug.lib
没什么区别;
另有:如果出现此错误,则,
masm for windows上使用,当然也不是工具的问题,所以只能是自己的配置问题,使用 MasmPlas1.2 版,所以进行如下配置:
配置-->系统配置-->编译/脚本-->选上:单独文件默认使用Dos模式
不过我只要加上 option casemap:none 这句;就好了;
如果不加这句的话在命令行也不能构建;
option casemap:none,只是指明大小写敏感;
此示例是演示32位汇编条件伪指令;来学习一下;
.IF、.ELSEIF、.ELSE、.ENDIF: 条件伪指令
可以使用和 C 语言类似的条判断:
a == b
a != b
a > b
a >= b
a < b
a <= b
a && b
a & b
a || b
!a
还可以直接判断几个常用的标志位:
CARRY? ;进位标志
OVERFLOW? ;溢出标志
PARITY? ;奇偶标志
SIGN? ;符号标志
ZERO? ;零标志