計算機要素--第六章 彙編編譯器

計算機系統要素,從零開始構建現代計算機(nand2tetris)
如果完成了本書所有的項目 你將會獲得以下成就

  • 構建出一臺計算機(在模擬器上運行)
  • 實現一門語言和相應的語言標準庫
  • 實現一個簡單的編譯器

而且,這本書的門檻非常低,只要你能熟練運用一門編程語言即可。本課程綜合了數字電路,計算機組成原理,計算機體系架構,操作系統,編譯原理,數據結構等的主要內容,搭建了計算機平臺的構建的框架,並未深入細節,如果需要了解細節,可由本書作爲主線,逐步完善的知識體系。

QQ交流羣(含資料):289682057
課程連接
項目地址Github


本章要實現的內容

詳細內容

對於本項目而言,最困難的就是允許彙編程序使用符號來指代內存地址。 而允許彙編程序使用符號來指代內存地址卻又是方便編程,提高程序可讀性的一種重要的方法。而由於符號化彙編命令與其對應的二進制代碼之間的關係是很簡單的,所以編寫彙編編譯器並非是很難的任務。彙編編譯器的功能並不複雜,彙編編譯器對每個彙編命令的所有部分進行解析,將每個部分翻譯成它對應的二進制碼,並將生成的二進制碼彙編成真正能被硬件執行的二進制指令。
這裏給出了一種可行的實現方案: 這裏提出一個基於4個模塊的彙編編譯器的實現:語法分析器模塊用來對輸入文件進行語法分析;編碼模塊用來提供所有彙編命令所對應的二進制代碼;符號表模塊用來處理符號;另外還有一個主程序用來驅動整個編譯過程。

  • Parser(語法分析器模塊):本模塊主要做的就是對命令進行獲取,進行類型判斷,獲取符號(預定義符號,標記命令,變量)
  • Code(編碼模塊):將Hack彙編語言助記符翻譯成二進制碼。
  • 符號表模塊:符號表用於建立和維持符號與其地址之間的關聯。常用的有哈希表。
  • 無符號程序的彙編編譯器:這種情況意味着不用處理符號,所以只有兩個階段,第一階段翻譯無符號彙編程序,然後將其擴展成具有符號處理能力的彙編編譯器。
  • 有符號程序的彙編編譯器:使用兩次讀取代碼的方式來實現,第一遍構建符號表,但不翻譯程序;第二遍翻譯程序,並把符號變成地址。

具體的實現參考課程或者是課本。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章