本發(fā)明涉及計算機技術以及處理器技術,尤其涉及一種擴充指令的模擬方法和裝置。
背景技術:
在處理器的升級和更新過程中,需要對二進制可執(zhí)行程序中的指令進行擴充,從而形成了擴充指令。在對處理器的指令集中的指令進行擴充之后,需要對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行,模擬執(zhí)行的內容包括了對擴充指令的模擬、對擴充指令的驗證等工作。
現(xiàn)有技術中,在對二進制可執(zhí)行程序的擴充指令進行測試的時候,需要將多條測試代碼或者多條測試指令放置到擴充指令的位置處,然后重新對二進制可執(zhí)行程序的代碼程序進行掃描,重新記錄二進制可執(zhí)行程序的各指令的位置,然后執(zhí)行二進制可執(zhí)行程序的所有指令,進而對擴充指令進行測試。
然而現(xiàn)有技術中,由于多條測試代碼或者多條測試指令被放置到擴充指令的位置處,從而會該改變二進制可執(zhí)行程序中的指令條數(shù)以及地址,從而在對二進制可執(zhí)行程序的各擴充指令進行測試之前,需要先對二進制可執(zhí)行程序的代碼程序進行掃描,再完成對各擴充指令的測試過程,進而增加了對二進制可執(zhí)行程序的擴充指令進行測試的時間,降低了測試的效率。
技術實現(xiàn)要素:
本發(fā)明提供一種擴充指令的模擬方法和裝置,用以解決現(xiàn)有技術中在對二進制可執(zhí)行程序的各擴充指令進行測試之前,需要先對二進制可執(zhí)行程序的代碼程序進行掃描,再完成對各擴充指令的測試過程,進而增加了對二進制可執(zhí)行程序的擴充指令進行測試的時間,降低了測試的效率的問題。
本發(fā)明的一方面是提供一種擴充指令的模擬方法,包括:
根據二進制可執(zhí)行程序中的用戶態(tài)軟中斷指令,確定與擴充指令對應的指令模擬程序的內存位置,其中,所述用戶態(tài)軟中斷指令與二進制可執(zhí)行程序中的擴充指令對應;
根據所述內存位置,調用并執(zhí)行與擴充指令對應的指令模擬程序。
本發(fā)明的另一方面是提供一種擴充指令的模擬裝置,包括:
確定模塊,用于根據二進制可執(zhí)行程序中的用戶態(tài)軟中斷指令,確定與擴充指令對應的指令模擬程序的內存位置,其中,所述用戶態(tài)軟中斷指令與二進制可執(zhí)行程序中的擴充指令對應;
執(zhí)行模塊,用于根據所述內存位置,調用并執(zhí)行與擴充指令對應的指令模擬程序。
本發(fā)明的又一方面是提供一種擴充指令的模擬裝置,包括:
測試子裝置,第一寄存器和第二寄存器,其中,測試子裝置分別與所述第一寄存器和所述第二寄存器連接;
所述測試子裝置包括:指令集模擬器和處理器;
所述指令集模擬器,用于將二進制可執(zhí)行程序中的擴充指令替換為用戶態(tài)軟中斷指令;
所述處理器,用于在根據二進制可執(zhí)行程序的執(zhí)行次序,執(zhí)行至所述用戶態(tài)軟中斷指令時,根據第一寄存器中存儲的指令集模擬器的內存位置,確定所述指令集模擬器,其中,所述指令集模擬器包括與各擴充指令對應的指令模擬程序;
所述指令集模擬器,還用于在確定所述指令集模擬器之后,調取并執(zhí)行與擴充指令對應的指令模擬程序。本發(fā)明通過根據二進制可執(zhí)行程序中的用戶態(tài)軟中斷指令,確定與擴充指令對應的指令模擬程序的內存位置,其中,用戶態(tài)軟中斷指令與二進制可執(zhí)行程序中的擴充指令對應;根據內存位置,調用并執(zhí)行與擴充指令對應的指令模擬程序。從而由于各擴充指令已被替換為與其對應的用戶態(tài)軟中斷指令,而用戶態(tài)軟中斷指令指向了指令集模擬器中的與該擴充指令對應的指令模擬程序,進而不需要改變二進制可執(zhí)行程序中的指令條數(shù),就可以對二進制可執(zhí)行程序進行模擬執(zhí)行,進而不會導致二進制可執(zhí)行程序中的各指令的地址發(fā)生變化,無需對二進制可執(zhí)行程序的代碼程序重新進行掃描,減少了對二進制可執(zhí)行程序中的擴充指令進行模擬執(zhí)行的時間,提高了模擬執(zhí)行的效率。
附圖說明
圖1為本發(fā)明實施例一提供的擴充指令的模擬方法的流程圖;
圖2為本發(fā)明實施例二提供的擴充指令的模擬方法的流程圖;
圖3為本發(fā)明實施例三提供的擴充指令的模擬裝置的結構示意圖;
圖4為本發(fā)明實施例四提供的擴充指令的模擬裝置的結構示意圖;
圖5為本發(fā)明實施例五提供的擴充指令的模擬方法的流程圖;
圖6為本發(fā)明實施例六提供的擴充指令的模擬方法的流程圖;
圖7為本發(fā)明實施例七提供的擴充指令的模擬裝置的結構示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
圖1為本發(fā)明實施例一提供的擴充指令的模擬方法的流程圖,如圖1所示,本實施例的方法包括:
步驟101、根據二進制可執(zhí)行程序中的用戶態(tài)軟中斷指令,確定與擴充指令對應的指令模擬程序的內存位置,其中,用戶態(tài)軟中斷指令與二進制可執(zhí)行程序中的擴充指令對應。
在本實施例中,具體的,在處理器的升級和更新過程中,需要對處理器中的二進制可執(zhí)行程序中的指令進行擴充,處理器中包括了多個二進制可執(zhí)行程序,每一個二進制可執(zhí)行程序中包括了多條指令。將二進制可執(zhí)行程序中的擴充后的指令稱為擴充指令。在對處理器的二進制可執(zhí)行程序中的指令進行擴充之后,需要對二進制可執(zhí)行程序中的擴充指令進行測試。
將處理器的二進制可執(zhí)行程序進行備份之后,由于已經將二進制可執(zhí)行程序中的各擴充指令分別對應了各自的指令模擬程序,且各指令模擬程序并沒有放入到二進制可執(zhí)行程序中,而是將與擴充指令對應的指令模擬程序放入到了內存中,從而與各擴充指令分別一一對應的指令模擬程序是具有內存位置的。此時,由于每一條擴充指令已經被替換為每一條用戶態(tài)軟中斷指令,從而二進制可執(zhí)行程序中的指令條數(shù),以及二進制可執(zhí)行程序的各指令的地址都不會發(fā)生變化。
執(zhí)行處理器的二進制可執(zhí)行程序,由于二進制可執(zhí)行程序本身具有執(zhí)行次序,從而可以根據二進制可執(zhí)行程序的執(zhí)行次序,去執(zhí)行二進制可執(zhí)行程序;在執(zhí)行至二進制可執(zhí)行程序中的一條用戶態(tài)軟中斷指令的時候,由于與各擴充指令分別一一對應的指令模擬程序是具有內存位置的,同時擴充指令、用戶態(tài)軟中斷指令、指令模擬程序中三者是一一對應的,從而可以確定與當前用戶態(tài)軟中斷指令對應的擴充指令的指令模擬程序的內存位置。
舉例來說,一個指令模擬程序的內存位置為0xf010 0000,根據二進制可執(zhí)行程序的執(zhí)行次序執(zhí)行二進制可執(zhí)行程序,在執(zhí)行到用戶態(tài)軟中斷指令時,可以確定指令模擬程序的內存位置0xf010 0000。
步驟102、根據內存位置,調用并執(zhí)行與擴充指令對應的指令模擬程序。
在本實施例中,具體的,根據步驟101中確定出的指令模擬程序的內存位置,可以確定出與當前用戶態(tài)軟中斷指令對應的擴充指令的指令模擬程序,然后調用與擴充指令對應的該指令模擬程序,進而執(zhí)行與擴充指令對應的該指令模擬程序。此時,可以完成對與當前用戶態(tài)軟中斷指令對應的擴充指令的測試。
對于二進制可執(zhí)行程序中的每一條用戶態(tài)軟中斷指令,在根據二進制可執(zhí)行程序的執(zhí)行次序去執(zhí)行二進制可執(zhí)行程序,在執(zhí)行至二進制可執(zhí)行程序中的每一條用戶態(tài)軟中斷指令的時候,都可以采用步驟101、步驟102的方法,完成調用并執(zhí)行與每一條擴充指令對應的指令模擬程序的過程,進而對二進制可執(zhí)行程序中的每一條擴充指令完成測試。
本實施例通過根據二進制可執(zhí)行程序中的用戶態(tài)軟中斷指令,確定與擴充指令對應的指令模擬程序的內存位置,其中,用戶態(tài)軟中斷指令與二進制可執(zhí)行程序中的擴充指令對應;根據內存位置,調用并執(zhí)行與擴充指令對應的指令模擬程序。從而由于各擴充指令已被替換為與其對應的用戶態(tài)軟中斷指令,而用戶態(tài)軟中斷指令指向了指令集模擬器中的與該擴充指令對應的指令模擬程序,進而不需要改變二進制可執(zhí)行程序中的指令條數(shù),就可以對二進制可執(zhí)行程序進行模擬執(zhí)行,進而不會導致二進制可執(zhí)行程序中的各指令的地址發(fā)生變化,無需對二進制可執(zhí)行程序的代碼程序重新進行掃描,減少了對二進制可執(zhí)行程序中的擴充指令進行模擬執(zhí)行的時間,提高了模擬執(zhí)行的效率。
圖2為本發(fā)明實施例二提供的擴充指令的模擬方法的流程圖,在實施例一的基礎上,如圖2所示,本實施例的方法,在步驟101之前,還包括:
步驟201、接收替換指令,替換指令中包括各擴充指令以及與各擴充指令一一對應的用戶態(tài)軟中斷指令;根據替換指令,將各擴充指令分別替換為與各擴充指令一一對應的用戶態(tài)軟中斷指令。
在本實施例中,具體的,在處理器的升級和更新過程中,需要對處理器中的二進制可執(zhí)行程序中的指令進行擴充,處理器中包括了多個二進制可執(zhí)行程序,每一個二進制可執(zhí)行程序中包括了多條指令。將二進制可執(zhí)行程序中的擴充后的指令稱為擴充指令。在對處理器的二進制可執(zhí)行程序中的指令進行擴充之后,需要對二進制可執(zhí)行程序中的擴充指令進行測試。
將處理器的二進制可執(zhí)行程序進行備份之后,首先提供了一個擴充指令集模擬器,在擴充指令集模擬器中存儲了與各擴充指令分別對應的各用戶態(tài)軟中斷指令。接收替換指令,在替換指令中攜帶了各擴充指令以及與各擴充指令一一對應的用戶態(tài)軟中斷指令;然后了根據根據替換指令,將二進制可執(zhí)行程序中的各擴充指令,按照實際需求分別都替換為擴充指令集模擬器中的與各擴充指令分別對應的用戶態(tài)軟中斷指令;此時,由于是一條擴充指令替換為一條用戶態(tài)軟中斷指令,從而二進制可執(zhí)行程序中的指令條數(shù),以及二進制可執(zhí)行程序的各指令的地址都不會發(fā)生變化。
用戶態(tài)軟中斷指令中還包括:第一寄存器標識;相應的,在步驟102之前,還包括:
步驟202、根據用戶態(tài)軟中斷指令,將用戶態(tài)軟中斷指令的程序計數(shù)器PC值存儲至與第一寄存器標識對應的寄存器中;
在步驟102之后,還包括:
步驟203、根據用戶態(tài)軟中斷指令的PC值,確定并模擬執(zhí)行二進制可執(zhí)行程序中與用戶態(tài)軟中斷指令的PC值對應的指令。
在本實施例中,具體的,二進制可執(zhí)行程序中的各指令均具有PC值,PC值是一個16位的計數(shù)器,用于存放和指示下一條需要執(zhí)行的指令的地址。從而二進制可執(zhí)行程序的擴充指令也是具有PC值的,由于將擴充指令替換了用戶態(tài)軟中斷指令,從而擴充指令的PC值就是與其對應的用戶態(tài)軟中斷指令的PC值,用戶態(tài)軟中斷指令的PC值指示了二進制可執(zhí)行程序中下一條需要執(zhí)行的指令的地址。
在步驟101中的用戶態(tài)軟中斷指令中還包括第一寄存器標識,從而在步驟102之前,可以根據用戶態(tài)軟中斷指令,將用戶態(tài)軟中斷指令的PC值存儲至與第一寄存器標識對應的寄存器中。具體來說,在根據二進制可執(zhí)行程序的執(zhí)行次序,執(zhí)行至用戶態(tài)軟中斷指令JumpAndBack時,可以將當前用戶態(tài)軟中斷指令的PC值記錄到寄存器BackReg中。然后,再調取指令集模擬器,指令集模擬器去執(zhí)行與當前擴充指令對應的指令模擬程序,進而對與用戶態(tài)軟中斷指令對應的擴充指令進行模擬執(zhí)行。
從而在步驟102執(zhí)行了與擴充指令對應的指令模擬程序之后,此時已經完成了對二進制可執(zhí)行程序的擴充指令的模擬執(zhí)行;然后根據與第一寄存器標識對應的寄存器中存儲的當前用戶態(tài)軟中斷指令的PC值,確定出二進制可執(zhí)行程序中與該用戶態(tài)軟中斷指令的PC值對應的指令的地址,進而確定出與用戶態(tài)軟中斷指令的PC值對應的指令,然后執(zhí)行與用戶態(tài)軟中斷指令的PC值對應的指令。從而依次執(zhí)行二進制可執(zhí)行程序中的指令,然后按照步驟101-步驟102的過程對二進制可執(zhí)行程序中的下一條擴充指令進行測試。
舉例來說,當前用戶態(tài)軟中斷指令的PC值為0x8010 0004,可以根據該PC值,確定二進制可執(zhí)行程序中與該PC值對應的指令,與該PC值對應的指令為需要執(zhí)行的下一條指令。
在步驟101之前,還包括:
步驟204、接收第一存儲指令,第一存儲指令包括第二寄存器標識;根據第一存儲指令,將具有與各擴充指令對應的指令模擬程序的指令集模擬器存儲至內存中,并確定指令集模擬器在內存中的內存位置之后,將內存位置存儲至與第二寄存器標識對應的寄存器中。
在本實施例中,具體的,可以接收到攜帶了第二寄存器標識的第一存儲指令;進而根據第一存儲指令,將存儲有與各擴充指令對應的指令模擬程序的指令集模擬器,存儲到設備的內存中。然后,需要確定出指令集模擬器在內存中的內存位置,就可以將確定出的內存位置存儲至與第二寄存器標識對應的寄存器中。
然后,在對二進制可執(zhí)行程序中的指令進行擴充之后,需要對二進制可執(zhí)行程序中的各擴充指令進行模擬執(zhí)行之前,首先獲取預先放入內存的指令集模擬器在內存中的內存位置,例如,內存位置為0xf010 0000。然后,將獲取到的指令集模擬器在內存中的內存位置,存儲到寄存器TargetReg中。之后,再掃描二進制可執(zhí)行程序的原代碼,將二進制可執(zhí)行程序中的擴充指令替換為擴充指令集模擬器中的用戶態(tài)軟中斷指令JumpAndBack。
在步驟101之前,還包括:
步驟205、接收第二存儲指令,第二存儲指令包括第三寄存器標識;根據第二存儲指令,將各擴充指令的各指令信息,分別存儲至與第三寄存器標識對應的寄存器中。
在本實施例中,具體的,二進制可執(zhí)行程序中的擴充指令具有PC值、代碼條數(shù)信息、指令格式信息等指令信息。從而在對二進制可執(zhí)行程序中的各擴充指令進行模擬執(zhí)行之前,接收到一個攜帶了第三寄存器標識的第二存儲指令,然后根據第二存儲指令,先將擴充指令的各指令信息,分別一一存儲至與第三寄存器標識對應的寄存器中。將擴充指令的各指令信息進行存儲,從而可以預先保留二進制可執(zhí)行程序的程序執(zhí)行現(xiàn)場。
在步驟102之后,還包括:
步驟206、接收清除指令,清除指令包括第三寄存器標識;根據清除指令,清除與第三寄存器標識對應的寄存器中的各指令信息。
在本實施例中,具體的,完成了對當前擴充指令的模擬執(zhí)行之后,會根據寄存器BackReg中的當前用戶態(tài)軟中斷指令的PC值,尋找到二進制可執(zhí)行程序中的該PC值所指向的指令,然后執(zhí)行該PC值所指向的指令,此時已經徹底完成了對當前擴充指令的模擬執(zhí)行。
然后,接收到一個攜帶了第三寄存器標識的清除指令;然后可以給根據清除指令,可以清除步驟205中的寄存器中所保存的擴充指令的各指令信息,從而恢復二進制可執(zhí)行程序的程序現(xiàn)場。
然后在實施例一的基礎上,可以參照本實施例的各步驟,依次執(zhí)行二進制可執(zhí)行程序中的指令,對二進制可執(zhí)行程序中的下一條擴充指令進行模擬執(zhí)行。
本實施例通過將存儲有與各擴充指令對應的指令模擬程序的指令集模擬器放入到內存中,從而不需要再將指令模擬程序放入到二進制可執(zhí)行程序中,進而不會改變二進制可執(zhí)行程序的指令條數(shù)、以及二進制可執(zhí)行程序的各指令的地址;將用戶態(tài)軟中斷指令的PC值存儲至寄存器中,從而可以依據該PC值尋找到二進制可執(zhí)行程序的需要執(zhí)行的下一條指令,完成二進制可執(zhí)行程序的執(zhí)行和擴充指令的模擬執(zhí)行;將擴充指令中的各指令信息進行存儲,可以有效的存儲二進制可執(zhí)行程序的程序信息。同時,從而由于只需要將擴充指令替換為與其對應的用戶態(tài)軟中斷指令,而用戶態(tài)軟中斷指令指向了指令集模擬器中的與該擴充指令對應的指令模擬程序,進而不需要改變二進制可執(zhí)行程序中的指令條數(shù)以及各指令的地址,就可以對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行,同時,無需對二進制可執(zhí)行程序的代碼程序進行掃描,減少了對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行的時間,提高了模擬執(zhí)行的效率。同時,在對擴充指令模擬執(zhí)行結束之后,可以根據預先存儲的與該用戶態(tài)軟終端指令對應的PC值,根據該PC值跳轉回到二進制可執(zhí)行程序中,進而執(zhí)行二進制可執(zhí)行程序中的與該PC值對應的指令,繼續(xù)進行二進制可執(zhí)行程序的執(zhí)行過程,從而依次執(zhí)行二進制可執(zhí)行程序中的指令;進而在對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行之后,可以根據用戶態(tài)軟中斷指令的PC值跳轉回到二進制可執(zhí)行程序中,繼續(xù)執(zhí)行二進制可執(zhí)行程序的后續(xù)指令,然后對二進制可執(zhí)行程序中的后續(xù)的擴充指令進行模擬執(zhí)行。
圖3為本發(fā)明實施例三提供的擴充指令的模擬裝置的結構示意圖,如圖3所示,本實施例提供的擴充指令的模擬裝置,包括:
確定模塊31,用于根據二進制可執(zhí)行程序中的用戶態(tài)軟中斷指令,確定與擴充指令對應的指令模擬程序的內存位置,其中,用戶態(tài)軟中斷指令與二進制可執(zhí)行程序中的擴充指令對應;
執(zhí)行模塊32,用于根據內存位置,調用并執(zhí)行與擴充指令對應的指令模擬程序。
本實施例的擴充指令的模擬裝置可執(zhí)行本發(fā)明實施例一提供的擴充指令的模擬方法,其實現(xiàn)原理相類似,此處不再贅述。
本實施例通過根據二進制可執(zhí)行程序中的用戶態(tài)軟中斷指令,確定與擴充指令對應的指令模擬程序的內存位置,其中,用戶態(tài)軟中斷指令與二進制可執(zhí)行程序中的擴充指令對應;根據內存位置,調用并執(zhí)行與擴充指令對應的指令模擬程序。從而由于各擴充指令已被替換為與其對應的用戶態(tài)軟中斷指令,而用戶態(tài)軟中斷指令指向了指令集模擬器中的與該擴充指令對應的指令模擬程序,進而不需要改變二進制可執(zhí)行程序中的指令條數(shù),就可以對二進制可執(zhí)行程序進行模擬執(zhí)行,進而不會導致二進制可執(zhí)行程序中的各指令的地址發(fā)生變化,無需對二進制可執(zhí)行程序的代碼程序重新進行掃描,減少了對二進制可執(zhí)行程序中的擴充指令進行模擬執(zhí)行的時間,提高了模擬執(zhí)行的效率。
圖4為本發(fā)明實施例四提供的擴充指令的模擬裝置的結構示意圖,在實施例三的基礎上,如圖4所示,本實施例提供的擴充指令的模擬裝置,還包括:
替換模塊41,用于在確定模塊31根據二進制可執(zhí)行程序中的用戶態(tài)軟中斷指令,確定與擴充指令對應的指令模擬程序的內存位置之前,接收替換指令,替換指令中包括各擴充指令以及與各擴充指令一一對應的用戶態(tài)軟中斷指令;根據替換指令,將各擴充指令分別替換為與各擴充指令一一對應的用戶態(tài)軟中斷指令。
用戶態(tài)軟中斷指令中還包括:第一寄存器標識;擴充指令的模擬裝置,還包括:
第一存儲模塊42,用于在執(zhí)行模塊32根據內存位置,調用并執(zhí)行與擴充指令對應的指令模擬程序之前,根據用戶態(tài)軟中斷指令,將用戶態(tài)軟中斷指令的PC值存儲至與第一寄存器標識對應的寄存器中;
跳轉模塊43,用于在執(zhí)行模塊32根據內存位置,調用并執(zhí)行與擴充指令對應的指令模擬程序之后,根據用戶態(tài)軟中斷指令的PC值,確定并模擬執(zhí)行二進制可執(zhí)行程序中與用戶態(tài)軟中斷指令的PC值對應的指令。
本實施例提供的擴充指令的模擬裝置,還包括:
第二存儲模塊44,用于在確定模塊31根據二進制可執(zhí)行程序中的用戶態(tài)軟中斷指令,確定與擴充指令對應的指令模擬程序的內存位置之前,接收第一存儲指令,第一存儲指令包括第二寄存器標識;根據第一存儲指令,將具有與各擴充指令對應的指令模擬程序的指令集模擬器存儲至內存中,并確定指令集模擬器在內存中的內存位置之后,將內存位置存儲至與第二寄存器標識對應的寄存器中。
第三存儲模塊45,用于在確定模塊31根據二進制可執(zhí)行程序中的用戶態(tài)軟中斷指令,確定與擴充指令對應的指令模擬程序的內存位置之前,接收第二存儲指令,第二存儲指令包括第三寄存器標識;根據第二存儲指令,將各擴充指令的各指令信息,分別存儲至與第三寄存器標識對應的寄存器中。
清除模塊46,用于在執(zhí)行模塊32根據內存位置,調用并執(zhí)行與擴充指令對應的指令模擬程序之后,接收清除指令,清除指令包括第三寄存器標識;根據清除指令,清除與第三寄存器標識對應的寄存器中的各指令信息。
本實施例的擴充指令的模擬裝置可執(zhí)行本發(fā)明實施例二提供的擴充指令的模擬方法,其實現(xiàn)原理相類似,此處不再贅述。
本實施例通過將存儲有與各擴充指令對應的指令模擬程序的指令集模擬器放入到內存中,從而不需要再將指令模擬程序放入到二進制可執(zhí)行程序中,進而不會改變二進制可執(zhí)行程序的指令條數(shù)、以及二進制可執(zhí)行程序的各指令的地址;將用戶態(tài)軟中斷指令的PC值存儲至寄存器中,從而可以依據該PC值尋找到二進制可執(zhí)行程序的需要執(zhí)行的下一條指令,完成二進制可執(zhí)行程序的執(zhí)行和擴充指令的模擬執(zhí)行;將擴充指令中的各指令信息進行存儲,可以有效的存儲二進制可執(zhí)行程序的程序信息。同時,從而由于只需要將擴充指令替換為與其對應的用戶態(tài)軟中斷指令,而用戶態(tài)軟中斷指令指向了指令集模擬器中的與該擴充指令對應的指令模擬程序,進而不需要改變二進制可執(zhí)行程序中的指令條數(shù)以及各指令的地址,就可以對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行,同時,無需對二進制可執(zhí)行程序的代碼程序進行掃描,減少了對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行的時間,提高了模擬執(zhí)行的效率。同時,在對擴充指令模擬執(zhí)行結束之后,可以根據預先存儲的與該用戶態(tài)軟終端指令對應的PC值,根據該PC值跳轉回到二進制可執(zhí)行程序中,進而執(zhí)行二進制可執(zhí)行程序中的與該PC值對應的指令,繼續(xù)進行二進制可執(zhí)行程序的執(zhí)行過程,從而依次執(zhí)行二進制可執(zhí)行程序中的指令;進而在對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行之后,可以根據用戶態(tài)軟中斷指令的PC值跳轉回到二進制可執(zhí)行程序中,繼續(xù)執(zhí)行二進制可執(zhí)行程序的后續(xù)指令,然后對二進制可執(zhí)行程序中的后續(xù)的擴充指令進行模擬執(zhí)行。
圖5為本發(fā)明實施例五提供的擴充指令的模擬方法的流程圖,如圖5所示,本實施例的方法包括:
步驟501、指令集模擬器將二進制可執(zhí)行程序中的擴充指令替換為用戶態(tài)軟中斷指令。
在本實施例中,具體的,在處理器的升級和更新過程中,需要對處理器中的二進制可執(zhí)行程序中的指令進行擴充,處理器中包括了多個二進制可執(zhí)行程序,每一個二進制可執(zhí)行程序中包括了多條指令。將二進制可執(zhí)行程序中的擴充后的指令稱為擴充指令。在對處理器的二進制可執(zhí)行程序中的指令進行擴充之后,需要對二進制可執(zhí)行程序中的擴充指令進行測試。
將處理器的二進制可執(zhí)行程序進行備份之后,首先提供了一個擴充指令集模擬器,在擴充指令集模擬器中存儲了與各擴充指令分別對應的各用戶態(tài)軟中斷指令。將二進制可執(zhí)行程序中的各擴充指令,按照實際需求分別都替換為擴充指令集模擬器中的與各擴充指令分別對應的用戶態(tài)軟中斷指令;此時,由于是一條擴充指令替換為一條用戶態(tài)軟中斷指令,從而二進制可執(zhí)行程序中的指令條數(shù),以及二進制可執(zhí)行程序的各指令的地址都不會發(fā)生變化。
步驟502、在根據二進制可執(zhí)行程序的執(zhí)行次序,執(zhí)行至用戶態(tài)軟中斷指令時,處理器根據第一寄存器中存儲的指令集模擬器的內存位置,確定指令集模擬器,其中,指令集模擬器包括與各擴充指令對應的指令模擬程序。
在本實施例中,具體的,已經預先將指令集模擬器存儲在了設備的內存中,將指令集模擬器的內存位置存儲至了設備的第一寄存器中;在指令集模擬器中存儲了與各個擴充指令對應的指令模擬程序;針對每一個指令模擬程序來說,指令測試程序是對與其對應的擴充指令進行測試的代碼的集合。
執(zhí)行處理器的二進制可執(zhí)行程序,由于二進制可執(zhí)行程序本身具有執(zhí)行次序,從而可以根據二進制可執(zhí)行程序的執(zhí)行次序,去執(zhí)行二進制可執(zhí)行程序,可以根據第一寄存器中預先存儲的指令集模擬器的內存位置,確定指令集模擬器的位置,進而調取指令集模擬器。
舉例來說,指令集模擬器的內存位置為0xf010 0000,根據二進制可執(zhí)行程序的執(zhí)行次序執(zhí)行二進制可執(zhí)行程序,在執(zhí)行到用戶態(tài)軟中斷指令時,根據指令集模擬器的內存位置0xf010 0000,調取出存儲有與各擴充指令對應的指令模擬程序的指令集模擬器。
步驟503、指令集模擬器調取并執(zhí)行與擴充指令對應的指令模擬程序。
在本實施例中,具體的,根據步驟502中確定出的指令集模擬器以及當前的用戶態(tài)軟中斷指令,由于用戶態(tài)軟中斷指令是與擴充指令對應的,進而指令集模擬器調取出指令集模擬器中與該擴充指令對應的指令模擬程序。然后,指令集模擬器執(zhí)行指令集模擬器中的與擴充指令對應的指令模擬程序,進而指令集模擬器完成指令模擬,即完成擴充指令的測試。
本實施例提供了一種新的擴充指令的模擬方法,在對二進制可執(zhí)行程序中的指令進行擴充之后,擴充之后的指令形成了各擴充指令,此時需要對各擴充指令進行測試;在對擴充指令進行測試的時候,只需要將擴充指令替換為與擴充指令對應的用戶態(tài)軟中斷指令,而用戶態(tài)軟中斷指令指向了指令集模擬器中與該擴充指令對應的指令模擬程序,可以執(zhí)行該指令模擬程序,進而二進制可執(zhí)行程序中的擴充指令進行了模擬執(zhí)行;然后按照本實施例的方法對二進制可執(zhí)行程序中的下一條擴充指令進行模擬執(zhí)行。從而由于只需要將各擴充指令替換為與其對應的用戶態(tài)軟中斷指令,而用戶態(tài)軟中斷指令指向了指令集模擬器中的與該擴充指令對應的指令模擬程序,進而不需要改變二進制可執(zhí)行程序中的指令條數(shù),就可以對二進制可執(zhí)行程序進行模擬執(zhí)行,進而不會導致二進制可執(zhí)行程序中的各指令的地址發(fā)生變化,無需對二進制可執(zhí)行程序的代碼程序重新進行掃描,減少了對二進制可執(zhí)行程序中的擴充指令進行模擬執(zhí)行的時間,提高了模擬執(zhí)行的效率。
圖6為本發(fā)明實施例六提供的擴充指令的模擬方法的流程圖,如圖6所示,在實施例五的基礎上,在步驟503之后,還包括:
步驟504、指令集模擬器根據第二寄存器中存儲的用戶態(tài)軟中斷指令的PC值,確定并模擬執(zhí)行二進制可執(zhí)行程序中與用戶態(tài)軟中斷指令的PC值對應的指令。
在本實施例中,具體的,二進制可執(zhí)行程序中的各指令均具有PC值,PC值是一個16位的計數(shù)器,用于存放和指示下一條需要執(zhí)行的指令的地址。從而二進制可執(zhí)行程序的擴充指令也是具有PC值的,由于將擴充指令替換了用戶態(tài)軟中斷指令,從而擴充指令的PC值就是與其對應的用戶態(tài)軟中斷指令的PC值,用戶態(tài)軟中斷指令的PC值指示了二進制可執(zhí)行程序中下一條需要執(zhí)行的指令的地址??梢詫⒏饔脩魬B(tài)軟中斷指令的PC值存儲在第二寄存器中。
在步驟503執(zhí)行了與擴充指令對應的指令模擬程序之后,此時已經完成了對二進制可執(zhí)行程序的擴充指令的模擬執(zhí)行;然后根據第二寄存器中存儲的當前用戶態(tài)軟中斷指令的PC值,確定出二進制可執(zhí)行程序中與該用戶態(tài)軟中斷指令的PC值對應的指令的地址,進而確定出與用戶態(tài)軟中斷指令的PC值對應的指令,然后執(zhí)行與用戶態(tài)軟中斷指令的PC值對應的指令。從而依次執(zhí)行二進制可執(zhí)行程序中的指令,然后按照步驟501-步驟504的過程對二級制可執(zhí)行程序中的下一條擴充指令進行測試。
舉例來說,當前用戶態(tài)軟中斷指令的PC值為0x8010 0004,可以根據該PC值,確定二進制可執(zhí)行程序中與該PC值對應的指令,與該PC值對應的指令為需要執(zhí)行的下一條指令。
在步驟501之前,還包括:
步驟601、處理器將指令集模擬器存儲至內存中;處理器獲取指令集模擬器在內存中的內存位置,將內存位置存儲至第一寄存器中。
在本實施例中,具體的,處理器將存儲有與各擴充指令對應的指令模擬程序的指令集模擬器,存儲到設備的內存中。
在對二進制可執(zhí)行程序中的指令進行擴充之后,需要對二進制可執(zhí)行程序中的各擴充指令進行模擬執(zhí)行之前,首先獲取預先放入內存的指令集模擬器在內存中的內存位置,例如,內存位置為0xf010 0000。然后,將獲取到的指令集模擬器在內存中的內存位置,存儲到第一寄存器TargetReg中。之后,再掃描二進制可執(zhí)行程序的原代碼,將二進制可執(zhí)行程序中的擴充指令替換為擴充指令集模擬器中的用戶態(tài)軟中斷指令JumpAndBack。
在步驟501之前,還包括:
步驟602、處理器將擴充指令的各指令信息,分別存儲至與第一寄存器、第二寄存器不同的寄存器中。
在本實施例中,具體的,二進制可執(zhí)行程序中的擴充指令具有PC值、代碼條數(shù)信息、指令格式信息等指令信息。在對二進制可執(zhí)行程序中的各擴充指令進行模擬執(zhí)行之前,先將擴充指令的各指令信息,分別一一存儲至不同的寄存器中,這里的寄存器并不是第一寄存器和第二寄存器。將擴充指令的各指令信息進行存儲,從而可以預先保留二進制可執(zhí)行程序的程序執(zhí)行現(xiàn)場。
在步驟502之前,還包括:
步驟603、處理器確定用戶態(tài)軟中斷指令的PC值,將用戶態(tài)軟中斷指令的PC值存儲至第二寄存器中。
在本實施例中,具體的,在根據二進制可執(zhí)行程序的執(zhí)行次序,執(zhí)行至用戶態(tài)軟中斷指令JumpAndBack時,處理器可以將當前用戶態(tài)軟中斷指令的PC值記錄到第二寄存器BackReg中。然后,再調取指令集模擬器,指令集模擬器去執(zhí)行與當前擴充指令對應的指令模擬程序,進而對與用戶態(tài)軟中斷指令對應的擴充指令進行模擬執(zhí)行。
在步驟504之后,還包括:
步驟604、處理器清除與第一寄存器、第二寄存器不同的寄存器中存儲的各指令信息。
在本實施例中,具體的,完成了對當前擴充指令的模擬執(zhí)行之后,會根據第二寄存器BackReg中的當前用戶態(tài)軟中斷指令的PC值,尋找到二進制可執(zhí)行程序中的該PC值所指向的指令,然后執(zhí)行該PC值所指向的指令,此時已經徹底完成了對當前擴充指令的模擬執(zhí)行。然后,可以清除步驟602中的不同于第一寄存器、第二寄存器的各寄存器中所保存的擴充指令的各指令信息,從而恢復二進制可執(zhí)行程序的程序現(xiàn)場。然后在實施例一的基礎上,可以參照本實施例的步驟603、步驟603、步驟604,依次執(zhí)行二進制可執(zhí)行程序中的指令,對二進制可執(zhí)行程序中的下一條擴充指令進行模擬執(zhí)行。
本實施例通過將存儲有與各擴充指令對應的指令模擬程序的指令集模擬器放入到內存中,從而不需要再將指令模擬程序放入到二進制可執(zhí)行程序中,進而不會改變二進制可執(zhí)行程序的指令條數(shù)、以及二進制可執(zhí)行程序的各指令的地址;將用戶態(tài)軟中斷指令的PC值存儲至第二寄存器中,從而可以依據該PC值尋找到二進制可執(zhí)行程序的需要執(zhí)行的下一條指令,完成二進制可執(zhí)行程序的執(zhí)行和擴充指令的模擬執(zhí)行;將擴充指令中的各指令信息進行存儲,可以有效的存儲二進制可執(zhí)行程序的程序信息。同時,從而由于只需要將擴充指令替換為與其對應的用戶態(tài)軟中斷指令,而用戶態(tài)軟中斷指令指向了指令集模擬器中的與該擴充指令對應的指令模擬程序,進而不需要改變二進制可執(zhí)行程序中的指令條數(shù)以及各指令的地址,就可以對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行,同時,無需對二進制可執(zhí)行程序的代碼程序進行掃描,減少了對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行的時間,提高了模擬執(zhí)行的效率。同時,在對擴充指令模擬執(zhí)行結束之后,可以根據預先存儲的與該用戶態(tài)軟終端指令對應的PC值,根據該PC值跳轉回到二進制可執(zhí)行程序中,進而執(zhí)行二進制可執(zhí)行程序中的與該PC值對應的指令,繼續(xù)進行二進制可執(zhí)行程序的執(zhí)行過程,從而依次執(zhí)行二進制可執(zhí)行程序中的指令;進而在對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行之后,可以根據用戶態(tài)軟中斷指令的PC值跳轉回到二進制可執(zhí)行程序中,繼續(xù)執(zhí)行二進制可執(zhí)行程序的后續(xù)指令,然后對二進制可執(zhí)行程序中的后續(xù)的擴充指令進行模擬執(zhí)行。
圖7為本發(fā)明實施例七提供的擴充指令的模擬裝置的結構示意圖,如圖7所示,本實施例提供的擴充指令的模擬裝置,包括:
測試子裝置1,第一寄存器2和第二寄存器3,其中,測試子裝置1分別與第一寄存器2和第二寄存器3連接;
測試子裝置1包括:指令集模擬器11和處理器12;
指令集模擬器11,用于將二進制可執(zhí)行程序中的擴充指令替換為用戶態(tài)軟中斷指令;并在根據二進制可執(zhí)行程序的執(zhí)行次序,執(zhí)行至用戶態(tài)軟中斷指令時,處理器12根據第一寄存器2中存儲的指令集模擬器11的內存位置,確定指令集模擬器11之后,其中,指令集模擬器11包括與各擴充指令對應的指令模擬程序,調取并執(zhí)行與擴充指令對應的指令模擬程序。
進一步的,指令集模擬器11,還用于:
在指令集模擬器11調取并執(zhí)行與擴充指令對應的指令模擬程序之后,根據第二寄存器3中存儲的用戶態(tài)軟中斷指令的PC值,確定并模擬執(zhí)行二進制可執(zhí)行程序中與用戶態(tài)軟中斷指令的PC值對應的指令。
處理器12,還用于:
在處理器12根據第一寄存器2中存儲的指令集模擬器11的內存位置,確定指令集模擬器11之前,確定用戶態(tài)軟中斷指令的PC值,將用戶態(tài)軟中斷指令的PC值存儲至第二寄存器3中。
處理器12,還用于:
在指令集模擬器11將二進制可執(zhí)行程序中的擴充指令替換為用戶態(tài)軟中斷指令之前,將指令集模擬器11存儲至內存中,獲取指令集模擬器11在內存中的內存位置,將內存位置存儲至第一寄存器2中。
處理器12,還用于:
在指令集模擬器11將二進制可執(zhí)行程序中的擴充指令替換為用戶態(tài)軟中斷指令之前,將擴充指令的各指令信息,分別存儲至與第一寄存器2、第二寄存器3不同的寄存器中。
處理器12,還用于:
在指令集模擬器11根據第二寄存器3中存儲的用戶態(tài)軟中斷指令的PC值,確定并模擬執(zhí)行二進制可執(zhí)行程序中與用戶態(tài)軟中斷指令的PC值對應的擴充指令之后,清除與第一寄存器2、第二寄存器3不同的寄存器中存儲的各指令信息。
本實施例的擴充指令的模擬裝置可執(zhí)行本發(fā)明實施例五和實施例六提供的擴充指令的模擬方法,其實現(xiàn)原理相類似,此處不再贅述。
本實施例通過將存儲有與各擴充指令對應的指令模擬程序的指令集模擬器放入到內存中,從而不需要再將指令模擬程序放入到二進制可執(zhí)行程序中,進而不會改變二進制可執(zhí)行程序的指令條數(shù)、以及二進制可執(zhí)行程序的各指令的地址;將用戶態(tài)軟中斷指令的PC值存儲至第二寄存器中,從而可以依據該PC值尋找到二進制可執(zhí)行程序的需要執(zhí)行的下一條指令,完成二進制可執(zhí)行程序的執(zhí)行和擴充指令的模擬執(zhí)行;將擴充指令中的各指令信息進行存儲,可以有效的存儲二進制可執(zhí)行程序的程序信息。同時,從而由于只需要將擴充指令替換為與其對應的用戶態(tài)軟中斷指令,而用戶態(tài)軟中斷指令指向了指令集模擬器中的與該擴充指令對應的指令模擬程序,進而不需要改變二進制可執(zhí)行程序中的指令條數(shù)以及各指令的地址,就可以對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行,同時,無需對二進制可執(zhí)行程序的代碼程序進行掃描,減少了對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行的時間,提高了模擬執(zhí)行的效率。同時,在對擴充指令模擬執(zhí)行結束之后,可以根據預先存儲的與該用戶態(tài)軟終端指令對應的PC值,根據該PC值跳轉回到二進制可執(zhí)行程序中,進而執(zhí)行二進制可執(zhí)行程序中的與該PC值對應的指令,繼續(xù)進行二進制可執(zhí)行程序的執(zhí)行過程,從而依次執(zhí)行二進制可執(zhí)行程序中的指令;進而在對二進制可執(zhí)行程序的擴充指令進行模擬執(zhí)行之后,可以根據用戶態(tài)軟中斷指令的PC值跳轉回到二進制可執(zhí)行程序中,繼續(xù)執(zhí)行二進制可執(zhí)行程序的后續(xù)指令,然后對二進制可執(zhí)行程序中的后續(xù)的擴充指令進行模擬執(zhí)行。
本領域普通技術人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質。
最后應說明的是:以上實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的精神和范圍。