寻址 nasm 中的数组元素

发布于 2024-12-08 15:22:54 字数 397 浏览 0 评论 0原文

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

I'm very new to assembly and NASM and there is a code:

    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    

Then I run the executable through GDB eax register is set to value 123 as intended, but in ebx there is some mess instead of the array elements value.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

月棠 2024-12-15 15:22:54

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

Since you're loading 32-bit values from memory, you should declare array and wordvar using dd rather than db/dw so that each entry gets four bytes:

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

Also, the indexing in the following is wrong:

mov ebx, [array+1]

You probably meant:

mov ebx, [array+1*4]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文