我需要将一个整数(二进制补码)乘以一个浮点常数。这是我的代码:
.data
pi dd 3.14
int dd 0ah
.code
fld pi
???
fmul ST(1), ST
如何将int
转换为浮点数,以便与pi
相乘?
我需要将一个整数(二进制补码)乘以一个浮点常数。这是我的代码:
.data
pi dd 3.14
int dd 0ah
.code
fld pi
???
fmul ST(1), ST
如何将int
转换为浮点数,以便与pi
相乘?
fild
指令。这里提供一个参考链接:http://www.website.masmforum.com/tutorials/fptute/fpuchap5.htmfimul dword [int]
;无需使用单独的fild
。https://www.felixcloutier.com/x86/fmul:fmulp:fimul - Peter Cordes现在使用x86 FPU已经非常过时,而且比SSE/AVX等方式慢得多。
最好至少使用SSE和cvtdq2ps
doc
例如:
.data
int dd 0ah
pi dd 3.14
.code
movss xmm0, [data] ; load 32bit data into xmm0
cvtdq2ps xmm0, xmm0 ; convert 4 float values to integers, we use only lowest float/integer
mulss xmm0, [pi]
movss
(或 movd
)+cvtdq2ps
实际上与更明显的 cvtsi2ss xmm0,dword [int]
相等或更好。 这需要更多的微操作单元才能与旧值合并(因为英特尔的设计不良/短视而没有将 xmm 目标的其余部分清零),因此具有错误依赖性,除非您花费额外的微操作单元来先执行 xor-zero xmm0 操作。 - Peter Cordes