数组中具有间接寻址的意外输出

问题描述 投票:0回答:1

在我的问题中,我试图创建一个循环,该循环将遍历数组,并使用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,但是将整个数组放入寄存器中。

有人可以解释为什么会这样吗?我很可能会对此问题进行过度思考,但我认为可能是由于对某些寄存器的工作原理缺乏了解。

谢谢!

arrays assembly x86 irvine32
1个回答
0
投票

只需将mov eax,[edi]编辑为mov eax, dword [edi]

© www.soinside.com 2019 - 2024. All rights reserved.