assembly - 在 nasm 中寻址数组元素

标签 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    

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

最佳答案

由于您要从内存加载 32 位值,因此应使用 dd 而不是 db 声明 arraywordvar /dw 这样每个条目就有四个字节:

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

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

mov ebx, [array+1]

您的意思可能是:

mov ebx, [array+1*4]

关于assembly - 在 nasm 中寻址数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7675772/

相关文章:

string - 在 Assembly 中反转输入字符串

assembly - 如何在 MOV 和 LEA 指令后确定 AX 中的结果

gcc - 如何在 NASM 中导出符号

汇编语言: printing lowercase to uppercase

assembly - Ghidra:自动将字节设置为 Unicode/CString

assembly - 为什么 `cmpsb`似乎没有比较寄存器的值?

c++ - 如何在 mingw 上安装 nasm 以使用 pjsip 库为 Windows 应用程序构建 openh264 库

c++ - "nasm"未被识别为内部或外部命令

linux - NASM 调用标签未被调用

assembly - 汇编中的多行注释