Arrays 在汇编中操纵数组

Arrays 在汇编中操纵数组,arrays,assembly,x86,nasm,reverse,Arrays,Assembly,X86,Nasm,Reverse,我有个问题,我想不出来: 在汇编语言中,编写一个函数,该函数接收指向整数数组的指针和该数组的大小,并通过反转数组的元素来更改数组,而不将数组复制到堆栈中。使用专用指令和寄存器处理阵列(esi,edi;lodsb,stosb,cld,std) 示例:12345->54321 有人有什么建议吗?使用lodsb和stosb反转数组需要cld和std对每个元素执行操作(因为其中一个指针需要递增,另一个指针需要递减),或者,您可以忘记cld和std,只需在每个元素后减去2(或加2)即可取消另一个指针的不正

我有个问题,我想不出来:

在汇编语言中,编写一个函数,该函数接收指向整数数组的指针和该数组的大小,并通过反转数组的元素来更改数组,而不将数组复制到堆栈中。使用专用指令和寄存器处理阵列(
esi
edi
lodsb
stosb
cld
std

示例:12345->54321


有人有什么建议吗?

使用
lodsb
stosb
反转数组需要
cld
std
对每个元素执行操作(因为其中一个指针需要递增,另一个指针需要递减),或者,您可以忘记
cld
std
,只需在每个元素后减去2(或加2)即可取消另一个指针的不正确增量(或减量)


无论如何,在我看来,在这种情况下使用
lodsb
stosb
会使事情变得不必要的复杂。我会用这样的方法:

    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:

我甚至不知道从哪里开始…从学习lodsb、stosb、cld和std的说明开始。然后找出它们如何适合任务以及需要哪些其他指令。
lodsb
stosb
不太适合整数数组
lodsd
stosd
可能会起作用。卡特博士的tut可以举一个例子-@FrankKotler,因为整数
lodsb
stosb
lodsd
stosd
一样合适,这取决于所用整数的大小,OP没有提到。8位整数足够大,例如24位真彩色图像的常规8位位位平面。