我想了解哪些来源于此内联汇编代码_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")
Run Code Online (Sandbox Code Playgroud)
我无法找到%c第一行含义的信息.我没有在GCC手册最明显的部分找到任何信息,但这解释了%[name],但没有%c[name].还有其他我应该看的地方吗?
我试图在GCC样式扩展asm(x86-64目标)中编写我的一小段代码,并且在编码结构偏移时遇到问题.
我有一个struct s成员size_t a[],一个指向这样的结构和索引的指针,这两个结构都是在asm块中生成的.
现在我需要在asm中解决这个问题
asm (
"mov %[displ](%[s], %[index], 8), %%rbx"
: [s] "+r" (s)
, [index] "+r" (i)
: "memory", "cc", "rax", "rbx"
);
Run Code Online (Sandbox Code Playgroud)
如何编码displ到asm块?offsetof(struct s, a)作为立即前缀传递$并生成无效的程序集.
asm (
"mov %[displ](%[s], %[index], 8), %%rbx"
: [s] "+r" (s)
, [index] "+r" (i)
: [displ] "i" (offsetof(struct s, a))
: "memory", "cc", "rax", "rbx"
);
Run Code Online (Sandbox Code Playgroud)