基于X86平臺的ARM指令集模擬器的設計
2.4 ARM指令集模擬器的內核設計
模擬器內核結構如圖5所示。本文引用地址:http://www.104case.com/article/201610/306034.htm
2.4.1 內核解碼模塊設計
指令模擬器內核中的解碼模塊包括取指令模型和指令轉換模型兩部分內容,取指令模型介紹了內核程序如何從加載的目標代碼中取出逐條指令,指令轉換模型介紹了取出的逐條指令是如何轉換成中間語言指令來實現的。
1)取指令模型
本文設計的模擬器中取指令模型結構如圖6所示,包括指令計數器、指令格式解析器、指令格式解析器、取指令邏輯控制器和指令地址更新邏輯。指令計數器是處理器都會有的一個寄存器。不同的處理器有不同的表現形式。
2)指令的轉換模型
指令譯碼就是根據ARM指令集編碼,將要執行的指令譯成操作碼、操作數、條件碼等指令仿真需要的信息。譯碼的重點在于獲取不同尋址方式下的操作數,通過分析指令字助記符和指令碼,可以很方便地得到不同尋址方式的操作數。由于本文設計的指令集虛擬模擬ARM的指令集,所以加入指令轉換模型,指令轉換是將一條目標機器指令轉換為一條或幾條中間可執行指令集的過程。轉換工作由指令轉換器完成。其工作模型如圖7所示,一條源指令經過指令譯碼模塊翻譯,生成一系列的中間語言隊列,在本模擬器中,中間語言就是能在X86平臺上運行的匯編語言。
2.4.2 內核指令模擬與調度模塊
指令調度就是把指令字與完成相應操作的功能函數對應起來,使得仿真時取到該指令后能知道該調用哪個執行過程。本文是基于傳統的解釋型仿真策略,其主體是一個大的switch結構,并使用case語句。這種設計模型會影響模擬速度,由于case語句的種類非常多,所以在今后的工作中,這里將會是一個重點的研究對象,可以采用hash結構、壓縮算法或者指令緩存來提高指令譯碼的執行效率,這也將會是模擬器的整體執行效率得到一個很大的提高。
指令模擬執行模塊把指令分類處理并采用數據獲取和數據操作相分離的方法,使得執行函數更具有通用性,當新的指令系統添加時,只需要添加相應的尋址方式和原系統中沒有的指令執行過程,就能完成添加指令集的操作,提高了系統設計的可擴展性。
3 結束語
本文是針對嵌入式開發現階段的主要存在的問題,即傳統低下的開發效率和當下對較短市場開發周期的要求之間的矛盾,提出了ARM指令集模擬器的設計和實現方法。以及對指令集模擬技術的介紹和掌握。目前,與嵌入式系統相關的軟件開發復雜度越來越高,因此指令集模擬器的發展前景十分樂觀。
評論