[英]Percentage (%) sign in GNU inline assembly (asm in C)
这些代码行应该做什么?
mov ebx, %1
mov ecx, %0
我知道%表示指针,但我需要更多说明。 为什么%1和0-这些特定数字?
在AT&T语法中,使用百分号引用寄存器,然后使用寄存器名称即%eax
。 用数字显示的那些在汇编中没有意义,它们在内联汇编中用于引用输入和输出操作数。
int i = 5;
int j;
asm ("mov %1, %0" : "=r"(j) : "r"(i)); //AT&T. Swap operands for Intel syntax
这将分别声明i
和j
为输出和输入参数。 q
表示任何通用寄存器都可以。 除非确实需要特定的寄存器,否则应始终让编译器选择方便的选项。 由于您事先不知道获得哪个寄存器,因此会为它们分配一个从0开始的数字。 %0
是第一个参数,在这种情况下,输出参数j
和%1
是输入参数i
。
%0和%1是内联汇编块的前两个操作数。 我认为这不是常规的x86,但对gcc来说很特殊。
参见此处: http : //www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.