我尝试在 NASM 的 BSS 部分创建一个变量:
section .bss
i DD 12345
但是当尝试创建目标文件时,我收到以下警告:
warning: attempt to initialize memory in BSS section `.bss': ignored
我认为这是可以理解的,因为 BSS 部分只能包含未初始化的变量。所以我尝试了以下方法:
section .bss
i DD 0
但我仍然收到同样的警告。
使用
RESB
和朋友。请参阅 nasm 手册:
3.2.2 RESB 和朋友:声明未初始化的数据
RESB、RESW、RESD、RESQ、REST、RESO、RESY 和 RESZ 设计为 用于模块的 BSS 部分:它们声明未初始化 储存空间。每个都需要一个操作数,即 字节、字、双字或任何要保留的内容。如部分所述 2.2.7、NASM 不支持通过编写 DW 来保留未初始化空间的 MASM/TASM 语法?或类似的东西:这就是它 相反。 RESB 型伪指令的操作数是 批判性表达:参见第 3.8 节。
例如:
缓冲区:resb 64;预留64字节
nasm手册中的resb和Friends用于在cod的BSS部分保留特定数量的字节:section .bss
请注意,此部分必须以小写 (bss) 定义,以免引发错误。 所以你可以尝试:
section .bss ; Create the reservation section.
buffer: resb 128 ; Reserve 128 bites of the memory with label "buffer"