Написание функции mov без аккумулятора

Я должен переделать этот код с помощью функции mov, чтобы писать без аккумулятора. Я не уверен, что это значит или как это сделать. Кто-нибудь может мне помочь?

array1 DWORD 21H,22H,23H,24H,25H
array2 DWORD 31H,32H,33H,34H,35H

resultLbl1 BYTE "Array 1 values are",0
resultLbl2 BYTE "Array1 value1 is",0
resultLbl3 BYTE "Array1 value2 is",0
resultLbl4 BYTE "Array1 value3 is",0
resultLbl5 BYTE "Array1 value4 is",0
resultLbl6 BYTE "Array1 value5 is",0
string1 BYTE 40 DUP (?)
count DWORD 0

.CODE
_MainProc PROC





       ;add 2 to array1 elements

       mov eax, array1
       add eax, 2
       dtoa string1, eax
       output resultLbl1, string1

       mov eax, array1+4
       add eax, 2
       dtoa string1, eax
       output resultLbl1, string1

       mov eax, array1+8
       add eax, 2
       dtoa string1, eax
       output resultLbl1, string1

       mov eax, array1+12
       add eax, 2
       dtoa string1, eax
       output resultLbl1, string1

       mov eax, array1+16
       add eax, 2
       dtoa string1, eax
       output resultLbl1, string1

2 ответа

Позвольте мне предложить вероятный сценарий событий...

Ваш учитель дал вам код для отображения элементов в массиве; и попросил вас написать код, который добавляет 2 к элементам в массиве. Вы вообще не изменили элементы в массиве и только добавили 2 к значениям, считанным из массива (непосредственно перед их отображением).

Ваш учитель видел это, и вместо того, чтобы объяснять, что вы вообще не изменяете значения в массиве; они сказали вам сделать это без использования "накопителя" (регистра), надеясь, что это заставит вас использовать инструкцию, которая действительно изменяет массив (и не предполагает использования какого-либо регистра по любой причине).

По сути, я предполагаю, что ваш учитель хочет, чтобы вы делали add array1,2, add array1+4,2 и т. д. Примечание: я использую NASM, где правильный синтаксис add dword [array1+4],2 и я не знаю синтаксис того ассемблера, который вы используете (я предоставил синтаксис "наилучшего предположения", который может быть неправильным).

Также обратите внимание, что если вы добавите 2 к каждому элементу, а затем вычтите 2 из каждого элемента; тогда каждый элемент будет содержать свое первоначальное значение.

mov A, B

эквивалентно

xor A, A
add A, B; // or: or A, B

Вы также можете сделать это

xor A, A
xor A, B

По-другому

lea A, [B + 0]
Другие вопросы по тегам