3

想知道如何在 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位还有其他魔力吗?

4

1 回答 1

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");
于 2010-06-14T21:12:48.787 回答