将值分配给寄存器并加/减

时间:2018-10-01 01:16:44

标签: assembly x86 masm

我对此一无所知,无法帮助我完成下面的代码

使用下面的AddTwo程序,我需要使用寄存器来计算以下表达式的程序:varA =(varA + varB)−(varC + varD), 其中varA,varB等是变量。将整数值分配给 EAX,EBX,ECX和EDX寄存器用于上述变量。 (含义, 您可以对输入进行硬编码

代码:

.batch(1)

谢谢

1 个答案:

答案 0 :(得分:0)

我不确定是否将其称为“答案”,但我无法在评论中表达我想说的话。

让我们一步一步看一下您拥有的代码。

mov eax,varA

因此,在这一点上,eax包含5

add    eax,varB

现在我们在eax上加3,在eax上加8。到目前为止一切顺利。

mov    ecx,varC

这会将4放入ecx。

add    ecx,varD

这将为ecx加1,使我们的ecx为5。

现在,到目前为止,所有语句都没有更改varA-varD中的任何值。他们仍然保持着最初的价值观。

那么,剩下要做的是什么?查看您的原始方程式,我们得到了varA = (varA + varB) − (varC + varD)。那还剩下什么?

如果我们已完成(varA + varB)并将其存储在eax中,而我们已完成(varC + varD)并将其存储在ecx中,则(大致)在varA = eax-ecx中。 / p>

我非常确定您知道如何接受eax和sub道ecx,是吗?而且,如果您知道如何mov将值从内存移到寄存器(mov eax, varA)中,那么您可能会想出如何将值从寄存器移回内存。

因此,您非常亲密。我可能还要提出另外两点。

  1. 您没有使用varA做任何事情来表明您的代码正在运行。您应该将其打印出来吗?在调试器下运行它?还是什么?
  2. 您发布的说明指导您“将整数值分配给上述变量的EAX,EBX,ECX和EDX寄存器” ,而这并不是您要做的。您已经从内存中读取了值(我可能会说这是更好的计划),而不是仅仅这样做:

mov eax, 5
mov ebx, 3
mov ecx, 4
mov edx, 1

然后从那里进行加法和减法。指导员可能会挑剔不完全遵循的说明,因此您可能需要对此进行重新设计。