示例汇编程序中出现错误 A2206

发布于 2024-12-16 17:44:50 字数 495 浏览 0 评论 0原文

我正在读一本教授通过 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:表达式中缺少运算符

但是,我没有看到缺少运算符。我错过了什么还是还有其他问题?

I am reading a book which teaches assembly using MASM via Visual C++ Express.

The book gives the following example program to test that masm is working

.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

The problem is, it doesn't work, instead I get error A2206:missing operator in expression

However, I see no missing operator. Am I missing something or is there another problem?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

她说她爱他 2024-12-23 17:44:50

您似乎使用了不一致的汇编符号。标签是通过位于第 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

但混合符号会使汇编程序感到困惑,更重要的是,使人类感到困惑。

It appears you are using inconsistent assembler notation. Labels are determined either by being in column 1, or using a trailing colon:

.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

-- or --

.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

But mixing the notations confuses the assembler, and more importantly, humans.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文