基于X86平臺的ARM指令集模擬器的設(shè)計
2.2 ARM指令集模擬器的流程設(shè)計
本模擬器是按照解釋型模擬器的模擬策略設(shè)計的。解釋型指令集模擬器基本上是以軟件實現(xiàn)的虛擬機,它以解釋的形式在宿主機上執(zhí)行加載的目標代碼,它的主體是一個具有3步過程的循環(huán)體,分別對應(yīng)取指令、指令譯碼、指令執(zhí)行3步操作。因此本ARM指令集模擬器的核心流程就是加載程序,之后進入讀取指令、指令譯碼和指令執(zhí)行的循環(huán)體中,當所有目標代碼都執(zhí)行之后結(jié)束并顯示運行結(jié)果。整個流程如圖4指令模擬器的工作流程所示。本文引用地址:http://m.butianyuan.cn/article/201610/306034.htm
2.3 ARM指令集模擬器的主要功能模塊設(shè)計
2.3.1 指令譯碼模塊
指令譯碼模塊的功能就是根據(jù)ARM指令集編碼,將要執(zhí)行的二進制指令譯碼成操作碼、操作數(shù)、條件碼等指令模擬需要的信息。指令集模擬器的每一模擬步模擬一條指令的取指令、譯碼、執(zhí)行等各個階段,因此指令集模擬器中的指令譯碼與實際ARM處理器的譯碼并不是完全對應(yīng),同時也不會影響模擬的正確性。
在指令譯碼模塊中,本文采用分類的思想,將指令集按照一定的規(guī)律進行分類解析,逐步解析,找到最終指令所對應(yīng)的解析函數(shù)。這樣做的目的是為了減少判斷指令時的條件判斷次數(shù),采用分治的思想提高指令譯碼的效率。不過要想對指令譯碼效率有顯著性的提高,還是要采用改進型的工作流程,主要原因是在指令譯碼的過程中,會出現(xiàn)大量的重復(fù)譯碼,所以改進型的工作流程中提出的指令緩存技術(shù)會很好的提高譯碼效率,減少重復(fù)的譯碼工作。
2.3.2 指令模擬與調(diào)度模塊
指令模擬與調(diào)度功能模塊是指令集模擬器的核心部分,也是實現(xiàn)代碼量最大的部分,主要包括與虛擬指令集定義對應(yīng)的一系列指令模擬函數(shù)、指令執(zhí)行控制函數(shù)、指令翻譯調(diào)度函數(shù)、中斷處理函數(shù)以及一些公用函數(shù)。指令執(zhí)行控制函數(shù)負責控制整個模擬過程,反匯編結(jié)果文件加載完畢后,程序就進入核心部分的模擬循環(huán);指令翻譯調(diào)度函數(shù)負責將目標指令轉(zhuǎn)化為虛擬指令形式,然后指令模擬函數(shù)按照相應(yīng)指令的功能定義完成指令的模擬,模擬結(jié)果是修改存儲器、寄存器值:公用函數(shù)主要包括尋址方式判別、指令操作數(shù)分析、指令條件碼判別、移位操作、ALU操作以及寄存器訪問等。指令模擬與調(diào)度的循環(huán)過程如下:
1)取指令
該模擬器的輸入是二進制可執(zhí)行文件,因此取指令時,根據(jù)PC值取得的當前的指令,進行譯碼。
2)翻譯
調(diào)用指令翻譯函數(shù)獲得虛擬指令。
3)調(diào)度
根據(jù)指令類型,調(diào)用相應(yīng)的指令模擬函數(shù)。
4)執(zhí)行
指令模擬函數(shù)對指令進行模擬。
5)中斷檢測與調(diào)度
為了對中斷系統(tǒng)進行模擬,本文定義了對應(yīng)于FIQ、IRQ的標志變量,可以改變他們來模擬外部中斷輸入,每條指令模擬結(jié)束后,必須檢測上述兩個標志,如果檢測到中斷發(fā)生,則調(diào)用相應(yīng)的異常進入函數(shù),PC被設(shè)定為中斷服務(wù)程序入口地址。
6)更新PC值
如果本次循環(huán)沒有發(fā)生指令跳轉(zhuǎn)、加載PC及中斷,PC順序移向下一條指令。
評論