在汇编中反转数组 (masm)

Reversing an Array in Assembly (masm)

我试图在程序集中反转数组,但我无法成功地这样做。该程序适用于双字,但现在不适用于单词。我使用 visual studio 调试器检查了它。最后的结果是 98,78,10,00,36 是错误的。我的密码是

.386
.model flat,stdcall
ExitProcess PROTO,dwExitCode:DWORD
.data

intarray WORD 10h,20h,36h,78h,98h

.code
main PROC


mov esi,OFFSET intarray
mov edi,OFFSET intarray
add edi,SIZEOF intarray
sub edi,TYPE intarray
mov ecx,LENGTHOF intarray/2




L1:
mov eax,[ESI]
mov ebx,[EDI]
mov [EDI],eax
mov[ESI],ebx
add esi,TYPE intarray
sub edi,TYPE intarray
loop L1

invoke ExitProcess,0
main ENDP 
END main

您正在移动 DWORDS(4 个字节)。一个字是2个字节。

您应该通过将代码更改为类似以下内容来获得正确的结果:

mov ax,[ESI]
mov bx,[EDI]
mov [EDI],ax
mov [ESI],bx

或者少用一条指令和一个寄存器:

mov ax,[ESI]
xchg ax,[EDI]
mov [ESI],ax