2012-08-11 41 views
0

对不起,这样简单的问题,(学习从几 天组装),但我是通过书籍浏览,并无法找到答案如何在fpu上反转除1/f?

什么是正确快速的方法来计算的1/f,其中f是一些 浮在x86 FPU

fld dword [ebp+8] 
    fld1 
    fdivrp   ; fdivrp st0 st1 ? 

它是正确的(即时的意思,因为我不知道fdivr args) 或是一些最简单的方法?

//编辑

这是1区/ F一个最佳的方式(或1 /开方(F)在古典FPU ASM (不SSE,没有卡马克把戏? - 我会l8er尝试,现在我 试着只是做 '正确的FPU')

+0

没有肮脏的技巧或SSE,没有什么特别的,你可以做。 – harold 2012-08-12 14:15:47

回答

4

从英特尔CPU的文档:

FDIVRP - 除以ST(0),通过ST(1),结果存储到ST(1)并弹出寄存器堆栈。

阅读文档。

+0

好吧,检查它,它似乎工作(sloow 43个周期:()但我合理新的fpu asm(更新联系精确15年后),我不知道它是否是最快的方式,(我我不会talkimg关于SSE简单地fpu)是否有可能一些不同的指令来快速计算1 /浮点数(或1/sqrt(浮点数) - 我试图在fpu组件中编写'正常化浮点向量': – 2012-08-11 08:50:18

+2

@grungefightr there are一些疯狂的技巧(http://en.wikipedia.org/wiki/Fast_inverse_square_root)但为什么不使用SSE? – harold 2012-08-11 08:59:52

+0

@harold - 我将使用SSE/AVX,当然,我喜欢它:)但现在我正在尝试理解fpu - 上面的技巧也很好,就像这样的事情一样;-)得到了一些'简单的fpu'教程例如,但canntot fins一些不错的fpu例程来源从中学习(谷歌在fpu/sse中不是非常有用) - 经常找不到我在寻找的东西,在fpu主题中) – 2012-08-11 09:06:25