我有 masm 汇编代码:
include console.inc
.data
var1 dq 179
var2 dq 100
var3 dq 0
.code
Start:
mov var3, var2
add var3, var1
outint var3
exit
end Start
我希望它应该输出 279,但它会在构建时引发错误:
Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.
Assembling: hello.asm
hello.asm(9) : error A2070: invalid instruction operands
hello.asm(10) : error A2070: invalid instruction operands
我不明白问题是什么,我在互联网上找不到解决方案。我还在这个网站上学习:warmland.ru/cs/masm/
请告诉我,我是新来的 assemblere
我回答。
任何优秀的 x86/amd64 汇编器教科书首页都会列出的基本规则之一是:在有两个操作数的指令中,两个操作数都不能是内存位置!组合是可能的:内存寄存器、内存编号、寄存器内存、寄存器寄存器。禁止记忆-记忆组合!翻译告诉你这件事。
因此,要计算表达式
var3 = var2 + var1,您需要使用缓冲区寄存器。对于 x86(32 位汇编器):
对于 amd64 (虽然这不太可能是你的情况):
嗯,是的,您还需要将 64 位结果输出到控制台。