2011-11-25 58 views
3

我想使用AT & T语法使用内联汇编分配数组。我想要实现类似以下的内容。请注意,rsp这里是%rsp寄存器。使用AT&T语法访问使用内联汇编的数组

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

回答

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

+0

噢,好吧,我有你想要做的:)! – MetallicPriest

相关问题