gcc - 如何在GCC内联汇编中的Intel x86_64寄存器r8至r15上指定寄存器约束?

标签 gcc assembly x86-64 inline-assembly

这是寄存器加载代码的列表:


恶作剧
贝贝克斯
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这样的特定寄存器名称现在指的是%raxd%rdx等。

但是,对于%r8 .. %r15没有特殊的约束或名称。关于内联汇编和约束使用here,有一个很棒的(特定于x86-64)教程。

关于gcc - 如何在GCC内联汇编中的Intel x86_64寄存器r8至r15上指定寄存器约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17159551/

相关文章:

c - Clang 中 __int128_t 的错误?

gcc - 在 64 位 (x86-64) 机器上构建 32 位 (x86) gcc-10.2.0 时出错

optimization - 为什么 GCC 需要出于神秘原因清除 edx?

assembly - 从 NASM 到 GAS 的翻译

assembly - `000000q`是什么意思?

windows - Windows 上的 CMake -G Ninja 指定 x64

c++ - 成功启用NaN移除方法上的-fno-finite-math-only

c++ - 哈希符号 + 数字 "# 1"形式的 gcc 预处理输出行是什么意思?

assembly 标签前缀

linux - 如何仅使用 ptrace (linux, x86/x86_64) 获取 "backtrace"(如 gdb)