【问题标题】:Accessing struc members NASM Assembly访问结构成员 NASM 程序集
【发布时间】:2021-12-24 23:37:28
【问题描述】:

来自 Python 和 Java 等面向对象的语言,为什么这段代码不能像我希望的那样工作?

我想访问 cat struc 变量 cat_name 并将其发送到 STDOUT 以在我的终端中打印。

catstruct.asm:

SECTION .bss
    struc cat
        cat_name: resb 8
    endstruc

SECTION .data
catStruc:
    istruc  cat
        at cat_name, db "Garfield" 
    iend


SECTION .text
GLOBAL  _start

_start:
    mov     edx, 8
    mov     ecx, cat_name
    mov     ebx, 1
    mov     eax, 4
    int     0x80

    mov     ebx, 0
    mov     eax, 1
    int     0x80

代码组装时没有错误,但是当我运行它时它不会打印任何内容。怎么会?

【问题讨论】:

    标签: nasm


    【解决方案1】:

    cat_name 只包含 0,cat 名字从结构体开始的偏移量,你需要

    mov     ecx, catStruct+cat_name
    

    引用自手册

    例如,要定义一个名为 mytype 的结构,其中包含一个 longword,一个单词,一个字节和一个字节串,你可以编码

    struc   mytype 
    
      mt_long:      resd    1 
      mt_word:      resw    1 
      mt_byte:      resb    1 
      mt_str:       resb    32 
    
    endstruc
    

    上面的代码定义了六个符号:mt_long 为 0(从 mytype 结构的开头到 longword 字段),mt_word 为 4, mt_byte 为 6,mt_str 为 7,mytype_size 为 39,mytype 本身为 零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      相关资源
      最近更新 更多