是否可以在 NASM 中定义浮点常量 (`equ`)?

Is it possible to define a floating point constant (`equ`) in NASM?

在NASM中,可以定义整数常量(equ),但是,对浮点值做同样的事情会导致错误:

section .data
    c1 equ 3       ; ok
    v2 dq  3.14    ; ok
    c2 equ 3.14    ; not ok: `my.asm:7: error: expression syntax error`

是否可以定义浮点常量?

我查看了 manual,但是信息很少。

不,equ 不适用于非整数。正如 fuz 所说的那样:

The equ directive defines symbols. The value of a symbol is an address or an integer of the same size as an address.

相反,您可以使用 %define c2 3.14 在您使用它的每个位置获取宏的文本替换。 (与 equ 相反,它在 equ 的位置对表达式求值一次。)

equ 和宏(包括 %define)之间的区别对于像 .len equ $ - v2 这样的表达式很重要(因为 $ 在后面或其他部分有更高的价值),或涉及您稍后使用 %assign 更改的内容。但这对于数字文字常量并不重要;他们在任何地方总是以相同的方式评估。