Assembly nasm支持将浮点表达式强制转换为整数吗?

Assembly nasm支持将浮点表达式强制转换为整数吗?,assembly,x86,nasm,Assembly,X86,Nasm,这是一种写下固定点的简单方法 大意如下: %define FIXEDP_LITERAL(num) (int) (num * 65536) 显然(可能)这是无效代码。此宏将在指令中用作操作数,并在define指令中使用。是否可以在nasm表达式中从浮点转换为整数,以便nasm将表达式用作整数(即sodd FIXEDP_LITERAL(3.5)应放置整数常量,而不是浮点常量)。那么您想编写一个包含小数的整数常量表达式吗?想用某种方法使dd2*0.5等同于dd1?我不太清楚,但还没有检查NASM手册

这是一种写下固定点的简单方法

大意如下:

%define FIXEDP_LITERAL(num) (int) (num * 65536)

显然(可能)这是无效代码。此宏将在指令中用作操作数,并在define指令中使用。是否可以在nasm表达式中从浮点转换为整数,以便nasm将表达式用作整数(即so
dd FIXEDP_LITERAL(3.5)
应放置整数常量,而不是浮点常量)。

那么您想编写一个包含小数的整数常量表达式吗?想用某种方法使
dd2*0.5
等同于
dd1
?我不太清楚,但还没有检查NASM手册。@PeterCordes说得对,这只是为了让编码人员更容易进行定点编码,根本没有必要。我在手册中找不到这一点,如果不支持这一点,那将是一个遗憾。通过定点右移或除法,您可能可以得到您想要的大部分内容。鉴于浮点数不能准确地表示大多数小数(只有分母为2次幂的小数),如果不支持汇编时浮点->整数转换,我也不会感到惊讶。如果您编写
int(3*(1.0/3.0))
而不是将自己限制在0.5、0.25、0.125等范围内,那么您不希望舍入错误可能会给您提供
0
而不是
1
?想用某种方法使
dd2*0.5
等同于
dd1
?我不太清楚,但还没有检查NASM手册。@PeterCordes说得对,这只是为了让编码人员更容易进行定点编码,根本没有必要。我在手册中找不到这一点,如果不支持这一点,那将是一个遗憾。通过定点右移或除法,您可能可以得到您想要的大部分内容。鉴于浮点数不能准确地表示大多数小数(只有分母为2次幂的小数),如果不支持汇编时浮点->整数转换,我也不会感到惊讶。如果您编写
int(3*(1.0/3.0))
而不是将自己限制在0.5、0.25、0.125等等,那么您不会真的希望舍入错误为
0而不是
1