汇编如果要切换值,应如何增加数组?

匿名

这是在Visual Studios 2015上与Kip Irvine一起编译的。

该代码假定将第一个元素与第二个元素交换,将第三个元素与第四个元素交换,依此类推。它向前切换值,而不仅仅是切换两个值。我添加了索引寄存器2来跳过第二个元素,因为它不应该被切换。有什么我想念的吗?我应该以不同的方式增加数组索引还是在错误的寄存器中放置错误的值?提前致谢!请不要只给我答案。

输出是

偏移量转储00AD6880


00020000 00050000 00090000 0000000A 0000000C

INCLUDE Irvine32.inc
.data
dwarray dword  0,2,5,9,10,12


.code
main proc
mov ebx, OFFSET dwarray
mov ecx, LENGTHOF dwarray
L1: cmp ebx, ecx
mov eax, [ebx]
mov edx, [ebx+1]
mov [ebx+1], eax 
mov [ebx], edx
add ebx, 2
loop L1

; The four instructions below are fixed, the only variable is the name of the array  
mov    esi,OFFSET dwarray
mov    ecx,LENGTHOF dwarray
mov    ebx,TYPE dwarray
call   DumpMem
call WaitMsg
exit
main ENDP
END main
何塞·曼努埃尔·阿巴卡·罗德里格斯(Jose Manuel Abarca Rodriguez)

您的数组元素为dword,双字,表示4个字节。因此,为了指向元素,您需要将指针增加4:

dwarray dword  0,2,5,9,10,12
.code
main proc
mov ebx, OFFSET dwarray
mov ecx, 3                    ◄■■■ THE ARRAY CONTAINS 6 ELEMENTS, BUT THEY ARE PROCESSED
                                   IN PAIRS, SO THE LOOP SHOULD REPEAT HALF 6 (3).
L1: ;cmp ebx, ecx             ◄■■■ UNNECESSARY?
mov eax, [ebx]
mov edx, [ebx+4]              ◄■■■ THE NEXT ELEMENT IS 4 BYTES AWAY.
mov [ebx+4], eax              ◄■■■ AGAIN, THE NEXT ELEMENT IS 4 BYTES.
mov [ebx], edx
add ebx, 8                    ◄■■■ INCREASE BY 8 (THE SIZE OF 2 ELEMENTS PROCESSED).
loop L1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章