如何在 ARM GCC 内联汇编中指定单个寄存器作为约束?

Mat*_*Mat 5 gcc arm inline-assembly

在 x86 内联汇编中,我可以这样写:

asm ("cpuid"
            : "=a" (_eax),
              "=b" (_ebx),
              "=c" (_ecx),
              "=d" (_edx)
            : "a" (op));
Run Code Online (Sandbox Code Playgroud)

所以在 matchin 约束中,而不是只写“=r”并让编译器选择寄存器,我可以说我想使用哪个特定的寄存器(=a 例如使用 %eax)

我怎样才能为 ARM 程序集做到这一点?ARM GCC 汇编手册http://www.ethernut.de/en/documents/arm-inline-asm.html指出,例如,我可以将约束“r”用于通用寄存器 R0-R15“w”之一" 对于 VFP 浮点寄存器 S0-S31 之一

但是我怎样才能将一个操作数限制在例如 s1 呢?或特定的通用寄存器?

Mik*_*our 6

我认为 ARM 的 gcc 不允许您使用约束来准确指定要使用的寄存器。但是,您可以使用显式寄存器变量来指定一个寄存器来存储变量:

register int my_variable asm("r0");
Run Code Online (Sandbox Code Playgroud)