2010-03-04 37 views
3

我正在構建一個玩具編譯器作爲一個學習項目,現在我正在圍繞代碼生成階段徘徊。我發現this page描述了我可以定位的一系列不同的彙編程序,並且我希望提供一些可供選擇的建議。哪個彙編程序要定位?

我的目標是優化我的學習體驗 - 爲此,我試圖做出決定,讓我獲得最有用的知識。那的一些例子:

  • 使用了大量的中間步驟,而不是從AST直行到ASM
  • 針對X64/Linux的,而不是JVM或LLVM

我明白這是非常主觀,所以試圖進一步澄清:我更喜歡專有的開放源代碼,廣泛使用到不廣泛使用,廣泛到具體。爲此,我會避免像HLA這樣的東西,因爲它比真正的ASM更「特定」。

如果這聽起來特別不明白,我還在學習,所以請隨時告訴我,如果我「做錯了」。

回答

2

您會考慮使用軟件MIPS emulator來測試非x86目標,例如MIPS等更乾淨的RISC(精簡指令集計算機)處理器嗎?

否則我會說,對於Linux來說,我會考慮NASM風格的裝配輸出或中間格式。我相信YASM,FASM支持默認或標誌兼容性,並且使用英特爾的語法,而GNU的氣體使用T的語法,這種語法被廣泛認爲是尷尬或更壞,但與gcc輸出兼容。

0

如果您生成ASM,沒有理由使用任何高級功能,所以我認爲沒有多少東西可以銷售其餘的。你可以快速掃描幾個,然後選擇你最容易起牀和最容易運行的任何一個。另外,請記住,如果您只是避免使用基本功能,並且小心翼翼地構建ASM輸出代碼,那麼您應該能夠切換到不同的彙編程序格式,只需要切換輸出格式字符串IIRC printf可以按位置選擇參數,因此您甚至可以反轉參數順序)。我不會寫它來做這件事,但如果你記住你可能想要以後,它可能會在稍後支付。