2011-11-16 20 views
1

我正在閱讀一本教程使用MASM通過Visual C++ Express彙編的書。示例彙編程序中的錯誤A2206

書中給出了下面的示例程序來測試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:表達式中缺少運算

但是,我發現沒有失蹤的運營商。我是否錯過了某些東西或者是否還有其他問題

+2

您能否至少告訴我們錯誤正在提出的哪一行?另外,請刪除與問題無關的代碼行。 (例如,我敢打賭,你可以刪除「mov eax,num1」這一行,問題就不會改變。) –

+2

你是如何調用匯編程序(你是如何編譯的),並給出錯誤的行號? –

+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 

但是混合的符號混淆了彙編,並且更重要的是,人類。