我正在阅读一本通过Visual C ++ Express使用MASM教授装配的书。
本书提供了以下示例程序来测试masm是否正常工作
.386
.model flat, c
.stack 100 h
printf PROTO arg1:Ptr Byte, printlist:VARARG
.data
msg1fmt byte "%s%d",0Ah,0
msg1 byte "The answer is: ",0
num1 sdword ?
num2 sdword ?
.code
main proc
mov num1,5
mov eax,num1
mov num2,eax
INVOKE printf, ADDR msg1fmt, ADDR msg1, num2
ret
main endp
end
问题是,它不起作用,而是我得到错误A2206:表达式中缺少运算符
但是,我看到没有丢失的操作员。我错过了什么或者还有其他问题吗?
答案 0 :(得分:0)
您似乎使用了不一致的汇编程序表示法。标签可以通过在第1列中,也可以使用尾部冒号来确定:
.386
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte, printlist:VARARG
.data
msg1fmt byte "%s%d",0Ah,0
msg1 byte "The answer is: ",0
num1 sdword ?
num2 sdword ?
.code
main proc
mov num1,5
mov eax,num1
mov num2,eax
INVOKE printf, ADDR msg1fmt, ADDR msg1, num2
ret
main endp
end
- 或 -
.386
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte, printlist:VARARG
.data
msg1fmt: byte "%s%d",0Ah,0
msg1: byte "The answer is: ",0
num1: sdword ?
num2: sdword ?
.code
main proc
mov num1,5
mov eax,num1
mov num2,eax
INVOKE printf, ADDR msg1fmt, ADDR msg1, num2
ret
main endp
end
但混合符号会使汇编程序混淆,更重要的是人类。