如何为结构列表中的第一个元素声明一个指针,如下所示:
section .bss
struc agenda
name resb 10
number resd 10
type resw 10
endstruc
答案 0 :(得分:1)
像往常一样,在询问之前,你应该咨询罚款nasm manual。现在做这件事还为时不晚,但我会很快从那里给你重点。
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
注意:agenda.name
当然是0
,我已经写出来,只是为了说明你如何为其他成员做这件事。
答案 1 :(得分:1)
简单地声明结构不会为它保留内存。你需要一个它的实例。或者:
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]
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]
那样的东西?
嘿!杰斯特刚刚发布了同样的事情。他介绍了'。'本地标签的表示法。可能是个好主意。没有它,是一个全局标识符,无法重用。输入需要稍微多一点 -
name
,agenda.name
,agenda.number
。可能值得提高清晰度。