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