一、 題目:實作簡易的 Assembler
三、 Instruction set
參考附錄A,本次實作程式用到set如下:
"ADD",0x18,"ADDF",0x58,"AND",0x40,"COMP",0x28,"COMPF",0x88,
"DIV",0x24,"DIVF",0x64,"J",0x3C,"JEQ",0x30,"JGT",0x34,
"JLT",0x38,"JSUB",0x48,"LDA",0x00,"LDB",0x68,"LDCH",0x50,
"LDF",0x70,"LDL",0x08,"LDS",0x6C,"LDT",0x74,"LDX",0x04,
"LPS",0xD0,"MUL",0x20,"MULF",0x60,"OR",0x44,"RD",0xD8,
"RSUB",0x4C,"SSK",0xEC,"STA",0x0C,"STB",0x78,"STCH",0x54,
"STF",0x80,"STI",0xD4,"STL",0x14,"STS",0x7C,"STSW",0xE8,
"STT",0x84,"STX",0x10,"SUB",0x1C,"SUBF",0x5C,"TD",0xE0,
"TIX",0x2C,"WD",0xDC
四、 本次實作程式可執行功能
五、 所使用的資料結構
六、 演算法
參考Fig. 2.4
九、 運作方式
十、 實作心得:
本次作業,因為SIC/XE要處理很多字串,就能力問題,還仍然無法完美呈現,故本次作業為實作SIC Assembler。
我們可以從課本當中可以得知組譯SIC的虛擬碼,我利用C語言實現此次的作業,在C語言實作的過程當中,我在實作期間遇到許多問題,如:擷取字串片段、字串轉成整數、整數轉成字串等…問題,經由上網查詢以及與同學討論之後解決這些問題。解決問題的技巧在於於每個不確定的階段進行debug模式,可以查看當前值,以及相關訊息,經由大量測試和修改,可以解決大部分的「排版」問題。
於C語言當中,轉碼問題,為主要遇到的大問題所在,必須時常利用atoi()、itoa()等轉碼函式。檔案輸入以及輸出經由此次的練習之後,已經相當熟練,比如說:fopen()、fprintf()、fclose()等。我認為字串的比較在此次實作也占了很大部分的技巧,strcmp()跟strlen()都是不可或缺的函式,我利用這些函式去處理字串。
而未來若有時間,經由這次的實作經驗之後,想研讀SIC/XE並且實作之,將它設定為目標好好增進自己的實力。因為SIC/XE必須處理定址問題,所以我認為這是很好的訓練自己寫程式的能力。
再者,上網找尋資料的同時,也了解許多以前在計算機概論這門課學習時,無法理解的道理,經由這次的實作也一併理解,覺得此次的實作使得自己的程式能力又提高,但仍不忘繼續向上邁進,期許自己可以靈活使用這些程式語言。