2011-11-02 131 views
4

说,我想在gcc的内联汇编中调用带有以下签名的函数。我怎样才能做到这一点?在gcc内联汇编中调用一个函数

int some_function(void * arg); 
+4

在裸露的骨头C中先执行然后使用'gcc -S'来获取模板代码,以便适应您的需求。 –

+0

Paul R,很好的解决方案,但我想要一个更通用的解决方案。 – MetallicPriest

+5

您不应该从内联汇编中调用函数。 GCC不会尝试解释代码,因此它可能会导致错误,例如在没有进行函数调用的情况下不设置堆栈帧。 – ughoavgfhw

回答

9

通常你会想要做这样的事情

void *x; 
asm(".. code that writes to register %0" : "=r"(x) : ... 
int r = some_function(x); 
asm(".. code that uses the result..." : ... : "r"(r), ... 

也就是说,你不想做的内联汇编函数调用的。这样你就不必担心调用约定或堆栈管理的细节。