一種模擬微處理器指令的方法及裝置的制造方法
【專利摘要】本發(fā)明公開了一種模擬微處理器指令的方法及裝置,方法包括如下步驟:識別計算設(shè)備中的第一軟件應(yīng)用程序指令;第一軟件應(yīng)用程序指令采用一個模擬某類微處理器指令的第二軟件應(yīng)用程序,所述第一軟件應(yīng)用程序包括指令前綴;在計算設(shè)備中,向一段用于創(chuàng)建基于指令前綴的擴(kuò)展操作碼的操作碼上添加第一附加位,用以表示在第二軟件應(yīng)用程序中建立一個擴(kuò)展操作碼表;在計算設(shè)備中模擬使用了第二軟件應(yīng)用程序和擴(kuò)展操作碼的指令的執(zhí)行。實施本發(fā)明的模擬微處理器指令的方法及裝置,具有以下有益效果:允許軟件應(yīng)用程序使用不同類型的微處理器在電子設(shè)備上運行、電子設(shè)備在仿真環(huán)境中運行具有潛在問題的代碼時不會危及或感染電子設(shè)備的硬件。
【專利說明】
一種模擬微處理器指令的方法及裝置
技術(shù)領(lǐng)域
[0001] 本發(fā)明涉及計算機(jī)領(lǐng)域,特別涉及一種模擬微處理器指令的方法及裝置。
【背景技術(shù)】
[0002] 近年來電子設(shè)備和軟件應(yīng)用的使用顯著增長,各種不同類型的電子裝置都被使 用,但對特定類型的電子設(shè)備所編寫的軟件應(yīng)用程序并不總是與其他電子設(shè)備相兼容。例 如,一個軟件應(yīng)用可以被寫入一段與之相兼容的指令,然后放入特定類型的微處理器中,其 不允許該軟件應(yīng)用程序使用不同類型的微處理器在電子設(shè)備上運行。此外,軟件應(yīng)用程序 有時會有錯誤代碼,如編碼錯誤("bugs"),或惡意代碼,如病毒等,這將會危及或感染電子 設(shè)備的硬件。
[0003] 基于存在如此眾多不同類型的電子設(shè)備與存在潛在問題的軟件應(yīng)用程序,將一個 軟件應(yīng)用與另一個軟件應(yīng)用相結(jié)合用在特定微處理器上模擬指令是一種理想狀態(tài),例如, 擁有第一類型微處理器的電子設(shè)備可以運行一個用于模擬第二類型微處理器的指令。但現(xiàn) 有技術(shù)還未實現(xiàn)這種理想狀態(tài)。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有技術(shù)的上述不允許軟件應(yīng)用程序使用不 同類型的微處理器在電子設(shè)備上運行、具有潛在問題的代碼會危及或感染電子設(shè)備的硬件 的缺陷,提供一種允許軟件應(yīng)用程序使用不同類型的微處理器在電子設(shè)備上運行、電子設(shè) 備在仿真環(huán)境中運行具有潛在問題的代碼時不會危及或感染電子設(shè)備的硬件的模擬微處 理器指令的方法及裝置。
[0005] 本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:構(gòu)造一種模擬微處理器指令的方 法,包括如下步驟:
[0006] A)識別計算設(shè)備中的第一軟件應(yīng)用程序指令;所述第一軟件應(yīng)用程序指令采用一 個模擬某類微處理器指令的第二軟件應(yīng)用程序,所述第一軟件應(yīng)用程序指令包括一個指令 如綴;
[0007] B)在所述計算設(shè)備中,向一段用于創(chuàng)建基于指令前綴的擴(kuò)展操作碼的操作碼上添 加第一附加位,用以表示在所述第二軟件應(yīng)用程序中建立一個擴(kuò)展操作碼表;
[0008] C)在所述計算設(shè)備中模擬使用了所述第二軟件應(yīng)用程序和擴(kuò)展操作碼的指令的 執(zhí)行。
[0009] 在本發(fā)明所述的模擬微處理器指令的方法中,在所述步驟B)和C)之間還包括如下 步驟:
[0010] B1)在所述計算設(shè)備中,向一段用于創(chuàng)建擴(kuò)展操作碼的指令的操作碼添加第二附 加位,用以表示所述第二軟件應(yīng)用程序的操作碼表。
[0011] 在本發(fā)明所述的模擬微處理器指令的方法中,所述指令前綴表示指令操作數(shù)的大 小或指令地址的尺寸;所述指令操作數(shù)的大小為16位或32位的大小,所述指令地址的尺寸 具有16位或32位的大小。
[0012]在本發(fā)明所述的模擬微處理器指令的方法中,所述操作碼表包括至少256個操作 碼。
[0013]在本發(fā)明所述的模擬微處理器指令的方法中,所述操作碼的長度是一個字節(jié),所 述擴(kuò)展操作碼的長度至少為9位。
[0014]本發(fā)明還涉及一種實現(xiàn)上述模擬微處理器指令的方法的裝置,包括:
[0015] 識別模塊:用于識別計算設(shè)備中的第一軟件應(yīng)用程序指令;所述第一軟件應(yīng)用程 序指令采用一個模擬某類微處理器指令的第二軟件應(yīng)用程序,所述第一軟件應(yīng)用程序指令 包括一個指令前綴;
[0016] 第一附加位添加模塊:用于在所述計算設(shè)備中,向一段用于創(chuàng)建基于指令前綴的 擴(kuò)展操作碼的操作碼上添加第一附加位,用以表示在所述第二軟件應(yīng)用程序中建立一個擴(kuò) 展操作碼表;
[0017] 模擬模塊:用于在所述計算設(shè)備中模擬使用了所述第二軟件應(yīng)用程序和擴(kuò)展操作 碼的指令的執(zhí)行。
[0018] 在本發(fā)明所述的裝置中,還包括:
[0019] 第二附加位添加模塊:用于在所述計算設(shè)備中,向一段用于創(chuàng)建擴(kuò)展操作碼的指 令的操作碼添加第二附加位,用以表示所述第二軟件應(yīng)用程序的操作碼表。
[0020] 在本發(fā)明所述的裝置中,所述指令前綴表示指令操作數(shù)的大小或指令地址的尺 寸;所述指令操作數(shù)的大小為16位或32位的大小,所述指令地址的尺寸具有16位或32位的 大小。
[0021] 在本發(fā)明所述的裝置中,所述操作碼表包括至少256個操作碼。
[0022]在本發(fā)明所述的裝置中,所述操作碼的長度是一個字節(jié),所述擴(kuò)展操作碼的長度 至少為9位。
[0023]實施本發(fā)明的模擬微處理器指令的方法及裝置,具有以下有益效果:由于第一軟 件應(yīng)用程序指令采用一個模擬某類微處理器指令的第二軟件應(yīng)用程序,在操作碼上添加第 一附加位來創(chuàng)建一個表示操作狀態(tài)的擴(kuò)展操作碼,用以表示在第二軟件應(yīng)用程序中建立一 個擴(kuò)展操作碼表,在計算設(shè)備中模擬使用了第二軟件應(yīng)用程序和擴(kuò)展操作碼的指令的執(zhí) 行,這樣就允許軟件應(yīng)用程序使用不同類型的微處理器在電子設(shè)備上運行、電子設(shè)備在仿 真環(huán)境中運行具有潛在問題的代碼時不會危及或感染電子設(shè)備的硬件。
【附圖說明】
[0024] 為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn) 有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本 發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可 以根據(jù)這些附圖獲得其他的附圖。
[0025] 圖1為本發(fā)明模擬微處理器指令的方法及裝置一個實施例中的方法的流程圖; [0026]圖2為所述實施例中一個微處理器指令的格式示意圖;
[0027] 圖3為所述實施例中服務(wù)器和客戶端之間的連接示意圖;
[0028] 圖4為所述實施例中一段擴(kuò)展操作碼的示意圖;
[0029] 圖5為所述實施例中一個具有10比特的擴(kuò)展操作碼組成的擴(kuò)展操作碼表;
[0030] 圖6為所述實施例中裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0031] 下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;?本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他 實施例,都屬于本發(fā)明保護(hù)的范圍。
[0032] 在本發(fā)明模擬微處理器指令的方法及裝置實施例中,其模擬微處理器指令的方法 的流程圖如圖1所示。圖1中,該模擬微處理器指令的方法包括如下步驟:
[0033] 步驟S01識別計算設(shè)備中的第一軟件應(yīng)用程序指令:本步驟中,識別計算設(shè)備中的 第一軟件應(yīng)用程序指令,該第一軟件應(yīng)用程序指令采用一個模擬某類微處理器指令的第二 軟件應(yīng)用程序,也就是該第一軟件應(yīng)用程序用于模擬第二軟件應(yīng)用程序的某種類型的微處 理器指令,該第一軟件應(yīng)用程序指令包括一個指令前綴。
[0034] 本實施例中,使用永久性計算機(jī)可讀介質(zhì)來存儲指令。永久性計算機(jī)可讀介質(zhì)是 指任何類型的存儲計算處理器信息或可讀數(shù)據(jù)的物理存儲器。其包括隨機(jī)存取存儲器 (RAM)、只讀存儲器(ROM)、易失性存儲器、非易失性存儲器、硬盤驅(qū)動器、光盤ROM(⑶ROM)、 數(shù)字多功能盤(DVD )、閃存驅(qū)動器、磁條存儲、半導(dǎo)體存儲、光盤存儲、磁光盤存儲或任何其 它已知的物理存儲介質(zhì)。
[0035] 步驟S02在計算設(shè)備中,向一段用于創(chuàng)建基于指令前綴的擴(kuò)展操作碼的操作碼上 添加第一附加位,用以表示在第二軟件應(yīng)用程序中建立一個擴(kuò)展操作碼表:本步驟中,在計 算設(shè)備中,向一段用于創(chuàng)建基于指令前綴的擴(kuò)展操作碼的操作碼上添加一個第一附加位, 該擴(kuò)展操作碼包括該第一附加位,表示在第二軟件應(yīng)用程序中建立一個擴(kuò)展操作碼表。 [0036]本實施例中,微處理器可以是一個多用途可編程的計算機(jī)處理器,接受數(shù)字化數(shù) 據(jù)作為輸入,根據(jù)存儲在其存儲器中的機(jī)器指令進(jìn)行處理,并提供結(jié)果作為輸出。不同類型 的微處理器可能使用不同的指令格式,圖2為本實施例中一個微處理器指令的格式示意圖; 例如英特爾IA-32架構(gòu)的微處理器。圖2中的指令格式可以包括一個指令前綴部分、一個操 作碼(也稱為"opcode")部分、一個ModR/M部分、一個SIB部分、一個位移部分或/和即時部 分。一個指令的每一部分可通過數(shù)據(jù)中的一個或多個比特(bit)來表示。在本實施例的一些 情況下,一個或多個上述組成部分可以通過數(shù)據(jù)的一個或多個字節(jié)進(jìn)行表示。
[0037] 本實施例中,指令前綴可用來改變一個機(jī)器指令的含義。指令前綴可用來表示指 令操作數(shù)的大小或指令地址的尺寸;值得一提的是,指令操作數(shù)的大小為16位或32位的大 小,所述指令地址的尺寸具有16位或32位的大小。如果一個操作數(shù)覆蓋指令前綴部分,則軟 件應(yīng)用程序就可以使用16位和32位的操作數(shù)進(jìn)行切換,如果一個地址大小覆蓋指令前綴部 分,則軟件應(yīng)用程序就可以在16位和32位地址大小之間進(jìn)行切換。
[0038] 本實施例中,操作碼部分可以指定一個或多個操作碼,其中每個操作碼可指定一 個或多個由微處理器執(zhí)行的操作。例如,一個字節(jié)大小的操作碼可以表示多達(dá)28個或256個 不同的操作碼,其中每個操作碼可以指定由微處理器執(zhí)行的一個或多個操作。表一是操作 碼表,〇p表示操作碼,表一中表示了256個不同的操作碼。本實施例中,上述操作碼的長度是 一個字節(jié),擴(kuò)展操作碼的長度至少為9位。
[0039]表一
[0042]表一中,在一個字節(jié)中各個比特的唯一集合表示在該單元中的一個獨特操作碼, 如單元205中的操作碼為0。每個唯一的比特組合以十六進(jìn)制格式表示,表一中的每一行和 列分別表示最為數(shù)字的十六進(jìn)制數(shù)(例如,十六進(jìn)制0F對應(yīng)于操作碼15)。
[0043]值得一提的是,本實施例中,操作碼表可以包括至少256個操作碼。例如:包括1024 個操作碼。一些微處理器的架構(gòu)(如英特爾IA-32架構(gòu))可以支持一個字節(jié)、兩個字節(jié)或三個 字節(jié)長的操作碼。英特爾IA-32架構(gòu)的操作碼15(或十六進(jìn)制0F)可以操作作為轉(zhuǎn)義的兩個 字節(jié)的操作碼格式。兩個字節(jié)的操作碼可對應(yīng)于具有256個操作碼的操作碼表。例如,十六 進(jìn)制中,每兩個字節(jié)的操作碼可以引用第一參考操作碼15(或十六進(jìn)制0F),然后參照在該 兩個字節(jié)的操作碼表中的操作代碼(即操作碼)。可以引用兩個字節(jié)的操作碼表中的操作碼 03 (十六進(jìn)制),該指令可以包括操作碼0F 03。同樣地,一個附加的256操作碼表可與三個字 節(jié)的數(shù)據(jù)組合進(jìn)行引用(例如,在參考三個字節(jié)的操作碼表的單個操作碼中的一個附加字 節(jié)之后,其中兩個字節(jié)應(yīng)被引用)。
[0044]本實施例中,某些指令可表示存儲器中的操作數(shù)具有一個尋址形式說明部分,這 部分稱為ModR/M部分。ModR/M部分可以包含三個字段的信息,第一個是包含r/m的字段,形 成32個可能的值,包括八個寄存器和24個尋址模式,第二個是reg/操作碼字段,用于指定任 一寄存器號或操作碼信息的更多比特,第三個是r/m字段,指定一個寄存器作為操作數(shù)或 與字段的尋址模式組合進(jìn)行編碼。ModR/M部分的某些編碼可能需要一個第二尋址部分(即 SIB部分)。一些尋址形式也包括一個位移部分。某些指令也可以指定一個即時部分。
[0045] 微處理器指令可能具有稍微不同的含義,這取決于指令中各個部分的值。在模擬 微處理器指令的仿真軟件中,仿真軟件通過設(shè)置變量的狀態(tài),然后評估一系列條件語句,如 if-then語句,基于設(shè)定的狀態(tài)變量以確定哪個編碼分支在該段代碼之后將被執(zhí)行。例如, 仿真軟件可以確定一個變量的存儲狀態(tài),該存儲狀態(tài)表示在模擬指令的ModR/M部分之前, 模擬一個16位或32位尋址模式。同樣,仿真軟件也可以確定是否需要一個變量的另一個存 儲狀態(tài),其表示在模擬指令的某些部分之前,模擬一個16位或32位操作數(shù)模式。然而,評估 所有這些條件語句會減慢仿真軟件的運行速度,可能會導(dǎo)致仿真軟件執(zhí)行軟件應(yīng)用程序的 速度緩慢。
[0046] 在仿真軟件代碼(模擬軟件代碼)中可以使用更少的條件語句或分支模擬微處理 器指令。在本實施例的一些情況下,仿真軟件可以提供表示擴(kuò)展操作碼的一個或多個擴(kuò)展 操作碼表。擴(kuò)展操作碼可以是操作碼,將一個或多個比特添加到其中,表示各種編程狀態(tài), 例如:尋址狀態(tài)或表示操作數(shù)大小的狀態(tài)。仿真軟件可以在一個或多個軟件應(yīng)用程序的操 作碼中添加一個比特,用于模擬具有尋址模式的擴(kuò)展操作碼,而不必識別仿真軟件在讀取 一個指令之前模擬一個16位或32位的尋址模式的行為。此擴(kuò)展操作碼作為擴(kuò)展操作碼表中 的參考,其操作可以寫入到擴(kuò)展操作碼的特定尋址模式狀態(tài)中。因此,在仿真軟件代碼中的 條件語句和分支的數(shù)量可以減少,從而提高仿真軟件的性能。
[0047] 步驟S03在計算設(shè)備中模擬使用了第二軟件應(yīng)用程序和擴(kuò)展操作碼的指令的執(zhí) 行:本步驟中,在計算設(shè)備中模擬使用了第二軟件應(yīng)用程序和擴(kuò)展操作碼的指令的執(zhí)行。這 樣就模擬了微處理器指令,同時還實現(xiàn)了在操作碼上添加一個第一附加位來創(chuàng)建一個表示 操作狀態(tài)的擴(kuò)展操作碼,并利用一個擴(kuò)展操作碼表標(biāo)志擴(kuò)展操作碼。
[0048] 本實施例中,在進(jìn)行模擬(仿真)時,所使用的仿真設(shè)備可以是硬件或軟件,該仿真 設(shè)備用于啟動第一計算設(shè)備,模仿第二計算設(shè)備;可以使第一計算設(shè)備運行為第二計算設(shè) 備設(shè)計的軟件;也可以通過模擬由第二計算設(shè)備中使用的微處理器指令完成以上工作。例 如,計算設(shè)備上的仿真設(shè)備可以遵循軟件應(yīng)用程序的執(zhí)行流程,對遇到的每一個機(jī)器代碼 指令,可以在計算設(shè)備上執(zhí)行操作,以模擬微處理器編寫軟件應(yīng)用程序的執(zhí)行方式??梢酝?過分配給寄存器和模擬微處理器的標(biāo)志變量來完成,并將模擬微處理器的邏輯翻譯成軟件 算法,以反映微處理器的執(zhí)行情況,其模擬的方式比較靈活。這就允許電子設(shè)備通過模擬軟 件(仿真軟件)運行用于運行第二類型微處理器的軟件應(yīng)用。也允許電子設(shè)備在仿真環(huán)境中 運行具有潛在問題的代碼,而不會危及或感染電子設(shè)備的硬件。然而,仿真軟件可能需要強 大的處理能力,以及較慢的運行速度。
[0049] 在本實施例的一些情況下,還可以再次添加附加位。這時,在上述步驟S02和步驟 S03之間進(jìn)一步包括如下步驟:
[0050] 在計算設(shè)備中,向一段用于創(chuàng)建擴(kuò)展操作碼的指令的操作碼添加第二附加位,用 以表示第二軟件應(yīng)用程序的操作碼表。在這種情況下,擴(kuò)展操作碼包括第一附加位和第二 附加位,表示第二軟件應(yīng)用程序的操作碼表。
[0051]圖3為本實施例中服務(wù)器和客戶端之間的連接示意圖。上述模擬微處理器指令的 方法可以由一個或多個客戶端,或者由一個或多個服務(wù)器來執(zhí)行。一個或多個客戶端,或者 一個或多個服務(wù)器可包含多個用于模擬微處理器指令的軟件,例如:仿真模塊。仿真模塊的 一個或多個部分可以駐留在一個以網(wǎng)絡(luò)為中心的位置。網(wǎng)絡(luò)可以包括外部網(wǎng)絡(luò)和一個或多 個作為網(wǎng)關(guān)或防火墻的服務(wù)器。
[0052]在上述模擬微處理器指令的方法開始時,啟動一個仿真軟件應(yīng)用程序。在本實施 例的一些情況下,仿真軟件應(yīng)用程序接收從服務(wù)器跨越網(wǎng)絡(luò)發(fā)送的信息。仿真軟件應(yīng)用程 序也可以通過網(wǎng)絡(luò)從安全服務(wù)提供商(如防病毒服務(wù)提供商)接收信息,用于管理一個或多 個服務(wù)器。還可以模擬特定類型的微處理器的操作指令。
[0053]在本實施例的一些情況下,仿真軟件可以模仿英特爾IA-32或AMD64的微處理器操 作指令,也可以模仿微處理器仿真軟件應(yīng)用程序執(zhí)行命令。例如,當(dāng)一個或多個處理器執(zhí)行 仿真軟件時,例如CPU執(zhí)行時,可以由以下的軟件應(yīng)用程序的執(zhí)行流程完成,對于遇到的每 一個機(jī)器代碼指令,CPU執(zhí)行的操作等同于仿真軟件應(yīng)用的原始指令。在本實施例的另外 一些情況下,當(dāng)一個或多個處理器執(zhí)行仿真軟件時,例如CPU執(zhí)行時,可以通過使用動態(tài)重 新編譯,例如即時編譯器技術(shù)。當(dāng)模擬軟件應(yīng)用程序的執(zhí)行流程跳到含有未轉(zhuǎn)換的代碼的 位置,仿真軟件可以翻譯該段代碼到執(zhí)行代碼。一旦仿真軟件啟動,軟件應(yīng)用程序的執(zhí)行就 開始進(jìn)行模擬,即模擬微處理器指令的方法啟動。
[0054] 對于上述步驟S01,該軟件應(yīng)用程序的指令被仿真軟件識別。如英特爾IA-32架構(gòu) 的處理器以及AMD64處理器,一條指令具有一個操作碼部分以及一個或多個附加的可選部 分。操作碼部分可以包括一個一字節(jié)操作碼,一個兩字節(jié)操作碼,或一個三字節(jié)的操作代 碼??蛇x部分可以包括一個或多個指令的指令前綴部分、一個ModR/M部分、SIB部分、一個位 移部分和即時部分。指令前綴部分可以包括多達(dá)四個指令前綴,每個指令前綴可以是一個 字節(jié)長度。ModR/M部分可以是一個字節(jié),SIB部分也是一個字節(jié),位移部分或即時部分可以 是一個、兩個、三個或四個字節(jié)。
[0055] 在一些微處理器中,一個指令的操作碼對應(yīng)于微處理器執(zhí)行時操作碼表中的一個 或多個操作。例如,在字節(jié)數(shù)據(jù)中具有特殊配置比特的一個字節(jié)的操作碼對應(yīng)于操作碼表 中的一個操作碼,用于表示微處理器執(zhí)行時的一個或多個操作。因為在一個字節(jié)中存在256 個(2 8 = 256)個不同比特的組合,一個字節(jié)的操作碼可表示任意256種可能的操作碼,這取 決于字節(jié)中比特的分配。
[0056] 表一中,在一字節(jié)的操作碼中每個操作碼都可以表示在單元中不同的操作,如單 元205的操作代碼0。每個比特的唯一組合以十六進(jìn)制表示,其中,列的數(shù)目表示最低有效位 的操作碼的十六進(jìn)制數(shù),行的數(shù)目表示最高有效位的操作碼的十六進(jìn)制數(shù)(例如,十六進(jìn)制 0F對應(yīng)于操作碼15)。
[0057] 一個兩字節(jié)操作碼的第一個字節(jié)可以參考一字節(jié)的操作碼表中的256個操作碼中 的任一操作碼。一個兩字節(jié)的操作碼可以是0F 07(十六進(jìn)制),其中"0F"表明兩字節(jié)操作碼 表,而"07"表示在這兩字節(jié)的操作碼表中的操作代碼7。類似于一字節(jié)的操作碼表,兩個字 節(jié)操作碼表也可以包括256個操作碼。
[0058]同樣地,一個三字節(jié)的操作碼可包括兩個字節(jié)(它們共同表示一個三字節(jié)操作碼 表)與第三字節(jié)(表示三字節(jié)操作碼表內(nèi)的操作碼)。類似于一個字節(jié)和兩字節(jié)操作碼表, 三字節(jié)操作碼表還可以包括256個操作碼。因此,一個微處理器,例如一個英特爾IA-32結(jié)構(gòu) 的微處理器,可以有三種不同的操作碼表(一字節(jié)操作碼表、兩字節(jié)操作碼表和三字節(jié)操作 碼表),每一個操作碼表都可以有256個不同的操作碼。
[0059] 本實施例中,一些操作碼表中的操作碼可以作為一個指令前綴。例如,在一個英特 爾IA-32微處理器體系結(jié)構(gòu)中,操作碼66(十六進(jìn)制)可以對應(yīng)于覆蓋指令前綴的指令操作 數(shù),用于在指令操作數(shù)大小之間進(jìn)行轉(zhuǎn)換,例如16位和32位的指令操作數(shù)。在英特爾的IA-32 微處理器體系結(jié)構(gòu)中 ,采用三字節(jié)序列的主操作碼字節(jié)的指令使用操作碼 66( 十六進(jìn)制) 來表示不同的功能。在本實施例的一些情況下,在一個英特爾的IA-32微處理器體系結(jié)構(gòu) 中,操作代碼67(十六進(jìn)制)對應(yīng)于一個覆蓋前綴的地址大小,可以通過一個程序在尋址大 小之間切換,如16位和32位。
[0060] 仿真軟件可以模擬微處理器特定類型的指令,可以處理微處理器可以解釋的條件 語句或分支指令之間的不同差異。本實施例通過利用擴(kuò)展操作碼表和擴(kuò)展操作碼減少仿真 軟件中的條件語句和代碼分支。例如,在步驟S02中,第一附加位被添加到軟件應(yīng)用程序的 一個或多個模擬特定狀態(tài)的指令的操作碼中。一個擴(kuò)展操作碼表可用于模擬指令的執(zhí)行, 可以避免一個或多個條件語句或代碼分支。
[0061] 仿真軟件可以將附加位增加到每一個軟件應(yīng)用程序的操作碼中,用于模擬指令前 綴所設(shè)的狀態(tài),例如:指令地址大小。該附加位可設(shè)為一個具有16位尋址模式的數(shù)字0,或具 有一個32位尋址模式的數(shù)字1,反之亦然。因此,將附加位添加到軟件應(yīng)用程序模擬時執(zhí)行 流指令前綴之后的各個操作碼中。這樣,當(dāng)一個指令前綴改變尋址模式時,將附加位添加到 指令前綴之后的執(zhí)行流的操作碼中,以反映新的尋址模式狀態(tài)。因此,將附加位添加到軟件 應(yīng)用程序的每個操作碼中,以表示一個特定的狀態(tài)。
[0062]本實施例中,仿真軟件可以提供一個擴(kuò)展操作碼表,并對每個擴(kuò)展操作碼做出解 釋。例如,一個9比特的擴(kuò)展操作碼可具有512個不同的組合(29 = 512)??紤]附加位,可以含 有512個操作碼的擴(kuò)展操作碼表。即兩個不同的操作碼可以分別用于各自的256個操作碼, 其中一個將對應(yīng)于附加位兩個狀態(tài)中的一個(例如,16位尋址大小模式),而另一個對應(yīng)于 另一附加位(例如,32位尋址大小模式)。
[0063]在本實施例的一些情況下,仿真軟件可以將一位以上的附加位添加到仿真軟件應(yīng) 用機(jī)器代碼的操作碼中。例如,可將第一附加位添加到尋址大小模式,將第二附加位被添加 到擁有指令前綴設(shè)置的指令操作數(shù)大小模式。因此,在一個仿真軟件模擬英特爾IA-32架構(gòu) 的微處理器指令時,將第一比特添加到操作碼,用以說明由指令前綴67(十六進(jìn)制)設(shè)置的 地址大小的狀態(tài)。將第二比特添加到操作碼,用以說明由指令前綴66(十六進(jìn)制)設(shè)置的操 作數(shù)大小狀態(tài)。即第一比特可以添加到指令前綴之后的每個操作碼中,如指令前綴67(十六 進(jìn)制)。在軟件應(yīng)用程序的代碼模擬用于解釋由指令前綴設(shè)置的尋址大小狀態(tài)時,將第二比 特添加到指令前綴之后的每個操作碼中,如指令前綴66(十六進(jìn)制),用以說明由指令前綴 設(shè)置的操作數(shù)大小狀態(tài)。當(dāng)另一個指令前綴改變尋址模式或操作數(shù)大小模式時,將附加位 添加到指令前綴后的每一個操作碼中,用于反映新的尋址大小狀態(tài)或操作數(shù)的大小狀態(tài)。 因此,無論是〇〇、〇1、10或11都可以添加到軟件應(yīng)用程序的機(jī)器代碼的每個操作碼中,用于 說明微處理器的特定狀態(tài)(例如,尋址尺寸狀態(tài)和操作數(shù)大小的狀態(tài))。
[0064]圖4為本實施例中一段擴(kuò)展操作碼的示意圖。圖4中,兩個附加位添加到軟件應(yīng)用 程序的機(jī)器指令的操作碼中,用于說明兩種不同的狀態(tài),例如:尋址大小狀態(tài)和操作數(shù)大小 狀態(tài)。如果添加第八比特用于說明尋址大小狀態(tài),則第一比特可以作為0或1添加到軟件應(yīng) 用程序的機(jī)器指令的每一個操作碼中,以說明由最后尋址大小指令前綴設(shè)置的尋址大小狀 態(tài)(例如,16位或32位狀態(tài)),如指令前綴67(十六進(jìn)制)。如果添加第九比特用于說明指令操 作數(shù)大小的狀態(tài),則第九比特可作為〇或添加到軟件應(yīng)用程序機(jī)器指令的每一個操作碼中, 用于說明由最后一個指令操作數(shù)大小的指令前綴來設(shè)置指令操作數(shù)大小的狀態(tài)(例如,16 位的狀態(tài)或32位的狀態(tài)),如指令前綴66(十六進(jìn)制)。在本實施例的一些情況下,上述第一 比特至第九比特的任意一個都可以用于表示一個狀態(tài)的附加位,例如:尋址大小狀態(tài)或操 作數(shù)大小狀態(tài)。
[0065]本實施例中,一個10位的擴(kuò)展操作碼具有1024(21()= 1024)種不同的組合。兩個附 加位可以對應(yīng)具有1024個操作碼的擴(kuò)展操作碼表,即需要四個不同的操作碼用來提供具有 1024個操作碼的擴(kuò)展操作碼表。如果比特中的任意一位對應(yīng)于一個尋址大小,另一個位對 應(yīng)于一個操作數(shù)大小,那么這兩個附加位〇〇可以表示16位的操作數(shù)大小以及256個操作碼 中每個16位的尋址大小。同樣,這兩個附加位01可以表示16位的操作數(shù)大小以及256個操作 碼中每個32比特的尋址大小。兩個附加位10可以表示32位的操作數(shù)大小以及256個操作碼 中每個16位的尋址大小。兩個附加位11可以表示32位的操作數(shù)大小以及256個操作碼中每 個32位的尋址大小。
[0066]圖5表示一個具有10比特的擴(kuò)展操作碼組成的擴(kuò)展操作碼表,其具有1024個不同 的單元705組成,每一個單元705可以對應(yīng)于一個不同的擴(kuò)展10位操作碼。
[0067]本實施例中,在仿真軟件應(yīng)用程序的機(jī)器代碼指令中,一旦一個或多個附加位添 加到操作碼中,則指令的執(zhí)行可以通過使用擴(kuò)展操作碼(操作碼模仿加添加位)。因此,對于 每個附加位,處于模擬狀態(tài)的微處理器可以在操作代碼本身進(jìn)行說明,從而消除來自不同 情況下的條件語句或編碼分支的處理需要。
[0068]雖然在上述模擬微處理器指令的方法中,步驟S01識別第一軟件應(yīng)用程序指令,步 驟S02通過增加第一附加位來創(chuàng)建一個擴(kuò)展操作碼,步驟S03模擬執(zhí)行指令。在步驟S02中可 以添加一個或多個附加位,用于創(chuàng)建一個擴(kuò)展操作碼。此外,在步驟S03執(zhí)行之前,步驟S01 和步驟S02可迭代執(zhí)行將一個或到多個附加位添加到多指令的多操作碼中。
[0069] 值得一提的是,在本實施例的一些情況下,可以將一個或多個附加位添加到任何 類型狀態(tài)的一個指令的操作碼中,用于說明這些狀態(tài)以及相應(yīng)的擴(kuò)展操作碼表,以消除必 要條件語句或編碼分支的影響。例如,各種附加狀態(tài)由指令前綴和某些類型的微處理器(如 英特爾IA-32架構(gòu)的微處理器指令的其它部分)組成。本實施例中,將一個附加位可添加到 一個操作碼中,隨后相應(yīng)產(chǎn)生一個操作碼表,可用于任何兩種狀態(tài)之間的切換,包括8位、16 位、32位、或64或任何其它類型的狀態(tài)。
[0070] 本實施例中,擴(kuò)展操作碼表可以包括512個操作碼或1024個操作碼。任何數(shù)目的附 加位都可以加入到機(jī)器指令的操作碼中,可以減少仿真軟件中可能另需的附加條件語句或 編碼分支。然而,擴(kuò)展操作碼表需要存儲在運行仿真軟件的計算設(shè)備的高速緩沖存儲器中, 這樣可以產(chǎn)生較大的擴(kuò)展操作碼表。例如,提供一個具有大于1024個操作碼的擴(kuò)展操作碼 表,然而,這樣將會降低高速緩存仿真軟件的性能。
[0071] 本實施例還可以創(chuàng)建額外的擴(kuò)展操作碼表。例如,生成含有1024個單元的擴(kuò)展操 作碼表,用于一字節(jié)的操作碼;生成含有額外的1024個單元的擴(kuò)展操作碼表,用于兩字節(jié)的 操作碼;生成含有第三個1024個單元的擴(kuò)展操作碼表,用于三字節(jié)的操作碼。這種方式中, 操作碼表可以處理兩個字節(jié)和三個字節(jié)的操作碼。
[0072] 本實施例中,仿真軟件可以存儲在客戶端中,也可以由服務(wù)提供商提供,例如:反 病毒軟件提供商。仿真軟件可以安裝在客戶端的一個存儲器裝置上,例如CD-R0M、DVD或閃 存驅(qū)動器。仿真軟件還可以通過服務(wù)提供商從一個或多個服務(wù)器下載所需內(nèi)容。上述模擬 微處理器指令的方法可以在服務(wù)器上執(zhí)行。在一些情況下,仿真軟件在所存儲的計算設(shè)備 可作為防病毒掃描的一部分被使用。仿真軟件可以模仿特定微處理器的指令,并且可以運 行該設(shè)備上的各種應(yīng)用。這樣,仿真器軟件可以測試惡意代碼或軟件環(huán)境下的編碼錯誤,從 而不會使有問題的代碼感染計算設(shè)備。
[0073]本實施例還涉及一種實現(xiàn)上述模擬微處理器指令的方法的裝置,其結(jié)構(gòu)示意圖如 圖6所示。圖6中,該裝置包括識別模塊1、第一附加位添加模塊2和模擬模塊3;其中,識別模 塊1用于識別計算設(shè)備中的第一軟件應(yīng)用程序指令;該第一軟件應(yīng)用程序指令采用一個模 擬某類微處理器指令的第二軟件應(yīng)用程序,該第一軟件應(yīng)用程序指令包括一個指令前綴; 指令前綴表示指令操作數(shù)的大小或指令地址的尺寸;所述指令操作數(shù)的大小為16位或32位 的大小,所述指令地址的尺寸具有16位或32位的大小。第一附加位添加模塊2用于在計算設(shè) 備中,向一段用于創(chuàng)建基于指令前綴的擴(kuò)展操作碼的操作碼上添加第一附加位,用以表示 在第二軟件應(yīng)用程序中建立一個擴(kuò)展操作碼表;操作碼表包括至少256個操作碼;模擬模 塊3用于在計算設(shè)備中模擬使用了第二軟件應(yīng)用程序和擴(kuò)展操作碼的指令的執(zhí)行。本實施 例中,操作碼的長度是一個字節(jié),擴(kuò)展操作碼的長度至少為9位。本實施例允許軟件應(yīng)用程 序使用不同類型的微處理器在電子設(shè)備上運行、電子設(shè)備在仿真環(huán)境中運行具有潛在問題 的代碼時不會危及或感染電子設(shè)備的硬件。
[0074]在本實施例的一些情況下,該裝置還包括第二附加位添加模塊4,第二附加位添加 模塊4用于在計算設(shè)備中,向一段用于創(chuàng)建擴(kuò)展操作碼的指令的操作碼添加第二附加位,用 以表示第二軟件應(yīng)用程序的操作碼表。
[0075]總之,在本實施例中,在擴(kuò)展操作碼中微處理器執(zhí)行的狀態(tài)以及擴(kuò)展操作碼表中 模擬軟件代碼的條件語句和編碼分支所需的數(shù)量可以減少,從而增加仿真軟件的性能。另 外,可以通過使用預(yù)讀技術(shù)進(jìn)一步增加處理指令的速度。在一些情況下,條件語句和編碼分 支可能影響到使用先行技術(shù)的計算機(jī)能力,通過在仿真軟件中減少條件語句和編碼分支的 數(shù)目,可以更有效地使用先行技術(shù),以進(jìn)一步增加速度,并提高仿真軟件的性能。
[0076]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項】
1. 一種模擬微處理器指令的方法,其特征在于,包括如下步驟: A) 識別計算設(shè)備中的第一軟件應(yīng)用程序指令;所述第一軟件應(yīng)用程序指令采用一個模 擬某類微處理器指令的第二軟件應(yīng)用程序,所述第一軟件應(yīng)用程序指令包括一個指令前 綴; B) 在所述計算設(shè)備中,向一段用于創(chuàng)建基于指令前綴的擴(kuò)展操作碼的操作碼上添加第 一附加位,用以表示在所述第二軟件應(yīng)用程序中建立一個擴(kuò)展操作碼表; C) 在所述計算設(shè)備中模擬使用了所述第二軟件應(yīng)用程序和擴(kuò)展操作碼的指令的執(zhí)行。2. 根據(jù)權(quán)利要求1所述的模擬微處理器指令的方法,其特征在于,在所述步驟B)和C)之 間還包括如下步驟: B1)在所述計算設(shè)備中,向一段用于創(chuàng)建擴(kuò)展操作碼的指令的操作碼添加第二附加位, 用以表示所述第二軟件應(yīng)用程序的操作碼表。3. 根據(jù)權(quán)利要求1或2所述的模擬微處理器指令的方法,其特征在于,所述指令前綴表 示指令操作數(shù)的大小或指令地址的尺寸;所述指令操作數(shù)的大小為16位或32位的大小,所 述指令地址的尺寸具有16位或32位的大小。4. 根據(jù)權(quán)利要求1或2所述的模擬微處理器指令的方法,其特征在于,所述操作碼表包 括至少256個操作碼。5. 根據(jù)權(quán)利要求1或2所述的模擬微處理器指令的方法,其特征在于,所述操作碼的長 度是一個字節(jié),所述擴(kuò)展操作碼的長度至少為9位。6. -種實現(xiàn)如權(quán)利要求1所述的模擬微處理器指令的方法的裝置,其特征在于,包括: 識別模塊:用于識別計算設(shè)備中的第一軟件應(yīng)用程序指令;所述第一軟件應(yīng)用程序指 令采用一個模擬某類微處理器指令的第二軟件應(yīng)用程序,所述第一軟件應(yīng)用程序指令包括 一個指令如綴; 第一附加位添加模塊:用于在所述計算設(shè)備中,向一段用于創(chuàng)建基于指令前綴的擴(kuò)展 操作碼的操作碼上添加第一附加位,用以表示在所述第二軟件應(yīng)用程序中建立一個擴(kuò)展操 作碼表; 模擬模塊:用于在所述計算設(shè)備中模擬使用了所述第二軟件應(yīng)用程序和擴(kuò)展操作碼的 指令的執(zhí)行。7. 根據(jù)權(quán)利要求6所述的實現(xiàn)如權(quán)利要求1所述的模擬微處理器指令的方法的裝置,其 特征在于,還包括: 第二附加位添加模塊:用于在所述計算設(shè)備中,向一段用于創(chuàng)建擴(kuò)展操作碼的指令的 操作碼添加第二附加位,用以表示所述第二軟件應(yīng)用程序的操作碼表。8. 根據(jù)權(quán)利要求6或7所述的實現(xiàn)如權(quán)利要求1所述的模擬微處理器指令的方法的裝 置,其特征在于,所述指令前綴表示指令操作數(shù)的大小或指令地址的尺寸;所述指令操作數(shù) 的大小為16位或32位的大小,所述指令地址的尺寸具有16位或32位的大小。9. 根據(jù)權(quán)利要求6或7所述的實現(xiàn)如權(quán)利要求1所述的模擬微處理器指令的方法的裝 置,其特征在于,所述操作碼表包括至少256個操作碼。10. 根據(jù)權(quán)利要求6或7所述的實現(xiàn)如權(quán)利要求1所述的模擬微處理器指令的方法的裝 置,其特征在于,所述操作碼的長度是一個字節(jié),所述擴(kuò)展操作碼的長度至少為9位。
【文檔編號】G06F9/22GK105867879SQ201610168571
【公開日】2016年8月17日
【申請日】2016年3月21日
【發(fā)明人】張晶
【申請人】合肥賽猊騰龍信息技術(shù)有限公司