【问题标题】:C/C++ pointer as base of memory reference?C/C++ 指针作为内存引用的基础?
【发布时间】:2016-01-26 07:46:55
【问题描述】:

指针可以用作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");
}

【问题讨论】:

  • 我不确定我是否遵循您的示例。如所写, rbx 的内容是未定义的?也许你的意思是这样的:for (unsigned long long d = 0; d < sizeof(b); d++) asm ("movq $123,(%1,%2)" : "=m"(a) :"r"(a), "r"(d));

标签: gcc g++ inline-assembly


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 2022-06-15
    • 2023-03-21
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    相关资源
    最近更新 更多