如何在AT&T语法中引用gcc内联汇编中的文字寄存器?
我试图引用寄存器文字; 我需要这个,因为我想使用像mulx
这样的指令,这些指令要求其中一个输入位于rdx
。
我试过这个:
#include int main() { uint64_t x = 15, y = 3, z, w; asm ("mov %[x], rdx\t\n" "mulx %[y], %[z], %[w]\t\n" : [z] "=&r" (z), [w] "=&r" (w) : [x] "r" (x), [y] "r" (y) : "rdx" ); return z + w; }
只适用于-masm=intel
,否则给出
$ gcc foo.c /tmp/ccGealWM.o:在函数`main'中: foo.c :(。text + 0x20):对`rdx'的未定义引用 collect2:错误:ld返回1退出状态
我试过了
#include int main() { uint64_t x = 15, y = 3, z, w; asm ("mov %[x], %rdx\t\n" "mulx %[y], %[z], %[w]\t\n" : [z] "=&r" (z), [w] "=&r" (w) : [x] "r" (x), [y] "r" (y) : "rdx" ); return z + w; }
这使
$ gcc foo.c foo.c:在函数'main'中: foo.c:5:7:错误:无效'asm':%-letter后缺少操作数 asm(“mov%[x],%rdx \ t \ n” ^