使用AT& T语法访问具有内联汇编的数组

时间:2011-11-25 16:53:14

标签: 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];   
 ......
}

1 个答案:

答案 0 :(得分:3)

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

__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”将失效。