【发布时间】:2012-01-05 01:43:41
【问题描述】:
嘿,我正在努力学习如何在我的 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:我在 Windows XP 上使用 MinGW GCC
【问题讨论】:
-
Windows 上的调用约定是在寄存器 ST0 还是在 FP0 中返回浮点数?
-
你的编译器标志是什么?
-
我认为会不必要地刷新到堆栈,以避免您也需要实现返回。刷新到堆栈还会将您的精度降低到 64 位双精度而不是 80 位 x87。 (如果您这样做是为了速度,则需要更多;如果是为了学习,卡尔的回答为我解决了这个问题)。
-
我没有使用任何编译器标志。我应该使用的东西??
标签: c gcc assembly mingw inline-assembly