这是寄存器加载代码的列表:
恶作剧
贝贝克斯
ecx
迪克斯
塞西
迪迪
I常数(0到31)
q,r动态分配的寄存器(见下文)
g eax,ebx,ecx,edx或内存中的变量
一个eax和edx合并为一个64位整数(使用long long)
但这是Intel i386的寄存器限制。我的问题是在哪里可以找到Intel x86_64系统的寄存器约束,例如:
? %r10
? %r8
? %rdx
等等。
最佳答案
特定于机器的约束在gcc manual中有一个部分-丑陋的详细信息在config/i386/constraints.md中找到。
某些约束对于x86-64具有不同的含义,例如,在32位模式下,q
为%eax
,%ebx
,%ecx
,%edx
;在64位模式下,它是任何通用整数寄存器-基本上与r
约束相同。像a
这样的特定寄存器名称现在指的是%rax
,d
到%rdx
等。
但是,对于%r8
.. %r15
没有特殊的约束或名称。关于内联汇编和约束使用here,有一个很棒的(特定于x86-64)教程。
关于gcc - 如何在GCC内联汇编中的Intel x86_64寄存器r8至r15上指定寄存器约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17159551/