彙編編譯器用來將匯程式設計序翻譯為二進位制的機器碼程式。
因為是學習計算機系統要素一書而寫的這一部分**,所以,二進位制**和彙編**規範均採用該書所定規範。
規範描述:1、
語法規約和檔案格式
匯程式設計序以
"hack"
為字尾名,二進位制**程式檔案以
"asm"
為字尾名。
二進位制**檔案由一行行1和
0組成的字串組成,每行
16位,也就是說
cpu為
16位架構。
彙編檔案也是由文字組成,每一行代表一條指令或者乙個符號宣告。
指令:a
指令或c
指令,稍後詳細介紹。
符號宣告:文字格式為
"(變數
)"形式,符號宣告不產生實際**,只是用來說明該符號代表的**的位置。 2
、指令指令分為兩類,
a指令,即定址指令;
c指令,即計算指令; a
指令@value
// value
是乙個非負十進位制數 //
或表示該數值的符號
對應二進位制值:
0vvv vvvv vvvv vvvv
v代表數值 c
指令dest=comp;jump
// dest
或jump
域都可以為空
// 如果dest
為空,則」
=「被省略
// 如果jump
為空,則」;「被省略
對應二進位制值:
111a c1c2c3c4 c5c6d1d2 d3j1j2j3
a c1c2c3c4 c5c6
構成comp域
d1d2d3
構成dest域
j1j2j3
構成jump域
編譯器編寫思路:
我們先來解決乙個假設,是否每天彙編指令(除符號說明指令)對應一條二進位制指令?
因為每條彙編都與一條機器碼指令對應,所以上述假設成立。
我想編譯器的實現應該分為兩個過程,第乙個過程先對符號進行處理,對符號進行**指令行記錄,第二個過程就是對語句進行直接翻譯的過程,對語句進行翻譯需要對字串格式進行匹配,如果匹配不正確,那麼就是**語法錯誤了。
看上去上邊就是我們工作的全部了,其實只是我們的核心思想而已,佔到我們工作總量的
30%-50%
,所以如果感覺上邊工作需要
2個小時完成,那麼我們的工作實際可能就需要
4個小時來完成。
為什麼有必要分為兩個過程來完成?
因為,符號可能在使用時,還處於尚未定義,所以就需要向後尋找符號的值,如果暫時不處理,後期再進行處理,一方面很複雜,另一方面時間效率也不怎麼樣。
實現語言
c++
需要完成檔案讀寫的工作
因為我們檔案比較小,可以一次將所有內容讀取出來,組織為行的形式
需要完成字串處理的工作
左右非字元(空格或其它)字元清除
清除所有非字元字元,因為我們的組合語言中不存在非字元的特殊形式,所以清除這些字元對組合語言不產生影響,但會為解析格式提供便利。
需要完成二進位制**生成工作
符號與二進位制**之間定義了生成對映關係。
計算機系統 csapp 彙編總結
整數暫存器 c語言資料型別在x86 64中的大小 c宣告intel資料型別 彙編 字尾 大小 位元組 char位元組b 1short字w 2int雙字l 4long四字q 8char 四字q 8float 單精度s 4double 雙精度l 8條件碼 條件碼解釋 cf進製標誌。最近的操作使最高位產生...
《計算機系統要素》全面初步了解計算機體系
這本書的中文譯名是 計算機系統要素 從零開始構建現代計算機 適合對計算機體系知識不熟悉的人 它對計算機體系有乙個全面的介紹 當然 都是停留在入門階段 但是 讀完這本書並做完所有的專案 你對計算機的了解至少能超越50 的程度員 先來看一看這本書的簡介 本書通過展現簡單但功能強大的計算機系統之構建過程,...
計算機系統
一陰一陽之為道。早在幾千年我國古人就知道天地萬物皆由正反兩個東西組成的。自從人類進入電氣時代,隨著電子元件的快速發展,各種裝置隨之誕生了。一些元件 例如閘流體 可以根據電壓的高低變化自行導 通或者關斷。如果是高電壓導通,就規定是1 低電壓導通規定是0,那麼眾多的這些元件組成的乙個整體就可以0 和1來...