为寄存器赋值并加/减
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 和 sub
tract ecx,是吗?如果您知道如何将值从内存 mov
e 写入寄存器 (mov eax, varA
),那么您可能会弄清楚如何将值从寄存器移回内存。
所以你非常接近。我还可以提出其他 2 点。
- 您没有对 varA 做任何事情来表明您的代码正在运行。你应该把这个打印出来还是什么? 运行 它在调试器下?或者什么?
- 您发布的说明将您定向到 "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
然后从那里做加法和减法。讲师可能会挑剔不完全按照说明进行操作,因此您可能需要重新进行此操作。
我完全迷失了,关于如何完成下面代码的任何帮助
使用下面的 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 和 sub
tract ecx,是吗?如果您知道如何将值从内存 mov
e 写入寄存器 (mov eax, varA
),那么您可能会弄清楚如何将值从寄存器移回内存。
所以你非常接近。我还可以提出其他 2 点。
- 您没有对 varA 做任何事情来表明您的代码正在运行。你应该把这个打印出来还是什么? 运行 它在调试器下?或者什么?
- 您发布的说明将您定向到 "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
然后从那里做加法和减法。讲师可能会挑剔不完全按照说明进行操作,因此您可能需要重新进行此操作。