專(zhuān)利名稱(chēng):實(shí)現(xiàn)靈活且低成本的指令替換方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及指令替換技術(shù),特別涉及一種實(shí)現(xiàn)靈活且低成本的指令替換方法及裝置。
背景技術(shù):
中央處理器(CPU, Computer Progress Unit)執(zhí)行指令的過(guò)程可以簡(jiǎn)述為如下過(guò)程取指令單元從程序空間取指令、并傳輸給譯碼單元;譯碼單元執(zhí)行譯碼、并將譯碼結(jié)果傳輸給執(zhí)行單元;執(zhí)行單元執(zhí)行指令。在CPU芯片制成后,指令固化在CPU芯片的掩膜只讀存儲(chǔ)器(MASK ROM7Read OnlyMemory)中,有時(shí)需要對(duì)上述指令進(jìn)行替換,現(xiàn)有技術(shù)中包括以下三種指令替換的方式 第一、圖I為現(xiàn)有技術(shù)中第一種指令替換方法的示意圖。以Intel 80251為例,假設(shè)需要將地址為0ff43f2h開(kāi)始的指令MOV sp, #80h替換為MOV sp, #89h。需要直接修改MASK ROM中的指令,并重新流片,成本較高且浪費(fèi)時(shí)間。第二、圖2為現(xiàn)有技術(shù)中第二種指令替換方法的示意圖。仍以Intel 80251為例,假設(shè)需要修改函數(shù)functionl。圖2中斜線(xiàn)陰影所示區(qū)域?yàn)樾薷那暗暮瘮?shù)functionl,橫線(xiàn)陰影所示區(qū)域?yàn)樾薷暮蟮暮瘮?shù)functionl。假設(shè)所有函數(shù)都可能出錯(cuò),將所有函數(shù)的入口地址存放在函數(shù)入口地址表中,這個(gè)表存放在一次性編程存儲(chǔ)器(0ΤΡ,One Time Programming)、外擴(kuò)的只讀存儲(chǔ)器(R0M,Read Only Memery)或閃存(FLASH ROM)中,使用指令ecall OWRj執(zhí)行函數(shù)調(diào)用,其中WRj指的是一個(gè)函數(shù)入口地址。當(dāng)需要修改函數(shù)functionl時(shí),修改functionl在函數(shù)地址入口表中的函數(shù)入口地址,并新增修改后的functionl函數(shù)與這個(gè)新的函數(shù)入口地址對(duì)應(yīng)。但在實(shí)際的CPU芯片中,函數(shù)寫(xiě)錯(cuò)的概率是非常小的,只有少數(shù)的函數(shù)代碼有錯(cuò),因此這種指令替換的方式浪費(fèi)了大量的空間存放函數(shù)入口地址表,并且目前的有些C語(yǔ)言編譯器還無(wú)法支持這種指令替換方式。第三、圖3為現(xiàn)有技術(shù)中第三種指令替換方法的流程圖,該流程包括步驟301 :判斷當(dāng)前是否滿(mǎn)足指令替換條件,如果是,則產(chǎn)生中斷,然后執(zhí)行步驟302 ;否則執(zhí)行步驟303。步驟302 :調(diào)用中斷服務(wù)程序到中斷向量表,執(zhí)行代碼替換,然后執(zhí)行步驟303。步驟303 :對(duì)地址線(xiàn)上當(dāng)前地址中的指令譯碼并執(zhí)行。預(yù)先設(shè)置修改點(diǎn)位置,如果當(dāng)前地址與某個(gè)修改點(diǎn)位置匹配,則產(chǎn)生一個(gè)中斷,在中斷服務(wù)程序中實(shí)現(xiàn)代碼替換,這種指令替換方式需要修改中斷控制器,并且會(huì)與不帶中斷請(qǐng)求的中斷源(通常包括軟件調(diào)制中斷、異常中斷和非可屏蔽中斷)產(chǎn)生沖突。
發(fā)明內(nèi)容
本發(fā)明提供一種實(shí)現(xiàn)靈活且低成本的指令替換方法,在現(xiàn)有CPU的結(jié)構(gòu)不作大改動(dòng)、且不改變編譯器的前提下,使用該方法可以靈活且低成本的替換MASK ROM中的單條指令或一系列指令的組合。本發(fā)明提供一種實(shí)現(xiàn)靈活且低成本的指令替換裝置,在現(xiàn)有CPU的結(jié)構(gòu)不作大改動(dòng)、且不改變編譯器的前提下,該裝置可以靈活且低成本的替換MASK ROM中的單條指令或一系列指令的組合。本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的一種實(shí)現(xiàn)靈活且低成本的指令替換方法,關(guān)鍵在于,該方法包括A、判斷當(dāng)前是否滿(mǎn)足指令替換條件,如果是,替換從地址線(xiàn)上當(dāng)前地址中讀出的指令操作碼,然后執(zhí)行步驟B ;否則執(zhí)行步驟C ;B、檢測(cè)從當(dāng)前地址中讀出的指令操作碼是否指示陷阱指令,如果是,執(zhí)行預(yù)設(shè)地址中的替換代碼,并結(jié)束流程;否則執(zhí)行步驟C ;
C、對(duì)所述當(dāng)前地址中的指令譯碼并執(zhí)行。一種實(shí)現(xiàn)靈活且低成本的指令替換裝置,關(guān)鍵在于,該裝置包括代碼替換單元、陷阱指令檢測(cè)單元和陷阱指令執(zhí)行單元;所述代碼替換單元,用于判斷當(dāng)前是否滿(mǎn)足指令替換條件,如果是,替換從地址線(xiàn)上當(dāng)前地址中讀出的指令操作碼,否則將所述當(dāng)前地址中的指令輸出給譯碼單元;所述陷阱指令檢測(cè)單元,用于檢測(cè)代碼替換單元處理后的指令中的指令操作碼是否指示陷阱指令;所述陷阱指令執(zhí)行單元,用于在所述陷阱指令檢測(cè)單元得出的檢測(cè)結(jié)果為是時(shí),執(zhí)行預(yù)設(shè)地址中的替換代碼,在所述陷阱指令檢測(cè)單元得出的檢測(cè)結(jié)果為否時(shí),將所述當(dāng)前地址中的指令輸出給譯碼單元。可以看出,本發(fā)明中實(shí)現(xiàn)靈活且低成本的指令替換方法中,在當(dāng)前滿(mǎn)足指令替換條件時(shí),替換指令操作碼。對(duì)于那些僅需替換指令操作碼的指令,后續(xù)繼續(xù)進(jìn)行譯碼和執(zhí)行即可。對(duì)于那些替換內(nèi)容較多的指令,設(shè)置了一種陷阱指令,當(dāng)替換指令操作碼后的指令為陷阱指令時(shí),執(zhí)行預(yù)設(shè)地址中的替換代碼,間接實(shí)現(xiàn)了指令替換。使用本發(fā)明中的指令替換方法,可以在現(xiàn)有CPU在結(jié)構(gòu)不作大改動(dòng)、且不改變編譯器的前提下,靈活替換固化在CPU的MASK ROM中的單條指令或一系列指令的組合,并且由于無(wú)需修改MASK ROM,也無(wú)需建立函數(shù)入口地址表,實(shí)現(xiàn)成本較低。
圖I為現(xiàn)有技術(shù)中第一種指令替換方法的示意圖;圖2為現(xiàn)有技術(shù)中第二種指令替換方法的示意圖;圖3為現(xiàn)有技術(shù)中第三種指令替換方法的流程圖;圖4為本發(fā)明實(shí)施例中的實(shí)現(xiàn)靈活且低成本的指令替換方法流程圖;圖5為圖4所示方法的一個(gè)實(shí)施例中的方法流程圖;圖6為圖5所示流程中步驟504的實(shí)現(xiàn)方法流程圖;圖7為本發(fā)明實(shí)施例中的實(shí)現(xiàn)靈活且低成本的指令替換裝置的結(jié)構(gòu)示意圖;圖8為圖7所示裝置的一個(gè)實(shí)施例中代碼替換單元的結(jié)構(gòu)示意圖;圖9為圖7所示裝置的一個(gè)實(shí)施例中陷阱指令執(zhí)行單元的結(jié)構(gòu)示意圖。
具體實(shí)施例方式為使本發(fā)明實(shí)施例的目的和優(yōu)點(diǎn)更加清楚,下面結(jié)合附圖對(duì)本發(fā)明實(shí)施例作進(jìn)一步的詳細(xì)說(shuō)明。圖4為本發(fā)明實(shí)施例中的指令替換裝置的指令替換方法流程圖,該流程包括步驟401 :判斷當(dāng)前是否滿(mǎn)足指令替換條件,如果是,替換從地址線(xiàn)上當(dāng)前地址中讀出的指令操作碼,然后執(zhí)行步驟402 ;否則執(zhí)行步驟403。步驟402 :檢測(cè)從當(dāng)前地址中讀出的指令操作碼是否指示陷阱指令,如果是,執(zhí)行預(yù)設(shè)地址中的替換代碼,并結(jié)束流程;否則執(zhí)行步驟403。在本發(fā)明實(shí)施例中,陷阱指令為預(yù)先設(shè)置的、指示執(zhí)行預(yù)設(shè)地址中的替換代碼的 一種指令,陷阱指令的指令操作碼可以從CPU現(xiàn)在未使用的機(jī)器碼中任選,例如可以選擇OxbS作為陷阱指令的指令操作碼。步驟403 :對(duì)所述當(dāng)前地址中的指令譯碼并執(zhí)行。可以看出,本發(fā)明中實(shí)現(xiàn)靈活且低成本的指令替換方法中,在當(dāng)前滿(mǎn)足指令替換條件時(shí),替換指令操作碼。對(duì)于那些僅需替換指令操作碼的指令來(lái)說(shuō),后續(xù)繼續(xù)進(jìn)行譯碼和執(zhí)行即可,對(duì)于那些替換內(nèi)容較多的指令來(lái)說(shuō),設(shè)置了一種陷阱指令,當(dāng)替換指令操作碼后的指令為陷阱指令時(shí),執(zhí)行預(yù)設(shè)地址中的替換代碼,間接實(shí)現(xiàn)了指令替換。使用上述指令替換方法可以在現(xiàn)有CPU在結(jié)構(gòu)不作大改動(dòng)、且不改變編譯器的前提下,靈活的替換固化在CPU的MASK ROM中的單條指令或一系列指令的組合,并且由于無(wú)需修改MASK ROM,也無(wú)需建立函數(shù)入口地址表,實(shí)現(xiàn)成本較低。下面給出圖4所示方法的一個(gè)具體實(shí)施例。圖5為圖4所示方法的一個(gè)實(shí)施例的方法流程圖,包括初始化流程和指令替換流程。圖5中虛線(xiàn)框內(nèi)為上述初始化流程,包括初始化修改點(diǎn)數(shù)量η、設(shè)置修改點(diǎn)位置及每個(gè)修改點(diǎn)位置對(duì)應(yīng)的替換指令操作碼、設(shè)置指令替換服務(wù)程序入口地址、使能指令替換功能。上述指令替換流程包括步驟501 :判斷當(dāng)前是否為取指令操作且存在與地址線(xiàn)上的當(dāng)前值相同的修改點(diǎn)位置,如果是,執(zhí)行步驟502,否則執(zhí)行步驟505。地址線(xiàn)上的當(dāng)前值,指示的就是當(dāng)前地址。步驟502 :使用與地址線(xiàn)上的當(dāng)前值相同的修改點(diǎn)位置對(duì)應(yīng)的待替換的指令操作碼,替換從地址線(xiàn)上當(dāng)前地址中讀出的指令操作碼,將替換后的指令填入指令FIFO。步驟503 :檢測(cè)從地址線(xiàn)上當(dāng)前地址中讀出的指令操作碼是否指示陷阱指令,如果是,執(zhí)行步驟504,否則執(zhí)行步驟506。步驟504:保護(hù)地址線(xiàn)上的當(dāng)前地址,跳轉(zhuǎn)到指令服務(wù)替換程序的入口地址,并調(diào)用指令替換服務(wù)程序執(zhí)行預(yù)設(shè)地址中的替換代碼,結(jié)束流程。本步驟中,調(diào)用指令替換服務(wù)程序執(zhí)行預(yù)設(shè)地址中的替換代碼的方法流程如圖6所示,圖6所示流程包括步驟601 :計(jì)算當(dāng)前地址的堆棧指針。本步驟中,由于指令替換服務(wù)程序并不知道地址線(xiàn)上的當(dāng)前地址,所以通過(guò)公式SPfixpos = SPnOT-服務(wù)程序入口地址寄存器中的字節(jié)數(shù)來(lái)計(jì)算當(dāng)前地址的堆棧指針。步驟602 :從當(dāng)前地址的堆棧指針指向的位置讀出當(dāng)前地址的程序指針。本步驟中,根據(jù)SPfix ptjs指向的位置讀出當(dāng)前地址的程序指針PC_ent。步驟603 :判斷當(dāng)前地址是否與第i個(gè)修改點(diǎn)位置相同,如果是,執(zhí)行步驟604,否則執(zhí)行步驟605。步驟604 :執(zhí)行第i個(gè)修改點(diǎn)位 置對(duì)應(yīng)的預(yù)設(shè)地址中的替換代碼,結(jié)束流程。步驟605 :判斷i是否小于等于修改點(diǎn)數(shù)量n,如果是,計(jì)算i = i+Ι,并返回步驟603,否則結(jié)束流程。經(jīng)過(guò)上述步驟601 步驟605調(diào)用指令替換服務(wù)程序執(zhí)行預(yù)設(shè)地址中的替換代碼。步驟505 :將程序空間讀到的數(shù)據(jù)填入指令FIFO。步驟506 :對(duì)地址線(xiàn)上的當(dāng)前地址中的指令譯碼。步驟507 :執(zhí)行譯碼后的指令。圖7為本發(fā)明實(shí)施例中實(shí)現(xiàn)靈活且低成本的指令替換裝置的結(jié)構(gòu)示意圖,該裝置包括代碼替換單元、陷阱指令檢測(cè)單元和陷阱指令執(zhí)行單元。上述代碼替換單元,用于判斷當(dāng)前是否滿(mǎn)足指令替換條件,如果是,替換從所述當(dāng)前地址中讀出的指令操作碼,否則將地址線(xiàn)上當(dāng)前地址中的指令輸出給譯碼執(zhí)行單元。上述陷阱指令檢測(cè)單元,用于檢測(cè)代碼替換單元處理后的指令中的指令操作碼是否指示陷阱指令。上述陷阱指令執(zhí)行單元,用于在陷阱指令檢測(cè)單元得出的檢測(cè)結(jié)果為是時(shí),執(zhí)行預(yù)設(shè)地址中的替換代碼,在所述陷阱指令檢測(cè)單元得出的檢測(cè)結(jié)果為否時(shí),將地址線(xiàn)上當(dāng)前地址中的指令輸出給譯碼執(zhí)行單元。下面提供圖7所示裝置的一個(gè)具體實(shí)施例。本實(shí)施例中,指令替換裝置中除了包括代碼替換單元、陷阱指令檢測(cè)單元和陷阱指令執(zhí)行單元外,還包括服務(wù)程序入口地址寄存器,用于存儲(chǔ)指令替換服務(wù)程序的入口地址。圖8為圖7所示裝置的一個(gè)實(shí)施例中代碼替換單元的結(jié)構(gòu)示意圖,該代碼替換單元包括取指令和取數(shù)據(jù)判決子單元、修改點(diǎn)數(shù)量寄存器、N選一多路復(fù)用器、N個(gè)程序地址比較器、N個(gè)比較匹配子單元、N個(gè)修改點(diǎn)位置寄存器、N個(gè)替換指令操作碼寄存器、N個(gè)二選一多路復(fù)用器和N個(gè)與門(mén)。每個(gè)修改點(diǎn)位置寄存器與一個(gè)程序地址比較器、一個(gè)比較匹配子單元、一個(gè)與門(mén)、一個(gè)替換指令代碼寄存器及一個(gè)二選一多路復(fù)用器具有對(duì)應(yīng)關(guān)系,N為整數(shù)。上述修改點(diǎn)數(shù)量寄存器,用于存儲(chǔ)修改點(diǎn)數(shù)量的初始值η,使能η個(gè)比較匹配子單元。這里的η < N,按照?qǐng)D4所示,可以使能開(kāi)始的η個(gè)比較匹配子單元。上述每個(gè)替換指令操作碼寄存器,用于存儲(chǔ)一個(gè)修改點(diǎn)位置待替換的指令操作碼。常規(guī)的指令操作碼可以有很多種,例如指令orl a,0x83 (對(duì)應(yīng)的機(jī)器碼為0x45 0x83)中,0x45為指令操作碼。在本實(shí)施例中,還有一種特殊的指令操作碼,用于指示陷阱指令,這種指令操作碼可以從CPU現(xiàn)在未使用的機(jī)器碼中任選,例如可以選擇0xb8。上述取指令和取數(shù)據(jù)判決子單元,用于判決當(dāng)前是取指令操作還是取數(shù)據(jù)操作,將判決結(jié)果發(fā)送給每個(gè)與門(mén)。假設(shè)高電平信號(hào)代表取指令操作,低電平信號(hào)代表取數(shù)據(jù)操作。上述每個(gè)程序地址比較器,用于獲取地址線(xiàn)上的當(dāng)前值,發(fā)送給對(duì)應(yīng)的比較匹配子單元。地址線(xiàn)上的當(dāng)前值指示當(dāng)前地址。上述每個(gè)比較匹配子單元,用于從對(duì)應(yīng)的修改點(diǎn)位置寄存器中獲取修改點(diǎn)位置,比較地址線(xiàn)上的當(dāng)前值與獲取的修改點(diǎn)位置是否相同,將比較結(jié)果提供給對(duì)應(yīng)的與門(mén),并將比較結(jié)果提供給N選一多路復(fù)用器。假設(shè)高電平信號(hào)代表判斷結(jié)果為是,低電平信號(hào)代表判斷結(jié)果為否。由于本實(shí)施例中的修改點(diǎn)數(shù)量寄存器有使能比較匹配子單元的功能,所以未被使能的比較匹配子單元將不執(zhí)行任何操作。
上述每個(gè)與門(mén),用于在接收到判決結(jié)果為取指令操作且接收到的比較結(jié)果為是時(shí),向?qū)?yīng)的二選一多路復(fù)用器輸出觸發(fā)信號(hào)。這里的觸發(fā)信號(hào)是觸發(fā)對(duì)應(yīng)的二選一多路復(fù)用器執(zhí)行指令操作碼的替換操作。上述每個(gè)二選一多路復(fù)用器,用于在對(duì)應(yīng)的與門(mén)輸出觸發(fā)信號(hào)時(shí),獲取對(duì)應(yīng)的替換指令操作碼寄存器中的待替換的指令操作碼,使用獲取的待替換的指令操作碼替換從當(dāng)前地址中讀出的指令操作碼,將替換后的指令提供給N選一多路復(fù)用器;在對(duì)應(yīng)的與門(mén)未輸出觸發(fā)信號(hào)時(shí),將從程序空間讀到的數(shù)據(jù)提供給N選一多路復(fù)用器。上述N選一多路復(fù)用器,用于在一個(gè)比較匹配子單元得出的比較結(jié)果為是時(shí),選擇輸出該比較結(jié)果的比較匹配子單元對(duì)應(yīng)的二選一多路復(fù)用器輸出的指令,并輸出到指令先入先出(FIFO,F(xiàn)irst In First Out);在所有比較匹配子單元得出的比較結(jié)果都為否時(shí),選擇任一個(gè)接收到的指令,輸出到指令FIFO。在同一時(shí)間,N選一多路復(fù)用器只可能接收到一個(gè)比較匹配子單元發(fā)送的比較結(jié)果為是。圖9為圖7所示裝置的一個(gè)實(shí)施例中的陷阱指令執(zhí)行單元的結(jié)構(gòu)示意圖,該陷阱指令執(zhí)行單元包括程序地址保護(hù)子單元和調(diào)用子單元。上述程序地址保護(hù)子單元,用于將當(dāng)前地址的程序指針PCcmrait放入堆棧,對(duì)應(yīng)的堆棧指針為SPfix,。上述調(diào)用子單元,用于從服務(wù)程序入口地址寄存器中獲取指令替換服務(wù)程序的入口地址,將程序指針修改為指令替換服務(wù)程序的入口地址,對(duì)應(yīng)的堆棧指針為SPmw,則SPmw=SPfixpos+服務(wù)程序入口地址寄存器中的字節(jié)數(shù);按照指令替換服務(wù)程序的入口地址調(diào)用存儲(chǔ)在可修改存儲(chǔ)介質(zhì)中的指令替換服務(wù)程序,計(jì)算當(dāng)前地址的堆棧指針SPfixjws,其中SPfixpos = SPnew-服務(wù)程序入口地址寄存器中的字節(jié)數(shù),從當(dāng)前地址的堆棧指針指向的位置讀出當(dāng)前地址的程序指針PCcmrait,確定與當(dāng)前地址匹配的修改點(diǎn)位置,獲取匹配的修改點(diǎn)位置對(duì)應(yīng)的預(yù)設(shè)地址,執(zhí)行所述預(yù)設(shè)地址中的替換代碼??梢钥闯?,本發(fā)明中實(shí)現(xiàn)靈活且低成本的指令替換方法和裝置,在當(dāng)前滿(mǎn)足指令替換條件時(shí),替換指令操作碼。對(duì)于那些僅需替換指令操作碼的指令來(lái)說(shuō),后續(xù)繼續(xù)進(jìn)行譯碼和執(zhí)行即可,對(duì)于那些替換內(nèi)容較多的指令來(lái)說(shuō),設(shè)置了一種陷阱指令,當(dāng)替換指令操作碼后的指令為陷阱指令時(shí),執(zhí)行預(yù)設(shè)地址中的替換代碼,間接實(shí)現(xiàn)了指令替換。使用上述指令替換方法可以在現(xiàn)有CPU在結(jié)構(gòu)不作大改動(dòng)、且不改變編譯器的前提下,靈活的替換固化在CPU的MASK ROM中的單條指令或一系列指令的組合,并且由于無(wú)需修改MASK ROM,也無(wú)需建立函數(shù)入口地址表,實(shí)現(xiàn)成本較低。
綜上所述,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明 的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種實(shí)現(xiàn)靈活且低成本的指令替換方法,其特征在于,該方法包括 A、判斷當(dāng)前是否滿(mǎn)足指令替換條件,如果是,替換從地址線(xiàn)上當(dāng)前地址中讀出的指令操作碼,然后執(zhí)行步驟B ;否則執(zhí)行步驟C ; B、檢測(cè)從當(dāng)前地址中讀出的指令操作碼是否指示陷阱指令,如果是,執(zhí)行預(yù)設(shè)地址中的替換代碼,并結(jié)束流程;否則執(zhí)行步驟C ; C、對(duì)所述當(dāng)前地址中的指令譯碼并執(zhí)行。
2.如權(quán)利要求I所述的方法,其特征在于,所述步驟A之前進(jìn)一步包括初始化的步驟,具體包括初始化修改點(diǎn)數(shù)量、設(shè)置修改點(diǎn)位置、設(shè)置每個(gè)修改點(diǎn)位置對(duì)應(yīng)的替換指令操作碼、設(shè)置指令替換服務(wù)程序入口地址及使能指令替換功能。
3.如權(quán)利要求2所述的方法,其特征在于,步驟A中的所述指令替換條件為當(dāng)前為取指令操作且存在與地址線(xiàn)上的當(dāng)前值相同的修改點(diǎn)位置; 步驟A中的所述替換從地址線(xiàn)上當(dāng)前地址中讀出的指令操作碼為使用與地址線(xiàn)上的當(dāng)前值相同的修改點(diǎn)位置對(duì)應(yīng)的待替換的指令操作碼,替換從所述當(dāng)前地址中讀出的指令操作碼。
4.如權(quán)利要求2所述的方法,其特征在于,步驟B中所述執(zhí)行預(yù)設(shè)地址中的替換代碼為保護(hù)所述當(dāng)前地址,跳轉(zhuǎn)到指令服務(wù)替換程序的入口地址,調(diào)用所述指令替換服務(wù)程序執(zhí)行預(yù)設(shè)地址中的替換代碼。
5.如權(quán)利要求4所述的方法,其特征在于,所述保護(hù)所述當(dāng)前地址為將所述當(dāng)前地址的程序指針PCc^mt放入堆棧,對(duì)應(yīng)的堆棧指針為SPfix rrost5
6.如權(quán)利要求5所述的方法,其特征在于,所述跳轉(zhuǎn)到指令服務(wù)替換程序的入口地址,調(diào)用所述指令替換服務(wù)器程序執(zhí)行預(yù)設(shè)地址中的替換代碼包括 從服務(wù)程序入口地址寄存器中獲取所述服務(wù)程序入口地址; 將程序指針修改為所述服務(wù)程序入口地址,對(duì)應(yīng)的堆棧指針為SPmw,其中SPnOT = SPfixpos+服務(wù)程序入口地址寄存器中的字節(jié)數(shù); 根據(jù)所述修改后的程序指針調(diào)用存儲(chǔ)在可修改存儲(chǔ)介質(zhì)中的指令替換服務(wù)程序; 計(jì)算當(dāng)前地址的堆棧指針SPfixjws,其中SPhxjkjs = SPmw-服務(wù)程序入口地址寄存器中的字節(jié)數(shù); 從當(dāng)前地址的堆棧指針指向的位置讀出當(dāng)前地址的程序指針PCmt ; 確定所述PCmt與第i個(gè)修改點(diǎn)位置是否匹配,如果是執(zhí)行第i個(gè)修改點(diǎn)位置對(duì)應(yīng)的預(yù)設(shè)地址中的替換代碼,否則計(jì)算i = i+1、并繼續(xù)執(zhí)行所述確定的步驟,直至i > n。
7.如權(quán)利要求I或2所述的方法,其特征在于,所述預(yù)設(shè)地址為預(yù)先設(shè)置的固定值,或者為寄存器中的臨時(shí)配置值。
8.一種實(shí)現(xiàn)靈活且低成本的指令替換裝置,其特征在于,該裝置包括代碼替換單元、陷阱指令檢測(cè)單元和陷阱指令執(zhí)行單元; 所述代碼替換單元,用于判斷當(dāng)前是否滿(mǎn)足指令替換條件,如果是,替換從地址線(xiàn)上當(dāng)前地址中讀出的指令操作碼,否則將所述當(dāng)前地址中的指令輸出給譯碼單元; 所述陷阱指令檢測(cè)單元,用于檢測(cè)代碼替換單元處理后的指令中的指令操作碼是否指不陷講指令; 所述陷阱指令執(zhí)行單元,用于在所述陷阱指令檢測(cè)單元得出的檢測(cè)結(jié)果為是時(shí),執(zhí)行預(yù)設(shè)地址中的替換代碼,在所述陷阱指令檢測(cè)單元得出的檢測(cè)結(jié)果為否時(shí),將所述當(dāng)前地址中的指令輸出給譯碼單元。
9.如權(quán)利要求8所述的裝置,其特征在于,所述代碼替換單元中包括 取指令和取數(shù)據(jù)判決子單元,用于判決當(dāng)前是取指令操作還是取數(shù)據(jù)操作,將判決結(jié)果發(fā)送給每個(gè)與門(mén); 修改點(diǎn)數(shù)量寄存器,用于存儲(chǔ)修改點(diǎn)數(shù)量的初始值n,使能n個(gè)比較匹配電路; N選一多路復(fù)用器,用于在有一個(gè)所述比較結(jié)果為是時(shí),選擇輸出該比較結(jié)果的比較匹配子單元對(duì)應(yīng)的二選一多路復(fù)用器輸出的指令,并輸出到指令先入先出FIFO ;在所有所述比較結(jié)果為否時(shí),選擇任一個(gè)接收到的指令,輸出到指令FIFO; N個(gè)程序地址比較器,每個(gè)程序地址比較器用于獲取地址線(xiàn)上的當(dāng)前值,發(fā)送給對(duì)應(yīng)的比較匹配子單元; N個(gè)比較匹配子單元,每個(gè)比較匹配子單元用于從對(duì)應(yīng)的修改點(diǎn)位置寄存器中獲取修改點(diǎn)位置,比較地址線(xiàn)上的當(dāng)前值與獲取的修改點(diǎn)位置是否相同,將比較結(jié)果提供給對(duì)應(yīng)的與門(mén)和N選一多路復(fù)用器; N個(gè)修改點(diǎn)位置寄存器,每個(gè)修改點(diǎn)位置寄存器用于存儲(chǔ)修改點(diǎn)位置; N個(gè)替換指令操作碼寄存器,每個(gè)替換指令操作碼寄存器用于存儲(chǔ)一個(gè)修改點(diǎn)位置的待替換的指令操作碼; N個(gè)二選一多路復(fù)用器,每個(gè)二選一多路復(fù)用器用于在對(duì)應(yīng)的與門(mén)輸出觸發(fā)信號(hào)時(shí),獲取對(duì)應(yīng)的替換指令操作碼寄存器中的待替換的指令操作碼,使用獲取的待替換的指令操作碼替換從當(dāng)前地址中讀出的指令操作碼,將替換后的指令提供給N選一多路復(fù)用器;在對(duì)應(yīng)的與門(mén)未輸出觸發(fā)信號(hào)時(shí),將從程序空間讀到的數(shù)據(jù)提供給N選一多路復(fù)用器; N個(gè)與門(mén),每個(gè)與門(mén)用于在所述判決結(jié)果為取指令操作且所述比較結(jié)果為是時(shí),向?qū)?yīng)的二選一多路復(fù)用器輸出觸發(fā)信號(hào); 所述N為整數(shù),且n < N。
10.如權(quán)利要求9所述的裝置,其特征在于,該裝置中進(jìn)一步包括服務(wù)程序入口地址寄存器,用于存儲(chǔ)指令替換服務(wù)程序入口地址。
11.如權(quán)利要求10所述的裝置,其特征在于,所述陷阱指令執(zhí)行單元包括 程序地址保護(hù)子單元,用于將所述當(dāng)前地址的程序指針PCmt放入堆棧,對(duì)應(yīng)的堆棧指針為SPfix lros ; 調(diào)用子單元,用于從服務(wù)程序入口地址寄存器中獲取指令替換服務(wù)程序的入口地址,將程序指針修改為指令替換服務(wù)程序的入口地址,對(duì)應(yīng)的堆棧指針為SPmw,其中SPmw =SPfix _+服務(wù)程序入口地址寄存器中的字節(jié)數(shù);按照指令替換服務(wù)程序的入口地址調(diào)用存儲(chǔ)在可修改存儲(chǔ)介質(zhì)中的指令替換服務(wù)程序,計(jì)算當(dāng)前地址的堆棧指針SPfix ptjs,其中SPfixpos = SPnew-服務(wù)程序入口地址寄存器中的字節(jié)數(shù),從當(dāng)前地址的堆棧指針指向的位置讀出當(dāng)前地址的程序指針PCeuraent,確定所述PCeunent與第i個(gè)修改點(diǎn)位置是否匹配,如果是執(zhí)行第i個(gè)修改點(diǎn)位置對(duì)應(yīng)的預(yù)設(shè)地址中的替換代碼,否則計(jì)算i = i+1、并繼續(xù)執(zhí)行所述確定操作,直至i > n。
全文摘要
本發(fā)明公開(kāi)了一種指令替換裝置及方法,在當(dāng)前滿(mǎn)足代碼指令替換條件時(shí),替換從地址線(xiàn)上當(dāng)前地址中讀出的指令操作碼。對(duì)于那些僅需替換指令操作碼的指令,后續(xù)繼續(xù)進(jìn)行譯碼和執(zhí)行即可。對(duì)于那些替換內(nèi)容較多的指令,當(dāng)檢測(cè)到當(dāng)前地址中讀出的指令操作碼指示陷阱指令時(shí),執(zhí)行預(yù)設(shè)地址中的替換代碼,間接實(shí)現(xiàn)了指令替換。應(yīng)用本發(fā)明,可以讓現(xiàn)有中央處理器CPU在結(jié)構(gòu)不作大改動(dòng)、且不改變編譯器的前提下,靈活替換固化在CPU的掩膜只讀存儲(chǔ)器MASK ROM中的指令,并且由于無(wú)需修改MASK ROM,也無(wú)需建立函數(shù)入口地址表,實(shí)現(xiàn)成本較低。
文檔編號(hào)G06F9/30GK102681819SQ20111006221
公開(kāi)日2012年9月19日 申請(qǐng)日期2011年3月10日 優(yōu)先權(quán)日2011年3月10日
發(fā)明者彭洪, 湯江遜 申請(qǐng)人:炬力集成電路設(shè)計(jì)有限公司