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

Mar*_*cus 2 floating-point assembly constants 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`
Run Code Online (Sandbox Code Playgroud)

是否可以定义浮点常量?

我查过手册,但信息很少。

Pet*_*des 6

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

equ指令定义了符号。符号的值是一个地址或与地址大小相同的整数。

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

equ和 宏(包括%define)之间的差异对于诸如.len equ $ - v2(因为$稍后或在其他部分中具有更高的值)之类的表达式很重要,或者涉及稍后使用%assign. 但这对于数字常量来说并不重要;他们在任何地方总是以同样的方式进行评估。