为寄存器赋值并加/减

Assign values to registers and add / subtract them

我完全迷失了,关于如何完成下面代码的任何帮助

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

代码:

; AddTwoSum_64.asm - Chapter 3 example.

ExitProcess proto

.data
sum qword 0

.code
main proc
    mov rax,5
    add rax,6
    mov   sum,rax
    mov   ecx,0
    call  ExitProcess

main endp
end

谢谢

我不确定我是否会称其为 "answer,",但我无法在评论中表达我想说的内容。

让我们逐步查看您获得的代码。

mov eax,varA

所以,此时,eax 包含 5

add    eax,varB

现在我们将 3 加到 eax 中,得到 8 in eax。到目前为止一切顺利。

mov    ecx,varC

这会将 4 放入 ecx。

add    ecx,varD

这会将 ecx 加 1,使 ecx 为 5。

现在,到此为止的 none 个语句已经更改了 varA-varD 中的任何值。它们仍处于开始时的值。

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

如果我们完成 (varA + varB) 并将其存储在 eax 中,并且我们完成 (varC + varD) 并将其存储在 ecx 中,那么我们(大致)在 varA = eax - ecx .

我很确定你知道如何使用 eax 和 subtract ecx,是吗?如果您知道如何将值从内存 move 写入寄存器 (mov eax, varA),那么您可能会弄清楚如何将值从寄存器移回内存。

所以你非常接近。我还可以提出其他 2 点。

  1. 您没有对 varA 做任何事情来表明您的代码正在运行。你应该把这个打印出来还是什么? 运行 它在调试器下?或者什么?
  2. 您发布的说明将您定向到 "Assign integer values to the EAX, EBX, ECX, and EDX registers for the aforementioned variables",这与您所做的不完全相同。你已经从内存中读取了值(我可能认为这是更好的计划)而不是仅仅做:

.

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

然后从那里做加法和减法。讲师可能会挑剔不完全按照说明进行操作,因此您可能需要重新进行此操作。