在我的问题中,我试图创建一个循环,该循环将遍历数组,并使用WriteInt / WriteHex过程通过MASM打印数组的元素。
在下面的代码中,我的循环设置与Irvine教科书如何解决类似的问题类似:
INCLUDE Irvine32.inc
.data
Array1 BYTE 9,8,7,6
.code
main proc
mov edi, OFFSET Array1
mov ecx, LENGTHOF Array1
mov eax, 0
L1:
mov eax,[edi]
Call WriteInt
add edi, TYPE Array1
loop L1
exit
invoke ExitProcess,0
main endp
end main
我希望该程序相应地打印9、8、7、6,但由于某些原因在运行后打印
mov eax,[edi]
保存在eax中的值就是给定数组06070809,但是我的预期结果只是存储00000009,然后在解析“ add edi,TYPE Array1”时,在下次迭代中存储00000008。
[要在内存级别分解它,说数组(09)的第一个元素存储在00406000,因此,在调用mov eax时,[edi]应该将存储在00406000处的任何值放入eax寄存器,为9,但是将整个数组放入寄存器中。
有人可以解释为什么会这样吗?我很可能会对此问题进行过度思考,但我认为可能是由于对某些寄存器的工作原理缺乏了解。
谢谢!
只需将mov eax,[edi]
编辑为mov eax, dword [edi]