我正在尝试以 GCC 样式扩展 asm(x86-64 目标)编写一小段代码,并且在编码结构偏移量时遇到问题。
我有一个struct s
with a member size_t a[]
,一个指向这种结构的指针和一个索引,它们都是在 asm 块中生成的。
现在我需要在 asm 中处理该元素
asm (
"mov %[displ](%[s], %[index], 8), %%rbx"
: [s] "+r" (s)
, [index] "+r" (i)
: "memory", "cc", "rax", "rbx"
);
如何编码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"
);