32位汇编语言条件伪指令和win32汇编关于windows.inc的error A2004

首先看一下如下的代码;

可以构建成功;运行如下;

如果去掉

    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?     ;零标志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值