这个内联汇编如何定义变量?

san*_*ana 1 c inline-assembly linux-kernel

在linux内核中,您可以找到如下组件:

#define DEFINE(sym, val) \
        asm volatile("\n->" #sym " %0 " #val : : "i" (val))
Run Code Online (Sandbox Code Playgroud)

当像这样使用时

DEFINE(NR_PAGEFLAGS, __NR_PAGEFLAGS);
Run Code Online (Sandbox Code Playgroud)

生成以下程序集

->NR_PAGEFLAGS $24 __NR_PAGEFLAGS
Run Code Online (Sandbox Code Playgroud)

这显然是有效的集会.这是做什么的?

这个asm如何定义一个变量?请指出任何更详细解释这一点的文档.谢谢!

Tim*_*win 5

这不是有效的程序集.它使用sed脚本转换为以下内容:

#define NR_PAGEFLAGS 24
Run Code Online (Sandbox Code Playgroud)

然后,许多汇编源文件都包含此文件,这允许汇编程序文件中使用的C常量表达式的结果.