Копирование содержимого одного массива в другой в сборке - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу создать 2 массива, оба размера 5, и заполнить первый. Затем я хочу заполнить пустой массив элементами из другого, но в обратном порядке. Единственная проверка - я не могу использовать циклы для этого упражнения, поэтому для размера задано небольшое число, в данном случае - 5.

Сейчас я борюсь с довольно многими проблемами, но мой код выглядит так:

a DB 4, 72, 52, 12, 29
b DB 0, 0, 0, 0, 0 ;I don't know how to define an empty array, so I am setting everything to zero

LEA SI, a[4]
MOV b[0], [SI]

LEA SI, a[3]
MOV b[1], [SI]

LEA SI, a[2]
MOV b[2], [SI]

LEA SI, a[1]
MOV b[3], [SI]

LEA SI, a[0]
MOV b[4], [SI]

Итак, я загружаю адреса каждого пробела в обратном порядке и перемещаю эти данные в b. Это правильное решение?

Спасибо.

1 Ответ

0 голосов
/ 16 ноября 2018

В сборке 8086 нельзя использовать два операнда памяти одновременно в одной инструкции.Вы должны использовать промежуточный регистр, и вам также не нужно сначала получать адрес с помощью инструкции LEA.

Так, например, измените

LEA SI  , a[4]    ; get address of a[4]
MOV b[0], [SI]    ; invalid OpCodes -!!!-

на

MOV AL  , a[4]    ; mov a[4] to intermediate register AL
MOV b[0], AL      ; mov intermediate register AL to b[0]

... и т. Д. Для других значений.
Надеюсь, это поможет.

...