c - 使用 AT&T 语法通过内联汇编访问数组

标签 c linux gcc assembly x86

我想使用 AT&T 语法使用内联汇编分配一个数组。我想实现以下目标。注意这里的rsp%rsp寄存器。

long saved_sp[N];
long new_sp[N];

void some_function( unsigned int tid, ... )
{
 // These two lines should be in assembly
 saved_sp[tid] = rsp; 
 rsp = new_sp[tid];   
 ......
}

最佳答案

我确定我不需要警告你......

__asm__ __volatile__ (

    "movq %%rsp, (%0, %2, 8)\n\t"
    "movq (%1, %2, 8), %%rsp\n\t"

    : : "r" (saved_sp), "r" (new_sp), "r" ((long) tid));

也许“内存”应该被添加为一个破坏者,但它似乎有点多余。无论您之后去哪里,请记住帧指针“%rbp”将失效。

关于c - 使用 AT&T 语法通过内联汇编访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8272092/

相关文章:

c - 在 C 中使用嵌套函数

#define 之外的 C 预处理器连接

python - 单链表删除

c - 从指向嵌套结构的指针访问元素

c - 为什么要将指针转换为函数

xcode - 安装 glog CocoaPod "configure: error: C preprocessor "/lib/cpp 时出错“完整性检查失败”

linux - 如何在 Oracle Linux 6.4 x64 上安装 PostGIS?

c - 在边缘触发模式下使用epoll时如何重新开始接收通知?

linux - ec2 - 如果没有临时实例存储,临时文件是否会填满根 ebs 卷?

c - __restrict vis-a-vis 流行编译器的函数优化行为