想知道如何在32位I86架构上内联使用fbstp。我试过像
这样的东西int main( )
{
double foo = 100.0;
long bar = 0;
asm( "pushl %1; fbstp %0"
: "=m"(bar)
: "r"(foo)
);
...
但是酒吧没有变化。我已经尝试过阅读我能找到的所有内容,但大多数例子只是做一些事情,比如将两个整数加在一起。我找不到任何关于将操作数推入堆栈的讨论以及当fbstp等指令将80位数据写回内存(即使用什么C类型)以及如何在asm语法中指定它时我应该做什么
同样在x86-64上似乎有pushq而没有pushl但是fbstp仍然存在而fbstq没有。 64位还有其他一些魔力。
答案 0 :(得分:2)
这里有一个例子:http://bap.ece.cmu.edu/download/bap-0.1/VEX/test/test-i386.c
似乎建议做这样的事情:
unsigned short bcd[5];
double a;
asm("fbstp %0" : "=m" (bcd[0]) : "t" (a) : "st");