Присвойте значения регистрам, сложите и вычтите их - PullRequest
0 голосов
/ 01 октября 2018

Я полностью потерян с этим.Мне нужно, чтобы программа вычисляла следующее выражение, используя регистры: 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 Ответ

0 голосов
/ 01 октября 2018
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).

I 'я не уверен, что предполагалось с

mov  ebx,varA
sub  edx,varD

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

...