在装配中反转数组(masm)

时间:2016-03-10 11:53:08

标签: 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

1 个答案:

答案 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