2015-07-08 2 views
0

Я пытаюсь решить эту задачу:Должен ли я инициализировать регистр в сборке x86?

Предположим, что вам даны значения в eax, ebx, ecx. Напишите код, который добавляет значения внутри всех этих регистров и сохраняет окончательный результат внутри edx.

Моего код:

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

ли я инициализировать регистр EDX (мы EDX, 0)?

ответ

7

Должен ли я инициализировать регистр edx (mov edx, 0)?

Путь ваш код написан вам нужно очистить edx до первого add, либо с mov edx, 0 или xor edx, edx. Но вместо того, чтобы добавлять дополнительные инструкции, вы можете просто заменить первый add с mov:

mov edx,eax ; edx = eax 
add edx,ebx ; edx += ebx 
add edx,ecx ; edx += ecx 

Или, одна инструкция меньше:

lea edx,[eax + ebx] ; edx = eax + ebx 
add edx,ecx   ; edx += ecx 
+1

OP должен обнулить 'edx', если он хочет продолжать использовать его код, тем не менее, поэтому я бы сказал «Да, или вы можете просто заменить ...». – Jester

Смежные вопросы