2011年9月6日 星期二

448 - OOPS!

本題請你將機器語言反組譯為組合語言(assembler),該組合語言有16個指令,以16進制編碼,其指令集如下:

tabular21
ADD [R,A,N],[R,A] 表示ADD(加法指令)有兩個運算元,第一個運算元可為暫存器(R)、位址(A)、或為常數(N),而第二個運算元不是暫存器(R)就是位址(A)。

每道指令編碼成4個bits。運算元由兩個部分所構成:「型態欄位」與「數值欄位」,型態欄位佔2個bits,數值欄位佔4個bits,共佔6個bits。型態欄位所代表的值如下:

tabular51
當運算元的型態欄位等於00(Register),則數值欄位表示暫存器的編號,例如當型態欄位=00,數值欄位=7,則該運算元表示「第七號暫存器」寫成「R7」。暫存器編號為R0 ~ R1023。

當運算元的型態欄位等於01(Absolute),則數值欄位表示記憶體的絕對位置,例如當型態欄位=01,數值欄位=110,則該運算元表示「記憶體位置110」寫成「$110」,合法的記憶體位置為$0 ~ $16383。

當運算元的型態欄位等於10(PC-Relative),則數值欄位表示為與指令暫存器(Program Counter)相對的記憶體位置(相對位置不會是負的),例如當型態欄位=10,數值欄位=45,則該運算元所表示的記憶體位置為:該指令的位置 (Program Counter) + 45,寫成「PC+45」,合法的相對位置為0 ~ 16363。

當運算元的型態欄位等於11(Constant),則數值欄位代表一個常數,其值介於0~16383,例如當型態欄位=11,數值欄位=1276,則該運算元表示「常數1276」,寫成「1276」。

Input and Output

請你從輸入的機器語言轉換成原始的組合語言程式碼,機器語言以16進制表示,每列30個字元(除了最後一列為1~30個字元不等),請將轉換後的組合語言每道指令一列作輸出。

Sample Input

4C00D00004C0020001000000001400
005FFFB801E

Sample Output

MOV 13,R0
MOV 2,R1
ADD R0,R1
MOV R0,$8191
BR PC+30

原文出處

沒有留言:

張貼留言