【发布时间】:2012-06-22 23:25:27
【问题描述】:
我一直在尝试使用 GCC 内联汇编将 double 加载到带有 FLD 的 FPU。
由于不太熟悉 AT&T 语法,也没有在网络上找到任何内容,因此非常感谢您的帮助。
我的意图是将a的地址加载到EAX,然后执行FLD [EAX]...
double atl(double a, int adr) {
__asm ("movl ptr %0,%%eax"::"r"(a));
__asm ("fld qword (%eax)");
//.... some other code here
__asm("movl ptr %0,%%eax"::"r"(a));
__asm("fst qword (%eax)");
return a;
}
【问题讨论】:
-
请注意,如果您不使用
asm volatile,则允许编译器在不考虑任何语义的情况下重新排序装配线。 -
谢谢,我没想到。现在 asm 代码似乎并不能正常工作,您有什么建议吗? gcc 表示第一行和最后一行的操作数无效。
-
您也不应该假设寄存器内容从一个
asm保留到另一个。如果您有一系列必须一起运行的指令,请创建一个asm,并将它们全部包含在内。
标签: gcc assembly double gnu-assembler fpu