42、P1 W6 U6.5 匯編器架構方案

視頻:
如果本次課程對應的 Coursera 的視頻打不開航邢,可以點擊下面鏈接
P1W6U6.5 -Developing a Hack Assembler-Proposed Software Architacture

經(jīng)過上節(jié)課的講解耕赘,基本上如果已經(jīng)掌握一門高級編程語言的你,就可以開始根據(jù)上幾節(jié)課的邏輯開始編寫匯編器了膳殷。也可以跳過這節(jié)課操骡。

如果編過一些程序,但是掌握不熟赚窃,或者之前課聽的邏輯不清册招,是最適合看這節(jié)課的。

但如果你沒聽說過類啊勒极、構造行數(shù)啊是掰、方法啊這些面向對象編程概念的話。那聽這節(jié)課之前辱匿,應該簡單了解一下這些概念键痛,比如找些java的學習資料看一看。

需要分三步

一匾七、分析文件(Parser)
二絮短、翻譯指令(Code)
三、處理符號(Symbol Table)

三步走

一昨忆、分析文件(Parser)

Parser 來處理第一步丁频。老師暗示它應該編寫成一個類。

第一步又被分成3小部分來分別講解。

1席里、通過一個文件名叔磷,讀取一個文件

Parser 類,通過構造函數(shù)的參數(shù)胁勺,引入文件名
然后執(zhí)行讀取文件

2世澜、可以順序讀取每一行指令

這里編程時,老師暗示也許會需要下面一些方法署穗。

還有指令否寥裂? boolean hasMoreCommands();
獲取下一行指令 void advance();
一次讀一行
需要跳過忽略行

3、區(qū) 分 指令

需要區(qū)別:
A指令
C指令
Labels

需要分拆:
例如A指令 需要拆分 @ 和后面的部分
例如C指令 需要分成 dest案疲、comp封恰、jump 三個字符串部分,例如下圖底部代碼示意褐啡,通過對應的三種方法獲得拆分后的字符串诺舔。

二、Code

A指令處理和C指令是一樣的备畦,C指令略復雜低飒,這里老師拿出C指令,具體講解了一下懂盐。

C指令拆分后褥赊,每一部分都有一個老師之前給出的表,可以對照來翻譯莉恼。

下圖老師給出了一個示意代碼拌喉,明顯其中類(Parser、Code)的方法(comp俐银、dest尿背、jump)需要我們根據(jù)對照表自己去實現(xiàn)。


三捶惜、符號表

符號表是匯編器用來在翻譯過程中田藐, 維護、處理符號的售躁。而符號的使用坞淮,是為了給人們寫匯編程序提供更大的便利和更高的效率。

1陪捷、符號表 The Symbol Table

一開始程序初始化的時候需要創(chuàng)建一個空的鍵值表。
需要實現(xiàn)以下方法:
增加鍵值
查詢鍵是否存在
通過鍵诺擅,獲取值

2市袖、如何使用 符號表

初始化符號表后,先把 pre-defined 的符號,寫入表內(nèi)苍碟,例如SCREEN酒觅、R0~R15等。

first pass時微峰, 通過()找到labels舷丹,寫入符號表,注意label對應的值需要維護一個指令地址蜓肆。

second pass時颜凯, @后面的符號 如果不在表里,那一定就是variables了(因為@后面還會跟labels仗扬,但是labels已經(jīng)在 first pass時症概,寫入表里了),對應值從16開始早芭,例如第一個新variable對應16彼城。

這樣就把三種符號都處理到表中了

編程邏輯 最終匯總

初始化:Parser 和 Symbol表
第一遍掃描:取出忽略的行,讀出全部指令退个,另外找出labels寫入符號表
第二遍掃描:翻譯(翻譯的邏輯看下圖Main Loop募壕,基本上面都提到了)

下節(jié)課 U6.6A
如果用高級語言編寫匯編器的話,老師提供了一些方法和建議语盈,另外一些測試材料舱馅,還提到了part2的一些內(nèi)容。

下下節(jié)課 U6.6B
如果你不想編程黎烈。那么這節(jié)課很適合你习柠,老師教你如何化身“人肉匯編器”。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末照棋,一起剝皮案震驚了整個濱河市资溃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烈炭,老刑警劉巖溶锭,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異符隙,居然都是意外死亡趴捅,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門霹疫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拱绑,“玉大人,你說我怎么就攤上這事丽蝎×圆Γ” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長红省。 經(jīng)常有香客問我额各,道長,這世上最難降的妖魔是什么吧恃? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任虾啦,我火速辦了婚禮赞草,結果婚禮上纹冤,老公的妹妹穿的比我還像新娘。我一直安慰自己耐齐,他們只是感情好厂抽,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布需频。 她就那樣靜靜地躺著,像睡著了一般筷凤。 火紅的嫁衣襯著肌膚如雪昭殉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天藐守,我揣著相機與錄音挪丢,去河邊找鬼。 笑死卢厂,一個胖子當著我的面吹牛乾蓬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慎恒,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼任内,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了融柬?” 一聲冷哼從身側響起死嗦,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粒氧,沒想到半個月后越除,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡外盯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年摘盆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饱苟。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡孩擂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出箱熬,到底是詐尸還是另有隱情肋殴,我是刑警寧澤囤锉,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布坦弟,位于F島的核電站护锤,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏酿傍。R本人自食惡果不足惜烙懦,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赤炒。 院中可真熱鬧氯析,春花似錦、人聲如沸莺褒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遵岩。三九已至你辣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尘执,已是汗流浹背舍哄。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留誊锭,地道東北人表悬。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像丧靡,于是被迫代替她去往敵國和親蟆沫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容