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