繁体   English   中英

GNU内联汇编中的百分号(%)(C中的汇编)

[英]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

这将分别声明ij为输出和输入参数。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM