在nasm中寻址数组元素



我是汇编和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中有一些混乱而不是数组元素值。

由于您正在从内存中加载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]

最新更新