2010-06-14 117 views
3

想知道如何在32位I86体系结构上内联使用fbstp。我试过类似C inline汇编x86 fbstp指令

int main() 
{ 
    double foo = 100.0; 

    long bar = 0; 

    asm("pushl %1; fbstp %0" 
     : "=m"(bar) 
     : "r"(foo) 
     ); 

    ... 

但是bar没有改变。我试过阅读所有我能找到的东西,但大多数例子只是简单地将两个整数加在一起。我找不到任何关于将操作数推入堆栈的内容,以及当像fbstp这样的指令将80位数据写回内存(即使用什么C类型)以及如何在asm语法中指定它时应该做什么。

也在x86-64上似乎有一个pushq和没有pushl,但fbstp仍然存在,而fbstq不存在。对于64位还有其他的魔法吗?

+0

我在这里不是什么专家,但pushl推的值到用户栈,而FBSTP持久性有机污染物从浮点堆栈,所以你不应该先做一个fld或者fild而不是push? – Olof 2010-06-14 21:08:33

回答