ven*_*s.w 4 x86 assembly inline-assembly linux-kernel
我的asm知识非常有限,我需要知道以下代码:
movl %%esp %0
Run Code Online (Sandbox Code Playgroud)
是%0代表寄存器,内存地址还是其他什么?什么%0意思?
它代表一些输入/输出操作数.它允许您在汇编代码中使用C变量.这个页面有一些很好的例子.
%0只是代码中定义的第一个输入/输出操作数.实际上,这可能是堆栈变量,堆变量或寄存器,具体取决于编译器生成汇编代码的方式.
例如:
int a=10, b;
asm ("movl %1, %%eax;
movl %%eax, %0;"
:"=r"(b) /* output */
:"r"(a) /* input */
:"%eax" /* clobbered register */
);
Run Code Online (Sandbox Code Playgroud)
%0就是b在这种情况下,和%1是a.