Jin*_*hen 15 assembly gcc x86-64 inline-assembly
这是寄存器加载代码列表:
a eax
b ebx
c ecx
d edx
S esi
D edi
I常数值(0到31)
q,r动态分配寄存器(见下文)
g eax,ebx,ecx,edx或内存中
的变量a eax和edx合并为64位整数(使用long longs)
但这是intel i386的注册限制.我的问题是我可以在哪里找到intel x86_64系统的寄存器限制,例如:
?%r10
?%r8
?%的RDX
等等.
Bre*_*ale 12
机器特定约束在gcc手册中有一个部分- 在config/i386/constraints.md中找到了丑陋的细节.
一些约束具有用于x86-64的不同的含义,例如,q是%eax,%ebx,%ecx,%edx在32位模式; 在64位模式下,它是任何通用整数寄存器 - 与r约束基本相同.如特定的寄存器的名字a,现在是指%rax,d对%rdx等
有,但是,没有特殊的限制或名称%r8.. %r15.有内联汇编和约束使用优(x86-64的具体)的教程在这里.
you*_*ufu 10
GCC并没有提供这样的限制对寄存器喜欢r10,r8
但是,您可能希望使用名为Local Reg Vars的功能
例如,
static inline __attribute__((always_inline))
long syscall4(long n, long a1, long a2, long a3, long a4) {
long ret;
register long r10 __asm__("r10") = a4;
__asm__ __volatile__ (
"syscall\n\t"
: "=a"(ret)
: "a"(n),
"D"(a1),
"S"(a2),
"d"(a3),
"r"(r10)
: "memory",
"rcx",
"r11"
);
return ret;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8901 次 |
| 最近记录: |