Присвойте значения регистрам, сложите и вычтите их

Я полностью потерян с этим. Мне нужно запрограммировать, что вычисляет следующее выражение, используя регистры: varA = (varA + varB) - (varC + varD), где varA, varB и т. Д., Являются переменными. Присвойте целочисленные значения регистрам EAX, EBX, ECX и EDX для вышеупомянутых переменных. (Это означает, что вы можете жестко закодировать входы)

Мой код:

; AddTwo.asm - adds two 32-bit integers.
; Chapter 3 example

.386
.model flat,stdcall
.stack 4096
ExitProcess proto,dwExitCode:dword

.data

varA  dword 5
varB  dword 3
varC  dword 4
varD  dword 1

.code
main proc
mov eax,varA
add    eax,varB

 mov    ecx,varC
 add    ecx,varD

 mov  ebx,varA
 sub  edx,varD

invoke ExitProcess,0
main endp
end main

1 ответ

Решение
mov    eax,varA
add    eax,varB
mov    ecx,varC
add    ecx,varD

Все это имеет смысл, eax = varA + varB. ecx = varC + varD,

На данный момент, просто

sub eax, ecx

получить eax = (varA + varB) - (varC + varD),

Я не уверен, что было задумано с

mov  ebx,varA
sub  edx,varD

Это устанавливает ebx = varA, а затем устанавливает edx = edx - varD, EDX не был определен ранее, так что это случайное число. Или, возможно, edx был первоначально очищен до нуля, и в этом случае edx теперь равен -varD. Я бы на это не рассчитывал.

Другие вопросы по тегам