%C在GCC内联汇编代码中的含义是什么?
我试图理解这个来自_hypercall0
内联汇编代码。
asm volatile ("call hypercall_page+%c[offset]" \ : "=r" (__res) \ : [offset] "i" (__HYPERVISOR_##name * sizeof(hypercall_page[0])) \ : "memory", "edi", "esi", "edx", "ecx", "ebx", "eax")
我无法找到第一行中%c
的含义的信息。 我没有在GCC手册最明显的部分找到任何信息,这解释了%[name]
,但没有找到%c[name]
。 还有其他我应该看的地方吗?
来自GCC内部文件 :
`%c digit ‘可用于替换常量值的操作数,而不使用通常表示立即操作数的语法。
检查程序集输出(使用gcc -S
,或者可能反汇编目标文件),它可能更清晰。
我的猜测是它代表不变 。 hypercall_page
看起来像一个指令表,每个指令执行系统调用。 也许这将生成一个call hypercall_page + {constant based on the expression given}
,基本上在编译时计算了这个偏移的地址。
__HYPERVISOR##name
,这个__HYPERVISOR##name
内容确实让我想起了你在Linux的__NR_name_of_syscall
类型约定。