我正在編寫一個解釋的68k模擬器作爲個人/教育項目。現在我正在嘗試開發一個簡單的,通用的解碼機制。解碼68K指令
據我所知,每條指令的前兩個字節足以唯一地標識操作(有兩個罕見的例外),並且剩下要讀取的字的數量(如果有)。
這裏是我想在我的解碼階段完成的任務:
1. read two bytes
2. determine which instruction it is
3. extract the operands
4. pass the opcode and the operands on to the execute phase
我不能只通過前兩個字節爲查找表像我可以在RISC拱前幾位,因爲操作數是「在途中」。我怎樣才能以一般方式完成部分2
?
一般來說,我的問題是:如何從解碼過程中去除操作數的可變性?
更多的背景:
這裏是從程序員的參考手冊的8.2節的部分表:
Table 8.2. Operation Code Map
Bits 15-12 Operation
0000 Bit Manipulation/MOVEP/Immediate
0001 Move Byte
...
1110 Shift/Rotate/Bit Field
1111 Coprocessor Interface...
這對我來說取得了很大的意義,但後來我看每個位模式指令,並注意到在15到12位是0001,0010或0011時沒有單個指令。我必須有一些大的圖片丟失。
這Decoding Z80 Opcodes網站明確解釋解碼,這是我沒有在68k程序員的參考手冊或通過谷歌搜索找到的東西。
您的項目發展到什麼程度,您有反彙編程序還是仿真程序? –
我還在構建一個生成完整查找表的腳本。大約完成了70%。 – mwcz
@CountablyInfinite你正在做一個類似的項目嗎? – mwcz