nasm 程序集中第一个结构成员列表的指针

Ali*_*sta 3 x86 assembly nasm

我如何为这样的结构列表中的第一个元素声明一个指针:

section .bss
struc agenda
     name   resb 10
     number resd 10
     type   resw 10
endstruc
Run Code Online (Sandbox Code Playgroud)

Jes*_*ter 5

像往常一样,您应该在询问之前查阅精细的nasm 手册。现在这样做还为时不晚,但我很快就会向您提供重要的要点。

struc它本身不分配结构,它定义类型。作为建议的做法,您应该以点 ( .) 开头命名字段。每个字段标签将等于其在结构中的偏移量,但也可以添加基地址。声明结构后,您可以使用istruc指令分配已初始化的实例。在本.bss节中,您需要使用resb汇编struc_size程序为您定义的符号。

声明类型、在 bss 部分定义零初始化实例并加载第一个成员的地址的完整示例可能如下所示:

struc agenda
     .name   resb 10
     .number resb 10
     .type   resb 10
endstruc

section .bss

myagenda: resb agenda_size

section .text
    mov eax, myagenda + agenda.name
Run Code Online (Sandbox Code Playgroud)

注意:agenda.name当然0,我把它写出来只是为了说明你会如何为其他成员做这件事。


Fra*_*ler 5

简单地声明结构不会为其保留内存。你需要一个实例。任何一个:

section .bss
    my_agenda resb agenda_size
; or perhaps...
    agenda_array resb agenda_size * MAX_COUNT
; or...
section .data
    an_agenda istruc agenda
    at name db "fred"
    at number db "42"
    at type db "regular"
    iend
section .text
    mov esi, an_agenda
    mov al, [esi + name]
Run Code Online (Sandbox Code Playgroud)

类似的东西?

呵!Jester 刚刚发布了基本相同的内容。他介绍了“。” 本地标签的符号。大概是个好主意。没有它,name是一个全局标识符,不能重用。它需要更多的输入 - agenda.name, agenda.number, agenda.type。为了提高清晰度,可能值得。