2016年7月12日 星期二

8086 指令解碼

x86 模擬器裝案的進展荒廢許久,最近把顯示卡的部分K一K了解一下,打算重新再來過,反正姑且一試,第一個步驟還是習慣先從CPU本身的核心開始撰寫起,當然16Bit的CPU指令複雜度已經沒像8bit CPU那麼容易了,但我個人覺得比起ARM,x86的8086這顆cpu指令解碼複雜程度相對來說還是簡單許多.

8086這顆cpu的指令已經無法使用拿指令的第一個byte用窮舉法搭配 switch case的方式來做完全的剖析,一定會有重覆的衝突,不過無所謂,只有少數幾個指令需要用第二個byte的 bit 5~3 這三個bits再做一次分析,還是可以用窮舉法,只是某幾個地方需要用到兩層.

最聰明的decode策略應該是完全了解指令的格式規則,然後用樹狀關係圖去分層出解碼的步驟,但這種方法未必會比較快,最笨的窮舉法直接靠table查詢,理論上應該是最快,但就是怕缺漏掉一些項目.

8086 格式
http://aturing.umcs.maine.edu/~meadow/courses/cos335/8086-instformat.pdf

datasheet
http://www.ece.cmu.edu/~ece740/f11/lib/exe/fetch.php?media=wiki:8086-datasheet.pdf

286開始有保護模式,386第一顆32bit cpu,486直接附帶浮點函數計算能力與相關指令,一越新的硬體越複雜,先從簡單開始,至少8086已經可以跑win 3.0了 ( 3.1需要跑在最低286上).

最後不得提醒一下,不要以為官方出版的資料或是規格書之類的東西就100%不會有錯誤,實際上就還是會有可能遇到,而且我在兩分資料中各遇到了兩次....

舉個例子來說


沒有留言:

張貼留言