在nasm中寻址数组元素

bvk*_*256 4 assembly 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    
Run Code Online (Sandbox Code Playgroud)

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

NPE*_*NPE 5

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

array   dd 89, 10, 67, 1, 4, 27, 12, 34, 86, 3
wordvar dd 123     
Run Code Online (Sandbox Code Playgroud)

此外,以下索引是错误的:

mov ebx, [array+1]
Run Code Online (Sandbox Code Playgroud)

你可能意味着:

mov ebx, [array+1*4]
Run Code Online (Sandbox Code Playgroud)