嘿,我想学习如何在我的C程序中编写汇编代码我理解汇编中的整数,但浮点数会继续使我感到困惑。

double asmSqrt(double x) {
    double o;
    __asm__ ("fld %1;"
             "fsqrt;"
             "fst %0;"
             : "=g" (o)
             : "g"  (x)
    );
    return o;
}

正如你所看到的,我只是试图找到x的平方根,但每当我试图编译它时,我就得到一个操作数类型不匹配错误。
我遵循了这里使用的相同语法:http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx?display=Print
PS:Im在Windows XP上使用MinGW GCC

最佳答案

您需要显式指定所需的fldfst指令变体否则,编译器不知道操作数的大小这段代码在这里对我有效:

__asm__ ("fldl %1  ;"
         "fsqrt    ;"
         "fstl %0  ;"
         : "=g" (o)
         : "g"  (x)
);

您可以使用反汇编程序再次检查64位FLD和FST(DD/0DD/2)的正确操作码是否已发出。

关于c - C内联汇编-'fst'的操作数类型不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8736601/

10-09 08:43