想知道如何在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位还有其他的魔法吗?
我在这里不是什么专家,但pushl推的值到用户栈,而FBSTP持久性有机污染物从浮点堆栈,所以你不应该先做一个fld或者fild而不是push? – Olof 2010-06-14 21:08:33