我想使用 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/