2012-09-03 70 views
0

對於內聯asm代碼,我使用vC++編譯器的__asm和用於linux下gcc的__asm__()asm()構造。 (英特爾/在& t語法相應)多線程支持Inline Asm(x86)

有沒有辦法來聲明內置程序集(x86)在C中爲他們都以通用的方式嗎?

P.S.用於合併兩者的自動化工具也是可以接受的。

+2

源文件中的彙編程序一直是編譯器特定的擴展。 –

+1

簡單的答案是否定的。解決方案是將彙編代碼放入一個宏中,併爲每個平臺#ifdef。 – Neil

+1

此時,使用YASM並單獨鏈接asm代碼變得更容易。它不會內聯,但它可以與GCC,MSVC和其他工作。 – harold

回答

5

將程序集放入宏中,並使用預處理器生成正確的代碼。

#ifdef GCC 
#define MY_ASM_CODE __asm() { blah blah blah} 
#endif 

#ifdef MSVC 
#define MY_ASM_CODE __asm { blah blah blah } 
#endif 

int main(void) 
{ 
    MY_ASM_CODE; 
    return 0; 
} 
+0

你不是這個意思:'#define MY_ASM_CODE __asm'和'#define MY_ASM_CODE __asm()'?所以你可以輸入:'MY_ASM_CODE {asm code here}' - 雖然我從來沒有使用asm代碼,所以我可能是錯的... – Rookie

+3

@Rookie - 不,對於不同的編譯器,asm代碼本身的格式也不同。因爲它是針對不同的處理器和不同的模式(32/64位)。有*是*在C編寫代碼的原因:-) –

+0

謝謝。雖然,我所尋找的並不是一個平靜的東西 - 而是一個統一的方式來做同樣的「罷工」,你基本上建議我分別寫兩個內聯,這是我的觀點。 – dalimama

0

作爲替代...

我想你使用Visual C,因爲它是一個Windows平臺?

爲什麼不在Windows和Linux平臺上使用gcc?

然後它是相同的源和相同的彙編格式!