嘿,我想学习如何在我的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
最佳答案
您需要显式指定所需的fld
和fst
指令变体否则,编译器不知道操作数的大小这段代码在这里对我有效:
__asm__ ("fldl %1 ;"
"fsqrt ;"
"fstl %0 ;"
: "=g" (o)
: "g" (x)
);
您可以使用反汇编程序再次检查64位FLD和FST(
DD/0
和DD/2
)的正确操作码是否已发出。关于c - C内联汇编-'fst'的操作数类型不匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8736601/