在ARM内联汇编中,百分号后面的字母代表了寄存器变量的约束(constraint)。
下面的代码示例中,汇编语句“add %0, %1, %2”表示将寄存器%1和寄存器%2的值相加,然后将结果存储在%0中。在这个示例中,“%0”,“%1”和“%2”都带有寄存器变量约束。
int add(int a, int b) { int result; asm ("add %0, %1, %2" : "=r" (result) : "r" (a), "r" (b)); return result; }
在这个示例中,“=r”表示将%0约束到一个一般寄存器,“r”表示将%1和%2约束到一般寄存器。