我如何为这样的结构列表中的第一个元素声明一个指针:
section .bss
struc agenda
name resb 10
number resd 10
type resw 10
endstruc
Run Code Online (Sandbox Code Playgroud)
像往常一样,您应该在询问之前查阅精细的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,我把它写出来只是为了说明你会如何为其他成员做这件事。
简单地声明结构不会为其保留内存。你需要一个实例。任何一个:
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。为了提高清晰度,可能值得。
| 归档时间: |
|
| 查看次数: |
4247 次 |
| 最近记录: |