Цикл не будет выполняться в Microsoft Visual Studio ASM - PullRequest
0 голосов
/ 05 апреля 2019

Используйте инструкцию цикла с косвенной адресацией, чтобы обратить элементы массива на место.

  • Не копировать элементы в любой другой массив.
  • Использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...