我对汇编和 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 声明
/array
和 wordvar
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/