2011-11-02 141 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), ... 

也就是說,你不想做的內聯彙編函數調用的。這樣你就不必擔心調用約定或堆棧管理的細節。