如何在NASM的BSS部分创建变量?

问题描述 投票:0回答:2

我尝试在 NASM 的 BSS 部分创建一个变量:

section .bss
    i DD 12345

但是当尝试创建目标文件时,我收到以下警告:

warning: attempt to initialize memory in BSS section `.bss': ignored

我认为这是可以理解的,因为 BSS 部分只能包含未初始化的变量。所以我尝试了以下方法:

section .bss
    i DD 0

但我仍然收到同样的警告。

windows assembly x86 nasm
2个回答
5
投票

使用

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字节


0
投票

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"
    
© www.soinside.com 2019 - 2024. All rights reserved.