嘿,我正在尝试学习如何在我的 C 程序中编写汇编代码。我理解汇编中的整数,但 float 继续让我失望。
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:我在 Windows XP 上使用 MinGW GCC
最佳答案
您需要明确指定您想要的fld
和fst
指令变体。否则,编译器不知道您的操作数应该有多大。这段代码在这里对我有用:
__asm__ ("fldl %1 ;"
"fsqrt ;"
"fstl %0 ;"
: "=g" (o)
: "g" (x)
);
您可以使用反汇编程序仔细检查是否发出了 64 位 FLD 和 FST(DD/0
和 DD/2
)的正确操作码。
关于C 内联汇编 - 'fst' 的操作数类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8736601/