Assembly 如何在MASM中使用ADD指令?
这是我的代码片段:Assembly 如何在MASM中使用ADD指令?,assembly,x86,masm,Assembly,X86,Masm,这是我的代码片段: .data Num1 equ 40h Num2 equ 41h Var1 dword 0 Var2 dword 0 ;---------------------------------------------------------------------- align 4 .code ;insert executable instructions below main PROC
.data
Num1 equ 40h
Num2 equ 41h
Var1 dword 0
Var2 dword 0
;----------------------------------------------------------------------
align 4
.code ;insert executable instructions below
main PROC ;program execution begins here
mov Var1, Num1
mov Var2, Num2
add Var1, Var2
我试图使用ADD指令,但出现以下错误:
error A2070: invalid instruction operands
此错误与添加行有关。
如果省略该行,程序运行正常。不能将两个内存位置相互添加,应使用其中一个寄存器作为第二个操作数
.data
Num1 equ 40h
Num2 equ 41h
;----------------------------------------------------------------------
align 4
.code ;insert executable instructions below
main PROC ;program execution begins here
mov ax, Num2
add ax, Num1
至少有一个操作数需要是寄存器。你应该会在
mov
s中遇到同样的错误。@Mysticialmov r/m,imm
是可编码的,对吗C7/0
?@harold我不太熟悉程序集声明语法。这就是为什么我没有回答。我以前从未见过eq
。但是,如果它把它当作一个直接变量,那就可以解释它。@它应该是神秘的,这就是本质上的eq
for@MIH1406将Var1
移动到寄存器中。然后添加Var2
。然后把它移回内存。既然它是dword,你不应该使用eax吗?是的,但是我从程序中删除了var1和var2,因为它们不是必需的,它们只是增加了内存读/写开销。equales是汇编时间常数,与正在运行的程序无关。是的,但是var1 dword 0 var2 dword 0是内存变量