
[請益] CPU指令解碼的解譯優先順序

覺得很奇怪的是,記得我以前上課的時候,
老師有說cpu一定會有某些特定的位元組來做指令的區分,
不可能有衝突的可能,按照這個說法如果我們軟體讀取資料做解譯,
我們也只要對幾個特定的BIT做mask,然後比對是否符合特定的數值,
就可以知道資料是什麼指令,該用什麼方式去解讀,因此我們可以用好幾個
if ( (ins & 0x?????? ) == 0x?????? )
{
//某個指令
} else if (....)
{
//某個指令
} else if (....)
{
//某個指令
} ......
判斷來寫出解譯器,不過實際上我卻發現會因為判斷前後順序的不同,
導致最後解出不同的指令,很奇怪的問題... 還是我的觀念有誤?
又另外我要怎麼知道判讀的前後優先順序?
我抓到的DataSheet 只有把所有指令格式列出,
但是它並沒有說明cpu會優先用哪種格式去做解讀.
實際上判讀的前後順序,某些少部分情況下真的會影響到結果.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.70.79.227
推
04/20 22:26, , 1F
04/20 22:26, 1F
→
04/20 23:16, , 2F
04/20 23:16, 2F
→
04/21 08:08, , 3F
04/21 08:08, 3F
後來想一想,得到的結論是使用特定BIT做mask,檢查mask後是否符合特定的數值,
這種做法的確有前後順序需要處裡的問題,似乎是看mask的數值,
越小的要留到越後面去解,RISC的cpu不知道,
CISC的arm在寫解譯器或是模擬器就要注意到.
不過後來想想這些問題,丟在這裡應該也很難獲得比較正確結論,
還是多靠自己好了.
※ 編輯: erspicu 來自: 61.70.79.227 (04/21 12:26)
→
04/21 19:14, , 4F
04/21 19:14, 4F
當然不是用軟體,但是用軟體也可以,不然就不會有解譯跟模擬器了.
推
04/21 19:21, , 5F
04/21 19:21, 5F
→
04/21 19:25, , 6F
04/21 19:25, 6F
→
04/21 19:34, , 7F
04/21 19:34, 7F
推
04/21 20:08, , 8F
04/21 20:08, 8F
這個問題我也想過,所以disasm會讓你選擇用什麼方式去解讀,有些還auto模式自行判斷,
比較好奇的是auto是靠什麼機制的,最後猜測是它是解譯器兼模擬器動態判斷.
※ 編輯: erspicu 來自: 61.70.79.227 (04/21 21:09)
→
04/21 23:07, , 9F
04/21 23:07, 9F
→
04/21 23:09, , 10F
04/21 23:09, 10F
→
04/21 23:10, , 11F
04/21 23:10, 11F
→
04/21 23:11, , 12F
04/21 23:11, 12F
→
04/21 23:12, , 13F
04/21 23:12, 13F
→
04/21 23:13, , 14F
04/21 23:13, 14F
→
04/21 23:19, , 15F
04/21 23:19, 15F
→
04/21 23:59, , 16F
04/21 23:59, 16F
→
04/22 00:06, , 17F
04/22 00:06, 17F
先實作DISASM後,確認無誤後,朝向CPU模擬器實作,最後再實作gba的相關功能部分,
想嘗試寫看看gba模擬器,不過我的硬體底層背景很弱,程式倒不是太大問題,
只是缺少相關知識背景,得補很多東西,也許中途就因為缺乏動力放棄掉了也不一定,
純好玩,所以萬不得以不太想靠其他opensources的東西去port,這就跟原來用義不同了.
※ 編輯: erspicu 來自: 61.70.79.227 (04/22 00:30)
→
04/22 12:28, , 18F
04/22 12:28, 18F