是否可以在 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
更改的内容。但这对于数字文字常量并不重要;他们在任何地方总是以相同的方式评估。
在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
更改的内容。但这对于数字文字常量并不重要;他们在任何地方总是以相同的方式评估。