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

时间:2017-07-05 13:52:45

标签: assembly x86 x87

我需要将一个浮点数除以一个整数(在这个例子中为2): 所以我知道我可以通过以下方式实现这一目标:

n

但是有更优雅和不那么笨重的版本(我知道以下不起作用):

mov rax, 2
fild rax
fdivp st1

:如果不可能,请告诉我:)提前谢谢

1 个答案:

答案 0 :(得分:4)

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