2017年12月25日 星期一

指令集仿效

指令集仿效(instruction-set emulation)也稱為程式驅動模擬(program-driven simulation),通常是利用主電腦的指令集來執行被模擬的目標電腦(target computer)的指令集。透過軟體模擬處理器抓取(fetch)、解碼(decode)與執行(execute)指令的過程,並應用每一個指令模擬的結果到一個假想的目標電腦上,因此可以用軟體來發展一個尚未建置的硬體架構或維護舊有的軟體(historical software)。指令集仿效通常用來研究使用者階層應用程式的行為,最近的研究則是延伸指令集仿效來研究應用程式在使用者階層與核心階層的行為。

指令集仿效的優點是有彈性、容易移植以及容易使用;缺點是必須先建構出大量的狀態來模擬目標電腦,當目標電腦的指令(target instruction)經由模擬器執行時由於必須轉譯成對等的主電腦指令(host instructions),所以必須使用比原始程式碼(native code)更多的記憶體,也使得執行時變得非常慢。

雖然指令集仿效有執行速度變慢與額外記憶體需求等缺點,但現今微處理器速度的提升與高容量記憶體價格的滑落,已足以應付指令集仿效的需求。而且它不像其他的方法需要昂貴的硬體以及必須限制在有實體機器的條件下才可使用。


上圖以 C++ 語言為例,對 80x86 處理器的運算碼(operation code) 37 (指令 AAA)做指令轉換,可看出微指令描述與經指令轉換後相對應的 C++ 語言程式碼。

以 C++ 語言設計的指令集仿效可以方便的移植到其他硬體平台上,而且可以用來模擬一個尚未建置的系統,或對已存在的系統加入一些系統尚未提供的功能來做設計初期的效能分析。

沒有留言:

張貼留言