在汇编中操作数组

时间:2012-11-24 13:30:39

标签: arrays assembly x86 nasm reverse

我有一个问题,我无法弄清楚:

在汇编语言中,编写一个函数,该函数接收一个指向整数数组的指针和该数组的大小,并通过反转其元素来更改数组,而无需将数组复制到堆栈。使用专用指令和寄存器来处理数组(esiedi; lodsbstosbcldstd)。

示例:1 2 3 4 5 - > 5 4 3 2 1

有人有任何建议吗?

1 个答案:

答案 0 :(得分:2)

使用lodsbstosb反转数组需要cldstd每个元素(因为其中一个指针需要递增而另一个需要递减),或者,您可以忘记cldstd,只需通过在每个元素之后减去2(或加2)来取消另一个指针的错误增量(或减量)。

无论如何,在这种情况下使用lodsbstosb会让事情变得不必要地复杂化。我会用这样的东西:

    mov esi,start_address
    mov edi,end_address

    mov ecx,edi
    sub ecx,esi

x1: test ecx,ecx
    jz @ready

    mov al,[esi]
    xchg al,[edi]
    mov [esi],al
    inc esi
    dec edi
    dec ecx
    jmp x1

@ready: