如何在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”
        ^