請教一下學習製作編譯器後端的方法?

自己試著寫了一個小編譯器,前端已經整的差不多了。該著手做後端了。我想整一個生成彙編代碼直接整個彙編器就可以運行的那種。所以希望大家內給推薦些學習編譯器後端和彙編的書籍,也希望能給一些後端學習的建議。


你只是想做的話,就上LLVM。如果你還想親自擼一擼,我建議你從手寫x64機器碼開始,有助於你編寫一個正確的彙編器的同時,學會寫x64彙編,迅速做出一個生成爛代碼的後端。如果你連x64都能搞定,換什麼其他流行的指令集都不成問題。

你需要參考Intel編程手冊


我有學習編譯器的源碼,感覺彙編器僅僅是編譯器後端的一個小的組成部分。

這些編譯器的前端是詞法掃描器、預處理器以及三地址碼的轉換等,後端是將中間代碼轉換成目標代碼,以及進行優化處理的部分。在後端中,目標代碼不僅是機器碼,彙編碼也是目標代碼。

感覺,製作一個編譯器後端,從某種程度上來說根本不用了解機器碼

X86的指令不少,自學肯定要耗費不少精力。

如果你真想自己做出一個編譯器後端的話,可以選擇某種簡單的已有彙編來實現,像NASM,它的語法挺簡單的。你只要學會幾個基本的彙編指令,基本上就可以實現你的目標了。

這樣做就可以了:

1、保證你的編譯器前端能將代碼分析好,輸出正確的中間代碼

2、寫後端(優化什麼的就丟掉),將生產的中間代碼轉換為彙編代碼。

將t2 = t0 + t1轉換成

mov edx, [esp+12]

mov eax, [esp+8]

add eax, edx

mov [esp+4], eax

這樣的彙編碼

3、將生成的彙編碼用NASM編譯,產生了.o文件。

4、學習使用nasm生成可執行文件,這樣你的目標就達到了。

做出一整套編譯器絕對是個很複雜的過程,如果你感覺上面可能做不到,我建議你可以嘗試一下將目標運行的平台設為自製的虛擬機。(笑)


你需要了解目標機的彙編指令有哪些,彙編指令的格式是什麼樣的,然後找好前端輸出的中間語言與彙編指令的對應關係,要參考的書籍取決於你所使用的硬體,查看與該硬體相關的參考手冊


推薦閱讀:

一到冬天手腳冰涼,如何改善體質?
學習電路出了邱關源的書還有那些好書值得推薦?
物質獎勵對孩子到底是好是壞?會不會打消學習的積極性或者最原始的目的性,算是教育的失敗嗎?
你見過最巧妙的物理推導是什麼?
請問一下,有沒有收錄古箏現代箏曲,比較全面的演奏書籍。?

TAG:學習 | 編程 | 編譯原理 | 編譯器 |