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