我正在尝试在程序集中反转数组,但我无法成功执行此操作。该程序适用于双字,但现在不能用于单词。我使用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
答案 0 :(得分:3)
您正在移动DWORDS(4个字节)。一个字是2个字节。
您应该通过将代码更改为以下内容来获得正确的结果:
mov ax,[ESI]
mov bx,[EDI]
mov [EDI],ax
mov [ESI],bx
或者只用一条指令和一个寄存器:
mov ax,[ESI]
xchg ax,[EDI]
mov [ESI],ax