請教一下學習製作編譯器後端的方法?
01-14
自己試著寫了一個小編譯器,前端已經整的差不多了。該著手做後端了。我想整一個生成彙編代碼直接整個彙編器就可以運行的那種。所以希望大家內給推薦些學習編譯器後端和彙編的書籍,也希望能給一些後端學習的建議。
你只是想做的話,就上LLVM。如果你還想親自擼一擼,我建議你從手寫x64機器碼開始,有助於你編寫一個正確的彙編器的同時,學會寫x64彙編,迅速做出一個生成爛代碼的後端。如果你連x64都能搞定,換什麼其他流行的指令集都不成問題。
你需要參考Intel編程手冊
我有學習編譯器的源碼,感覺彙編器僅僅是編譯器後端的一個小的組成部分。
這些編譯器的前端是詞法掃描器、預處理器以及三地址碼的轉換等,後端是將中間代碼轉換成目標代碼,以及進行優化處理的部分。在後端中,目標代碼不僅是機器碼,彙編碼也是目標代碼。感覺,製作一個編譯器後端,從某種程度上來說根本不用了解機器碼。
X86的指令不少,自學肯定要耗費不少精力。如果你真想自己做出一個編譯器後端的話,可以選擇某種簡單的已有彙編來實現,像NASM,它的語法挺簡單的。你只要學會幾個基本的彙編指令,基本上就可以實現你的目標了。這樣做就可以了:1、保證你的編譯器前端能將代碼分析好,輸出正確的中間代碼2、寫後端(優化什麼的就丟掉),將生產的中間代碼轉換為彙編代碼。
將t2 = t0 + t1轉換成mov edx, [esp+12]mov eax, [esp+8]add eax, edxmov [esp+4], eax
這樣的彙編碼3、將生成的彙編碼用NASM編譯,產生了.o文件。4、學習使用nasm生成可執行文件,這樣你的目標就達到了。你需要了解目標機的彙編指令有哪些,彙編指令的格式是什麼樣的,然後找好前端輸出的中間語言與彙編指令的對應關係,要參考的書籍取決於你所使用的硬體,查看與該硬體相關的參考手冊
推薦閱讀:
※一到冬天手腳冰涼,如何改善體質?
※學習電路出了邱關源的書還有那些好書值得推薦?
※物質獎勵對孩子到底是好是壞?會不會打消學習的積極性或者最原始的目的性,算是教育的失敗嗎?
※你見過最巧妙的物理推導是什麼?
※請問一下,有沒有收錄古箏現代箏曲,比較全面的演奏書籍。?