Как перевернуть массив на месте в сборке? - PullRequest
0 голосов
/ 30 сентября 2011

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

.data
array BYTE 10h, 20h, 30h, 40h

.code
main PROC
    mov esi, 0
    mov edi, 0
    mov esi, OFFSET array
    mov edi, OFFSET array + SIZEOF array
    mov ecx, SIZEOF array/2

l1: mov al, [esi]
    mov bl, [edi]
    mov [edi], al
    mov [esi], bl
    inc esi
    dec edi
    LOOP l1

    call DumpRegs
    call DumpMem

    exit

main ENDP

END main

1 Ответ

0 голосов
/ 03 мая 2016

Попробуйте объявить два массива, один из которых будет использоваться с вашими значениями, а другой может быть таким, используя оператор DUP 5 DUP (?)

И начать перемещение значений из первого массива во второй, используя цикл.

Пример:

.data myArr1 DWORD 5, 4, 3, 2, 1 myArr2 DWORD 5 DUP (?)

.code основной процесс MOV EDI, смещение myArr1 добавить Edi, размер myArr1 MOV ESI, смещение myArr2 mov ecx, длина myArr2

reverseLoop: добавить ebx, [edi] mov [edi], ebx sub edi, введите myArr2 добавить esi, наберите myArr1 мов эакс, [edi] Позвонить по телефону

LOOP reverseLoop

выход основной конец конец основной

...