【问题标题】:addressing array elements in nasm在 nasm 中寻址数组元素
【发布时间】:2011-12-02 07:27:25
【问题描述】:

我对汇编和 NASM 非常陌生,并且有一个代码:

    SECTION .data       
array db 89, 10, 67, 1, 4, 27, 12, 34, 86, 3
wordvar dw      123     

    SECTION .text       
        global main     
main:               

    mov eax, [wordvar]
    mov ebx, [array+1]
    mov ebx,0       
    mov eax,1       
    int 0x80    

然后我通过 GDB 运行可执行文件 eax 寄存器按预期设置为值 123,但在 ebx 中有一些混乱而不是数组元素值。

【问题讨论】:

    标签: assembly nasm


    【解决方案1】:

    由于您要从内存中加载 32 位值,因此您应该使用 dd 而不是 db/dw 声明 arraywordvar,以便每个条目获得四个字节:

    array   dd 89, 10, 67, 1, 4, 27, 12, 34, 86, 3
    wordvar dd 123     
    

    另外,下面的索引是错误的:

    mov ebx, [array+1]
    

    你的意思可能是:

    mov ebx, [array+1*4]
    

    【讨论】:

    • 替代修复:movzx eax, word [wordvar]movzx ebx, byte [array+1]
    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    相关资源
    最近更新 更多