我有一个问题,我无法弄清楚:
在汇编语言中,编写一个函数,该函数接收指向整数数组的指针和该数组的大小,并通过反转其元素来更改数组,而无需将数组复制到堆栈。使用专用指令和寄存器来处理数组 ( esi
, edi
; lodsb
, stosb
, cld
, std
)。
示例:1 2 3 4 5 -> 5 4 3 2 1
有人有什么建议吗?
lodsb
使用and反转数组stosb
需要cld
andstd
为每个元素(因为一个指针需要递增,另一个需要递减),或者,您可以忘记cld
并std
取消另一个指针的不正确递增(或递减)在每个元素之后减去 2(或加 2)。
无论如何,在我看来,在这种情况下使用lodsb
andstosb
会使事情变得不必要地复杂。我会使用这样的东西:
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: