漂亮的变量名可以用于GCC内联汇编中的寄存器吗?

阿科克斯

我有一些内联汇编。我希望GCC在选择要分配的GP寄存器方面拥有完全的自由。我还想在程序集中的寄存器中使用漂亮的名称,以方便将来的维护人员理解。我想我以前(10年前)对ARM 5te进行过此操作,但现在在编写一些AArch64代码时抓狂了。

在一个简单的示例中,这就是我想要的:

uint32_t arg1 = 1, arg2 = 2, result;

asm volatile(
  "add  %result, %arg1, %arg2\n"
  // Outputs:
  : ???
  // Inputs:
  : ???
  // Clobbered:
  : ???
);

我认为我需要正确的伏都教徒才能去写“ ???”的地方。以上。

是否有可能?

卡尔·诺鲁姆

是的。

[arg1] "r" (arg1)

例如。这两个名称([arg1](arg1)以上)可以不同。

在汇编代码中,您将使用:

add %[result], %[arg1], %[arg2]

文档链接

这是您重新制作的整个示例(更改了装配变量的大小写,只是为了说明它们不必相同):

uint32_t arg1 = 1, arg2 = 2, result;

asm volatile(
  "add  %[RESULT], %[ARG1], %[ARG2]\n"
  : [RESULT]"=r"(result)             /* output */
  : [ARG1]"r"(arg1), [ARG2]"r"(arg2) /* inputs */
  :                                  /* no clobbers */
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

gcc如何知道用于内联汇编的寄存器大小?

arm gcc 汇编与 FPU 寄存器内联

无法在GCC内联汇编中强制使用64位寄存器

MIPS寄存器$ 0可以用于存储和检索值吗?

gcc中的全局寄存器变量

如何在扩展的GCC内联汇编中将输入操作数(C寄存器变量)标记为混乱的输入?

gcc错误地重用内联asm中的寄存器

可以在带有C ++ 17的GCC中使用显式寄存器变量吗?

GCC内联汇编intel语法“错误:无效使用寄存器”

您可以在Rust中声明要保存在CPU寄存器中的变量吗?

每个变量和寄存器名称都只是 NASM 汇编中的一个指针吗?

我们如何在 c 中检查内联汇编中的寄存器值?

watcom内联汇编收到错误“非法使用寄存器”

PowerPC 内联汇编:将 C 值加载到寄存器中

C ++中的扩展内联汇编:是否有必要保留易失性寄存器?

C ++内联汇编试图将字符从字符串复制到寄存器中

汇编程序可以在1byte寄存器上使用movw指令吗?

有什么方法可以分析x86汇编源代码中寄存器的“类型”?

如何从内联汇编中的两个寄存器中检索值的高位和低位部分?

是否有必要在内联汇编中初始化所有使用的寄存器?

PTEST可以用来测试两个寄存器是否均为零或其他情况吗?

在汇编中访问寄存器的高位字节

乘寄存器时汇编中的分段错误?

此汇编代码中%rax寄存器来自何处?

汇编:段寄存器和偏移寄存器

SASS 我可以用字符串和列表值组合变量名吗

GCC将寄存器args放置在堆栈中,且其间隙低于局部变量?

x86汇编编程(GAS语法):数据部分中定义的变量存储在哪些寄存器中?

内联汇编代码修改了帧指针寄存器“ ebx”