Используйте инструкцию цикла с косвенной адресацией, чтобы обратить элементы массива на место.
- Не копировать элементы в любой другой массив.
- Использовать SIZEOF, TYPEи операторы LENGTHOF, чтобы сделать программу максимально гибкой, если размер и тип массива должны быть изменены в будущем.
- Используйте инструкцию XCHG.
- Элементы массива: «B», «A», «D», «C», «F», «E», «H», «G».
- Элементы массива после запуска программы должны выглядеть следующим образом: A, B,C, D, E, F, G, H.
Но я получаю следующие ошибки:
ошибка A2006: неопределенный символ: arr
ошибка A2006:неопределенный символ: arr
ошибка A2006: неопределенный символ: выполнено
ошибка A2006: неопределенный символ: arr
И это мой код:
INCLUDE Irvine32.inc
.data
arr DWORD B,A,D,C,F,E,H,G ; Array of integers with 8 elements
len DWORD LENGTHOF arr ; The length of the array
.code
main PROC
mov esi,OFFSET arr
mov ecx, LENGTHOF arr/2
reverseArrayOf32bit:
lea edi,[esi+4] ;edi = address of next entry
.next:
mov eax,0
cmp ecx,eax
je .done ; yes, it's done aleady
mov eax,[esi] ;eax = value at start
xchg ebx,[edi] ;ebx = value at end
mov [esi],eax ;Store value from start at end
add esi,8 ;esi = address of next item at start
add edi,8
dec ecx
j .next
.done:
main ENDP