2012-06-28 38 views
5

我想編譯一箇舊的C++軟件項目Code :: Blocks使用GCC編譯器,並修復了一些其他問題後,我碰壁了:項目有一個文件與英特爾式內聯彙編寫成英特爾風格的內聯彙編在海灣合作委員會

_asm { 
    code here 
} 

和編譯器拒絕與編譯「錯誤:‘_asm’並沒有在這個範圍中聲明」。

我花了一段時間搜索解決方案,但我可以找到的唯一的方法是將-masm=intel添加到構建選項(我嘗試過並且無法工作)或將代碼到asm ("code here");(由於ASM數量巨大,這是不可行的)。有誰知道我可以如何讓gcc按原樣編譯此代碼,還是應該放棄並使用不同的編譯器?

+0

如何生成一個宏,然後使用腳本來替換宏的_asm行。然後你可以更好地編譯器獨立性 – daramarak

+0

一個宏將是一個想法,雖然我以前從未使用過一個宏,所以我不得不弄清楚它(儘管我的問題聽起來很糟糕,實際上我幾乎是一個完整的noob,這個東西= /) 。另外,asm例程與標籤或其他東西('_asm {\ n code here \ n} L01:__asm ...')連接在一起,我不確定如何處理它。 – Dinoguy1000

+0

代碼不會按原樣編譯,您需要將其更改爲使用gcc編譯(或使用MSVC代替)。 –

回答

2

GCC對嵌入式彙編程序使用very different syntax,所以您將無法通過簡單的更改來處理它。我看到如下選項:

  1. 重寫一切都在GCC的語法或C代碼
  2. 使一些腳本轉換爲GCC語法(不平凡的任務)
  3. 編譯與任何編譯器它編寫的代碼對於(MSVC?)
+0

備選方案2非常樂觀。算了吧! – TonyK

+0

選項1不是一個選項;所討論的文件完全由asm組成,其重量爲83 kb,有數百個函數。看起來我只需要切換編譯器。 – Dinoguy1000

+1

有人實際上做了選項2,它被稱爲'intel2gas',我用它來做類似的移植工作。 –

0

您根本無法讓gcc按原樣編譯代碼。如果你需要使用gcc編譯這個東西,你必須用C++或gcc兼容的asm重寫代碼。如果真的有很多彙編代碼 - 比方說200條指令或更多 - 可能需要學習gcc彙編語法;如果沒有,用C++編碼。

+0

看到我對伊戈爾答案的評論;在這種情況下重寫不是一種選擇,因爲有成千上萬的指令(200將是一個非常好的一步!)。 – Dinoguy1000

相關問題