相关疑难解决方法(0)

%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") 
Run Code Online (Sandbox Code Playgroud)

我无法找到%c第一行含义的信息.我没有在GCC手册最明显的部分找到任何信息,但这解释了%[name],但没有%c[name].还有其他我应该看的地方吗?

c xen assembly gcc inline-assembly

7
推荐指数
1
解决办法
1515
查看次数

GCC扩展了asm,struct element offset encoding

我试图在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)

c gcc inline-assembly i386

6
推荐指数
1
解决办法
2086
查看次数

标签 统计

c ×2

gcc ×2

inline-assembly ×2

assembly ×1

i386 ×1

xen ×1