C / C ++指针作为内存引用的基础?

时间:2016-01-26 07:46:56

标签: gcc g++ inline-assembly

指针是否可以用作inline assembly的内存引用的偏移量和基数?

例如:

int main(){
 char a[16],b[16];
 asm volatile("\
 movq $123,16(%%rsp,%%rbx,1)"
 :"=m"(*a)::"rbx");
}

可能是这样的:

int main(){
 char a[16],b[16];
 asm volatile("\
 movq $123,(%0,%%rbx,1)"
 :"=m"(*a)::"rbx");
}

1 个答案:

答案 0 :(得分:-1)

一种选择是使用一个额外的寄存器:

int main(){
 char a[16],b[16];
 asm volatile("\
 lea %0,%%rcx\n\
 movq $123,(%%rcx,%%rbx,1)"
 :"=m"(*a)::"rbx","rcx");
}