将任何 st 寄存器中的浮点数除以汇编中的整数常量

Divide a float in any of the st registers by an integer constant in assembly

我需要用整数除以 st0 中的浮点数(在本例中为 2): 所以知道我可以通过简单地实现这一目标:

mov rax, 2
fild rax
fdivp st1

但是是否有更优雅、体积更小的版本,例如(我知道以下内容不起作用):

fidiv 2

:S 如果不可能也请告诉我 :) 在此先感谢

None 的 x87 指令支持立即数。您需要做的是将要除以的常量存储在某个内存位置,然后使用内存操作数隐式加载它:

    fdiv DWORD PTR two      ; st0 = st0 / 2
    ...

two REAL4 2.0

请注意,通过乘以倒数可以大大加快除以常数的速度:

    fmul DWORD PTR two     ; st0 = st0 * 0.5 = st0 / 2
    ...

two REAL4 0.5