亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

使得固化程序能夠改變的方法和裝置的制作方法

文檔序號:6412866閱讀:356來源:國知局
專利名稱:使得固化程序能夠改變的方法和裝置的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)程序,特別是那些裝入在微電路存貯器,更一般地說是裝入在配有集成電路的便攜裝置中的程序。該裝置至少包括一個(gè)中央處理器,一個(gè)程序只讀存儲(chǔ)器,一個(gè)可編程的非易失存貯器及一個(gè)工作存貯器。此非易失存貯器可存放數(shù)據(jù)和代碼,中央處理器可通過自身來執(zhí)行此代碼。
在此類裝置中,就目前而言,是將兩種類型非常不同的程序放在一起,一種是在集成電路制造時(shí)裝入的,并且是不能改變的,另一種是根據(jù)需要,在裝置正常使用時(shí)由外部裝入的。
今天,微電路已能從技術(shù)上滿足各種需求。盡管如此,“掩膜”(mask)的實(shí)現(xiàn),也就是只讀存貯器中的程序依然很貴,而且這筆投資會(huì)使許多只希望購買幾千個(gè)卡的“小”客戶望而卻步。一種可考慮的解決辦法是使用已有的掩膜,并在可編程存貯器中再加入客戶需求的功能。
在可編程存貯器中裝入和執(zhí)行附加代碼的可能性帶來了如下優(yōu)點(diǎn),它能很容易地給現(xiàn)有的程序加入新的功能,或使該程序適應(yīng)特殊的需求。
法國專利FR 2655 170記載了一種便攜式電子裝置,它能將代代碼序列注入到非易失存貯器中。可編程非易失存貯器包括一個(gè)專門部分用于包括一個(gè)代代碼序列,該部分被分為一個(gè)指示區(qū),一個(gè)代代碼序列的數(shù)據(jù)區(qū)及一整體控制特征區(qū)。一個(gè)測試指令在只讀存貯器中被啟動(dòng),以讀出和測試指示區(qū),并在合適的時(shí)候?qū)崿F(xiàn)跳轉(zhuǎn)。因此,對應(yīng)于每一跳轉(zhuǎn)指令的一位于可編程存貯器的內(nèi)存區(qū)必須與一測試指令相聯(lián)系。
法國專利申請2667 417可公開了一種微處理器卡,以在可編程存貯器中存放多個(gè)程序,在卡中,被稱作過濾指令與每一在可編程存貯器中的保留編程相關(guān)聯(lián),以構(gòu)成一可由存貯在卡上只讀存貯器中過濾指令執(zhí)行的可訪問的子程序代碼地址存貯裝置。每一過濾指令必須知道包含位于可編程存貯器中相關(guān)代碼的地址的存儲(chǔ)區(qū)地址,它只能一次性地固定存取等級。
上面所舉的兩種解決方案帶來了下述問題。
對于希望裝入許多跳轉(zhuǎn)指令的所屬技術(shù)領(lǐng)域的技術(shù)人員,必須在只讀存貯器程序中及在可編程存貯器特定區(qū)域內(nèi)多次執(zhí)行跳轉(zhuǎn)指令。如果大量此類指令必須被放入到主程序中,那么它在只讀存貯器中所占據(jù)的總空間就會(huì)嚴(yán)重地影響到程序所用的空間。另外,在可編程非易失存貯器中,即使不裝入子程序,也要為指針保留空間,它所占據(jù)的無用空間并不是可忽略不計(jì)的。最后,在寫入后,子程序就不能再改變了。總之,該種解決方案只適用于非常有限數(shù)目的跳轉(zhuǎn)指令及幾個(gè)子程序,無論如何,大量跳轉(zhuǎn)指令和子程序的問題并未解決。
本發(fā)明的目的是提供一種能夠改變現(xiàn)有芯片卡功能,且沒有前述專利中缺點(diǎn)的方法和裝置,它尤其可使得多次調(diào)用子程序。實(shí)際上,根據(jù)本發(fā)明的裝置帶來如下優(yōu)點(diǎn),易于程序工作,使用較少的代碼存儲(chǔ)器,減少所用存儲(chǔ)器的尺寸,可改變或允許各種修改,優(yōu)化執(zhí)行時(shí)間。
為此目的,存貯器中代代碼序列的執(zhí)行設(shè)備包括一能夠執(zhí)行代代碼序列的集成電路,及,一方面一含有主程序及可由集成電路執(zhí)行的其它代代碼序列的第一存貯器,另一方面,一包含可能由集成電路執(zhí)行的代代碼序列的第二存貯器,及第三工作存貯器,其特征是在第二存貯器中有一定位表,它至少有一包含下述裝置第一裝置(INS_INT)的代碼參考數(shù)據(jù)的域,它允許-檢測代碼參考的存在,-在工作存貯器中存貯與代碼參考相關(guān)的地址數(shù)據(jù),及設(shè)置跳轉(zhuǎn)指針DI,并且,包括第二裝置(INS_ORT)的代碼參考數(shù)據(jù)的區(qū)域,允許-檢查改變的指針及-依據(jù)由工作存貯器中內(nèi)容指向的地址執(zhí)行跳轉(zhuǎn)。
根據(jù)另一特點(diǎn),在三個(gè)存貯器之一中與代碼參考相關(guān)聯(lián)的代代碼序列地址數(shù)據(jù)從代碼參考開始計(jì)算。
根據(jù)另一特點(diǎn),一個(gè)第二域包含存在三個(gè)存貯器之一的一個(gè)代代碼序列的地址數(shù)據(jù)單元。
根據(jù)另一特點(diǎn),該設(shè)備在可編程存貯器的可被保護(hù)的區(qū)域內(nèi)有一用于確定第一地址的信息,及用于第一檢驗(yàn)裝置的可能查找方向。
根據(jù)另一特點(diǎn),定位表有一附加的域,用于指出表中下一地址,在表中有與下一代碼參考相對應(yīng)的信息。
根據(jù)另一特點(diǎn),定位表有一附加域,通過與檢驗(yàn)總合的計(jì)算裝置提供的結(jié)果相比較,使得能夠保證前述域和/或相連的代代碼序列的完整性。
根據(jù)另一特點(diǎn),第二裝置有一能在多個(gè)第二裝置可以執(zhí)行跳轉(zhuǎn)到同一序列地址時(shí),在工作存貯器中存入返回地址的裝置。
根據(jù)另一特點(diǎn),該設(shè)備有防止附加代碼寫入的CA1裝置及防止卡更新的PC1裝置。
本發(fā)明另一目的是提供一種新功能的記錄方法。
此目的由在前述要求中任何一個(gè)的設(shè)備中寫入新代碼來實(shí)現(xiàn),其特征是它包括-接收一個(gè)寫指令;-檢查構(gòu)成代碼參考A、B、C的一個(gè)第一域及代表與代碼參考相關(guān)聯(lián)地址的一個(gè)第二區(qū)域AD_lod_A,AD_Cod_B,AD_Cod_C的存在;-檢查構(gòu)成定位表AD_TAB地址的第一地址值是一致的;-檢查沒有ECA標(biāo)志活動(dòng);-檢查由第一域提供的參考不在表中;-設(shè)置在受保護(hù)的可編程存貯區(qū)內(nèi)ECA標(biāo)志為活動(dòng)狀態(tài);-接收并寫入與新代碼相對應(yīng)的信息;-檢查操作正確進(jìn)行并更新定位表;-設(shè)置ECA標(biāo)志為無效狀態(tài)。
根據(jù)另一特征,更新定位表的操作包括在定位表中用與定位表對應(yīng)的要寫入代碼前面的代碼定位字相對應(yīng)的地址上寫入下一地址域。
本發(fā)明的其它特點(diǎn)和優(yōu)點(diǎn)可以通過下述設(shè)備和方法的一個(gè)實(shí)施例來更加清晰地描述,其中所參照的附圖為-

圖1是使用管理定位表的一個(gè)處理方法的變化例的卡的可編程存貯器的一個(gè)劃分。
-圖2是卡的只讀存貯器的一個(gè)劃分例子;-圖3是在主程序中,在主程執(zhí)行過程中的詢問指令序列及隨后的定位指令序列;-圖4是一個(gè)可能的查詢及定位指令序列的例子;-圖5是一個(gè)包含分枝指令代代碼序列執(zhí)行算法的例子;-圖6是包括了定位表和代代碼序列區(qū)的可編程存貯器劃分構(gòu)造的例子;-圖7是包括了定位表和代代碼序列區(qū)的可編程存貯器劃分構(gòu)造的第二個(gè)實(shí)施例;-圖8是一個(gè)構(gòu)成定位指令的代代碼序列執(zhí)行流程圖的例子;-圖9是一個(gè)構(gòu)成序列寫入指令域的例子;-圖10是由寫入指令觸發(fā)的記錄序列執(zhí)行的流程圖;-圖11是使本發(fā)明設(shè)備與方法能夠應(yīng)用的微電路存貯器的構(gòu)成部件。
本發(fā)明通過圖11描述的微處理器卡為例,將在下面詳細(xì)說明。
微處理器卡有一能夠執(zhí)行指令序列的微處理器或集成電路型的中央處理單元(10),一工作存貯器RAM(14),一包含主程序的非易失存貯器ROM(12),一包含數(shù)據(jù)的可編程并可由中央處理單元執(zhí)行的EPROM,EEPROM或FRAM非易失存貯器(11),及通過一鏈接(15)接觸或不接觸地與讀器對話的進(jìn)口/出口裝置(13)。程序在制造時(shí)被刻入到ROM中,因而以后不能被改變。
可編程存貯器(11)被分成幾個(gè)部分,如圖1所示。第一部分(110)的系統(tǒng)區(qū)包含有外部不可讀的系統(tǒng)信息,允許檢查有效性(可靠性和/或完整性)及存貯在存貯器其余部分?jǐn)?shù)據(jù)組或信息(指針…)的位置。標(biāo)明為第二部分的(111)數(shù)據(jù)區(qū)可由外部存取及用作存貯用戶的數(shù)據(jù)。一標(biāo)明為第三部分(112)的定位表包含了一定位表,它由相同的單元構(gòu)成,每一單元由幾個(gè)域構(gòu)成,包括兩個(gè)主域第一個(gè)是代碼“A”、“B”…的參考數(shù)據(jù)單元,第二個(gè)是與存貯在存貯器的第四部分(113)的相應(yīng)的代代碼序列的起始地址AD_Cod_A,AD_Cod_B等。標(biāo)明為第4部分代代碼序列包含了能被主程序調(diào)用的代代碼序列。要注意,在本發(fā)明的變化例中,定位表或代代碼序列可被載入到工作存貯器(RAM)中,而不是EEPROM中。
被稱作AD_TAB的定位表起始地址被存貯在系統(tǒng)區(qū),一個(gè)標(biāo)明為SENS的第二數(shù)據(jù)單元決定指針按那個(gè)方向讀此表,或是按地址增加地方向,或是按地址減小的方向。因而AD_TAB和SENS值的地址可以是本發(fā)明中存貯在ROM中的程序所知的唯一數(shù)據(jù)。這對于以字節(jié)存貯大小或定位表的最大單元數(shù)(TaTa)是有益的。
這里是一個(gè)使用發(fā)明方法說明跳轉(zhuǎn)進(jìn)程的優(yōu)點(diǎn)的例子。主程序可以是包含能夠執(zhí)行信息的加密/解密式某些確認(rèn)功能的算法,比如D.E.S(數(shù)據(jù)加密標(biāo)準(zhǔn))。用另一種算法代替此算法,或完全改變其執(zhí)行,以使其,例如更快,是有益的。算法代碼在操作系統(tǒng)的ROM存貯器中構(gòu)成了一塊,此代碼不能被改變,它能在主程序的不同地方被調(diào)用。
參看圖2更易了解此例,還有其它內(nèi)容的包含主程序的ROM存貯器被分為3個(gè)部分。第一部分在加電后實(shí)現(xiàn)卡的初始化工作存貯器的測試,卡狀態(tài)的讀入,響應(yīng)復(fù)位的字節(jié)的發(fā)送。第二部分包括一應(yīng)用程序,它根據(jù)終端的要求執(zhí)行不同指令。(第一部分代碼總是在第二部分之前執(zhí)行)。第一部分和第二部分構(gòu)成了主程序。第三部分包括“睡眠”代碼,其作用在后面解釋。
我們想修改功能的被稱為ALGO-1的算法被裝在應(yīng)用部分。在此例子中,此算法在代碼的5個(gè)不同部分被調(diào)用。新的算法被預(yù)先裝入到可編程存貯器的代代碼序列部分,定位表已被更新,其代代碼序列的執(zhí)行地址是AD_Cod_A。
加電時(shí),主程序執(zhí)行初始化部分,在這部分有到ALOG_1的第一個(gè)跳轉(zhuǎn),記作“APPEL_0”,可以注意到,在這里不會(huì)有跳轉(zhuǎn)發(fā)生,因而此跳轉(zhuǎn)也不會(huì)由任何跳轉(zhuǎn)指令限制。在這部分還有一個(gè)詢問指令序列INS_INT_A,它是編程者特別置此部分的,以保證在執(zhí)行應(yīng)用程序部分之前至少執(zhí)行一次。在此例子中,與此詢問指令序列相關(guān)聯(lián)的代碼參考是“A”,它被寫入主程序中。在第一時(shí)期,詢問指令在系統(tǒng)區(qū)中查找定位表AD_TAB的地址。然后,從此地址開始,按照“SENS”的值在地址增加或減小方向上,讀取表中每一個(gè)單元。將與代碼參考相對應(yīng)的第一域的值與“A”值相比較。如果在定位表的第一域中找到“A”值,相應(yīng)的第二域(AD_Cod_A)的值被讀入和存貯在工作存貯器(RAM)的寄存器AD_SAUT中,并且工作存貯器中的跳轉(zhuǎn)指示(DI)放置于有效位置。
當(dāng)DI處于無效時(shí),子程序ALGO_1由在主程序中的APPEL_0,APPEL_1,APPEL_4調(diào)用5次。對于APPEL_1,APPEL_2和APPEL_3,在跳轉(zhuǎn)指示DI有效的時(shí)候,將實(shí)現(xiàn)向可位于只讀存貯器或可編程存貯器中程序ALGO_2的跳轉(zhuǎn),這是因?yàn)榫幊陶咴诿恳挥行D(zhuǎn)到在ALGO_1中的指令A(yù)PPEL_1,APPEL_2,APPEL_3前的主程序中實(shí)施了定位指令I(lǐng)NS_ORT_1,INS_ORT_2和INS_ORT_3。如圖3所示,定位指令包括測試跳轉(zhuǎn)指示是否有效。如果跳轉(zhuǎn)指示未活動(dòng),主程序繼續(xù)其通常過程,并執(zhí)行ROM中算法,例如執(zhí)行向ALGO_1的跳轉(zhuǎn)APPEL_1。如果跳轉(zhuǎn)指示DI活動(dòng),定位指令將使程序跳轉(zhuǎn)到由寄存器AD_SAUT的內(nèi)容指向的地址。預(yù)先存在寄存器AD_SAUT中的AD_Cod_A的值被裝入到中央處理單元的程序計(jì)數(shù)器中,在被裝入地址的代代碼序列被執(zhí)行。另一方面,如編程者希望,子程序ALGO_1由APPEL_4在沒有任何跳轉(zhuǎn)的可能下被調(diào)用,因?yàn)闆]有任何跳轉(zhuǎn)指令與其相關(guān)聯(lián)。
要注意到,定位和詢問指令表達(dá)式是由一系列可由中央處理單元執(zhí)行的基本指令集構(gòu)成的宏指令。
當(dāng)指針保持在活動(dòng)的情況下,同一定位指令可被執(zhí)行無限多次,跳轉(zhuǎn)總是按AD_SAUT中存貯的地址執(zhí)行。同樣地,如圖2所示,有同一代碼參考“A”的多個(gè)定位指令“INS_ORT_1”,INS_ORT_2,INS_ORT_3可在主程序中執(zhí)行,它們的執(zhí)行產(chǎn)生同樣的效果。在此情況下,特別要注意的是主程序的返回地址,例子中返回指令的實(shí)現(xiàn)將在下面介紹。
在一般規(guī)則下,編程者必須要考慮在所有定位指令之前至少要有一個(gè)詢問指令序列被執(zhí)行。如果該指令序列只被執(zhí)行一次,一個(gè)用于使跳轉(zhuǎn)指示DI無效的跳轉(zhuǎn)指示DI的擦除指令將被代代碼序列所執(zhí)行。因此,在返回主程序后,在執(zhí)行以下的定位指令時(shí),不會(huì)執(zhí)行任何跳轉(zhuǎn)。
在這個(gè)例子的說明下,顯示出了公開詢問指令和跳轉(zhuǎn)指令的第一個(gè)優(yōu)點(diǎn)。代碼中較難制造,因而較貴的詢問指令序列只裝入程序中一次。那些在存貯器中非常短的及較便宜的定位指令序列,在需要的時(shí)候裝入可編程存貯器的空間中。
跳轉(zhuǎn)指示DI可非常有效地由寄存器AD_SAUT的特定值所取代。如果寄存器中包含一個(gè)“零”值,它不是一個(gè)對于一給定部件的非易失存貯器的有效地址,這意味著主程序不進(jìn)行任何跳轉(zhuǎn)。同樣,如果存貯器AD_TAB中有一與定位表起始值不一樣的值(比如“零”值),可以認(rèn)為沒有任何序列可用,因而不會(huì)有任何的跳轉(zhuǎn)。
如圖4所示,可在主程序中引入幾個(gè)詢問指令(INS_INT_A,INS_INT_B)。每一此種指令在可編程存貯器中有其自己的參考代碼并在程序存貯器中在定位表的諸初始化值中查找該碼的存在。如果此代碼值在表中,與其相并的代代碼序列的地址被裝入到工作寄存器AD_SAUT中。因此,一個(gè)詢問指令的執(zhí)行將擦除和更換前一詢問指令在寄存器AD_SAUT中更新的值。
如果前一詢問指令在寄存器中更新跳轉(zhuǎn)地址,而如果有一不同參考代碼的第二詢問指令被執(zhí)行,并且沒有在定位表中找到其參考代碼,只需擦除前面的AD_SAUT的值即可,因而取消所有跳轉(zhuǎn),直到下一詢問指令。如果保留前面的值從而保留跳轉(zhuǎn),也屬本發(fā)明的范圍。
在定位表中寫入代碼參考的第二個(gè)優(yōu)點(diǎn)是,此表中只包含有用的數(shù)據(jù),它們只涉及主程序中希望的有效跳轉(zhuǎn)。因而無論怎樣,其尺寸是優(yōu)化的,并增加了存貯空間。
有利地,可以在主程序中存放不被主程序調(diào)用的代代碼序列。在本發(fā)明的設(shè)備的幫助下,可以給每一序列一對應(yīng)的代碼參考,并與序列起始地址一起存放在定位表中。因此,可以在便攜式設(shè)備的可編程存貯器中激活此“睡眠”代碼。
有利地,可以通過定位指令為同一代代碼序列定義多個(gè)入口點(diǎn),并使其對應(yīng)不同的參考代碼。同樣,幾個(gè)序列,比如“A”,“B”和“C”可以組成一個(gè)單一序列,并與參考代碼“A”及其入口點(diǎn)AD_Cod_A一起寫入可編程存貯器,其它兩個(gè)代碼參考及其入口點(diǎn)接著寫入。一個(gè)允許此操作的定位表的例子將在較后的位置描述(圖7)。
參照圖5,將描述詢問指令的執(zhí)行。此指令的入口參數(shù)是與將在下一定位指令執(zhí)行時(shí)的代代碼序列相對應(yīng)的參考代碼的值,被標(biāo)記為“X”,在此例中,此值是“X”。在第1步,執(zhí)行詢問指令序列的主程序在系統(tǒng)區(qū)在地址@讀AD_TAB的內(nèi)容,對于ROM中的程序,@是已知的,AD_TAB是定位表的起始地址。第2步,詢問指令序列檢測字讀。如果字讀無效,那么在定位表中不存在任何可用于執(zhí)行的跳轉(zhuǎn)代碼。詢問指令序列被終止,并且跳轉(zhuǎn)指示DI無效(步驟10)。如果字讀有效,詢問指令序列在第3步,在工作存貯器用所讀值A(chǔ)D_TAB更新一指針,比如AD_SAUT。然后到第4步,詢問指令序列依據(jù)此指針讀入指向表中的一單元。詢問序列的第5步,與代碼參考相對應(yīng)的域的值與作為輸入?yún)?shù)所提供的參考代碼值“X”相比較。如果兩值相同,詢問序列在第8步將跳轉(zhuǎn)指示DI置為有效狀態(tài)。借助于指針,詢問序列在第9步從定位表中讀出緊挨在參考代碼后的地址值“AD_Cod_X”。此值被存入到工作存貯器RAM中的寄存器AD_SAUT中。如果兩參考代碼的值不同,在第6步,指針被更新以指示定位表中下一參考代碼。此更新要考慮表中每一單元的大小,如果,例如,表是由32比特的諸個(gè)字構(gòu)成,為尋址字節(jié)(8比特)指針值要增長4。詢問序列在第7步測試指針尋址的可編程存貯器的字是否還在定位表中。此測試與表的組織有關(guān),下面將舉幾個(gè)例子。如果所指示的字不在表中,詢問指令序列將被中止,而跳轉(zhuǎn)指示DI將由第10步置于無效狀態(tài)。如果指示的字還在定位表中,詢問序列回到第4步。
在詢問指令序列終末,跳轉(zhuǎn)指示DI總是被設(shè)置,如果是有效狀態(tài),A_SAUT右的值有效。有利地,詢問指令序列可由編寫主程序的程序員以子程序的方式寫入,并且一方面,對于入口參數(shù)在表中查找參考代碼,如“X”,及可能的返回地址,另一方面,對于出口參數(shù),就是一個(gè)指定是否必須實(shí)施跳轉(zhuǎn)的跳轉(zhuǎn)指示DI。在初始化時(shí),可以執(zhí)行讀定位表,及在工作存貯器中存入所有與存在的參考代碼相對應(yīng)的地址,這可以避免在每一詢問指令掃描表及不存在的代碼。
圖6表示定位表的一個(gè)例子。此表由32位的定位字組成。例如,一個(gè)字的第一域包含有參考代碼。例如兩個(gè)隨后的字的第二域,包含有代碼序列開頭的地址于不丟失信息的存儲(chǔ)器中。最后一域,例如為一個(gè)字,為任選的,可以包含一個(gè)校驗(yàn)和的碼(CHK_A),能夠查對前面兩個(gè)域或附加的代碼序列的數(shù)值的完整。在此定位表中,單元間相互連接跟隨。當(dāng)后面的字為未用過的時(shí),即達(dá)到表的結(jié)束。在系統(tǒng)區(qū)讀出的數(shù)值SENS表示表指針記錄器移動(dòng)的方向經(jīng)由增大或變小的地址。圖6中是選擇的增大地址的方向。
當(dāng)包含有大量單元時(shí),這種表的排列是很有利的。事實(shí)上,這些單元的參考 代碼能依一定的次序分類,因而表中的這些單元的編排能按增大的參考“A”、“B”、“C”、“D”、“E”、…或減小的參考“Z”、“Y”、“X”、“W”、…進(jìn)行。表的字的劃分尺度是確定的。劃分尺度或者儲(chǔ)存在系統(tǒng)區(qū)的一個(gè)區(qū)域(圖1的TATA)內(nèi),或者在初始化時(shí)對表進(jìn)行一次預(yù)先讀出。在尋找一個(gè)一定的參考代碼時(shí)于是可以使用tri算法。例如,在AD_TAB中包含的數(shù)值上加上先行確定的表的字?jǐn)?shù)目的一半,用處于表中央的單元的地址對記錄指針進(jìn)行初始化,之后被記錄指針讀出的參考代碼和要尋找的參考代碼進(jìn)行比較,結(jié)果指針向前或向后移動(dòng),然后指向余下的一個(gè)待探尋區(qū)域的中央。這種機(jī)制在尋找表中代碼的一個(gè)參考時(shí)能節(jié)省時(shí)間。這樣,如果表中有n個(gè)有序單元,典型的尋找方式從一個(gè)單元到下一個(gè)單元平均要讀n/2個(gè)單元才能找好。而前面指出的尋找法則讀(log n)個(gè)單元便可找到。當(dāng)n很大時(shí)這是一個(gè)優(yōu)點(diǎn)。
如果掃描過整個(gè)表后表中沒有一個(gè)被讀的數(shù)值有被找的參考“A”,則從主程序向代代碼序列“A”的跳轉(zhuǎn)便不能實(shí)現(xiàn),工作存儲(chǔ)器中的一個(gè)跳轉(zhuǎn)指示DI此時(shí)被置于無效狀態(tài)。
這種安排迫使程序員從初次寫入一列代碼時(shí)必需預(yù)見到定位表的劃分尺度,使得在AD_TAB的數(shù)值后面留有足夠的存儲(chǔ)空間以完成此表并最后寫入其他序列的代碼。
實(shí)現(xiàn)定位表的一個(gè)不同辦法可以只包含代碼的參考。這時(shí)詢問指令程序?qū)⑦\(yùn)用一種以代碼的參考作為進(jìn)入?yún)?shù)的算法計(jì)算跳轉(zhuǎn)的地址。
圖7表示定位表的另一個(gè)例子,它使程序員能不必預(yù)知存儲(chǔ)器TATA中對應(yīng)其劃分尺度的信息、或?qū)Ρ碜饕淮晤A(yù)讀出以確定其劃分尺度。此表包含有比前面更多的三域參考代碼的數(shù)值、代碼序列開頭地址和校驗(yàn)和(Check Sum)更多一域的定位字。這個(gè)增加的域比如占有第四或第五個(gè)字,它包含有定位表中隨后單元的地址值。此表以如下方式讀出對應(yīng)第一代代碼序列的定位字位于地址AD_TAB處,參考代碼為“A”且該序列在地址AD_Cod_A處開始,后面的定位字位于地址AD_TT2處。處于這個(gè)地址AD_TT2處的為對應(yīng)于第二個(gè)代代碼序列的字,它有“B”作參考代碼,且在地址AD_Cod_B處開始。下一個(gè)字位于地址AD_TT3處,如此不斷。當(dāng)隨后的定位字的地址值例如是“NULL”時(shí)表便達(dá)到結(jié)束。在此例子中要注意參考代碼“C”和“D”的序列屬于同一塊。該塊事實(shí)上有兩個(gè)進(jìn)入點(diǎn)AD_Cod_C和AD_Cod_D。可以把一列或幾列代碼、或這些序列的部份寫入可編程存儲(chǔ)器的數(shù)據(jù)區(qū)中。這時(shí),建議將其輸入一個(gè)如主程序的應(yīng)用部分那種區(qū)分和了解清楚的區(qū)域中,或者有時(shí)可能出于安全考慮停止由外部對其進(jìn)行讀。
下面將通過圖8對一列定位指令的進(jìn)程予以說明。在階段11,定位序列檢驗(yàn)跳轉(zhuǎn)指示DI。如果無效,主程序繼續(xù)在序列中。如果跳轉(zhuǎn)指示DI起作用,經(jīng)返回地址儲(chǔ)存進(jìn)入主程序,序列繼續(xù)進(jìn)到階段12。這次存儲(chǔ)是任選的,因?yàn)樵谒蟹绞街惺切蛄袥Q定了返回進(jìn)入主程序或別處的地址。如果能有幾個(gè)定位指令序列都調(diào)用同一個(gè)代碼序列,則儲(chǔ)存每個(gè)定位指令序列各自特有的返回地址使能回到引起跳轉(zhuǎn)發(fā)生的指令附近是有意思的。此存儲(chǔ)可在一個(gè)工作寄存器AD_RET或堆中進(jìn)行。在后一情況,存儲(chǔ)在可編程存儲(chǔ)器中的此代代碼序列被看作一個(gè)子程序,它用例如一個(gè)叫“從子程序返回”(“RTS”)的特征碼作為結(jié)尾。之后在階段13,此定位序列以向先前的詢問序列儲(chǔ)存于工作存儲(chǔ)寄存器AD_SAUT中的地址處開始的代代碼序列的一次跳轉(zhuǎn)而結(jié)束。
下面將說明新的代碼序列的寫入和定位表的更新。
代碼序列的一個(gè)寫指令ECR_SEQ_E由輸入輸出裝置(13)從外部送至卡處。此指令的數(shù)據(jù)分解為幾個(gè)域,如圖9所示。指令ECR_SEQ_E包含-在第一域中有參考代碼“A”、“B”、…,-在第二域中有序列開端的地址,-在任選的第三域中有序列劃分尺度,即要寫入的字?jǐn)?shù)目,-在任選的第四域中為序列,即要寫入的字。
當(dāng)代碼序列已被寫入不丟失信息的存儲(chǔ)器(FRAM、EPROM、EEPROM或ROM)中時(shí)第三和第四域無用。
圖10表示一個(gè)程序方框圖,說明一個(gè)新序列E的寫指令ECRSEQ_E的執(zhí)行程序PEN R的展開。在階段21,指令被送至卡上且指令的前面兩個(gè)域被進(jìn)行分析。一旦被送至卡的這種指令被認(rèn)可,寫管理程序能檢驗(yàn)出AD_TAB中的數(shù)值為一致的。如果相反,定位表不能運(yùn)轉(zhuǎn),便不可能將一個(gè)新的代碼序列寫入且指令被中斷。
在階段211如果一個(gè)標(biāo)志ECA為無效,程序仍然繼續(xù)在此階段,否則程序的執(zhí)行便被中斷。
在階段22寫程序會(huì)查對一個(gè)同樣的參考是否已寫入。如果該表已包含有一個(gè)代碼的參考和這收到的一個(gè)相同,該指令即被中斷。本發(fā)明這種特有的檢查較之前述的以往技術(shù)表現(xiàn)出真正的優(yōu)越性,因?yàn)樗懿恢洛e(cuò)誤地寫入兩個(gè)有著同一個(gè)參考的兩列代碼。在階段23此寫管理程序在不丟失信息的存儲(chǔ)器上使一個(gè)標(biāo)志ECA_en_cours(Ecriture de Code Additionnel en cours)恢復(fù)有效,其意思是對一個(gè)新序列的寫正在進(jìn)行。之后在階段24,程序PENR檢驗(yàn)待寫入碼的字?jǐn)?shù)目。如果數(shù)目為零,則沒有一個(gè)新的代碼序列要寫入且只有一個(gè)新的碼參考要補(bǔ)入表中。這是在ROM上激活“睡眠”碼或從一個(gè)入口點(diǎn)向一個(gè)已經(jīng)寫入可編程序存儲(chǔ)器中的代碼序列進(jìn)行補(bǔ)加的情況。
如果待寫入碼的字?jǐn)?shù)目不為零,卡便按照階段25的接收方式更新。字被收到,按照選擇的方式可以是解密的或是原信號,之后在ECR_SEQ_E指令的第二域中規(guī)定的該序列開端的地址處被自動(dòng)寫入中。在所有這些情況下,寫地址應(yīng)該是未用過的,否則指令被中斷并將標(biāo)志ECA_en_cours激活,其結(jié)果是將卡最終關(guān)閉,除了以下敘述的重寫機(jī)制的情況不是這樣。一旦收到的各個(gè)代碼和被寫入的相應(yīng)序列的字由程序(PENR),在階段26檢驗(yàn)是否寫入進(jìn)行得正確。做到這點(diǎn)的一個(gè)方法是從寫入的字?jǐn)?shù)值及其地址出發(fā)精心擬制一個(gè)校驗(yàn)和(CheckSum)計(jì)算法或一個(gè)標(biāo)記。在階段27,程序(PENR)檢測被寫的碼的有效性。如果寫入進(jìn)行得不好,指令即中斷并將標(biāo)志ECA_en_cours激活。
如果寫入進(jìn)行得正確或沒有代碼序列要寫入,在階段28,程序PENR便將定位表更新,同時(shí)寫入新的定位字。在圖6描述的表的圖解中此新的定位字在最后一個(gè)字之后立即寫入。程序PENR依照SENS中指出的方向進(jìn)展、從地址AD_TAB起開始掃過表格而確定出最后一個(gè)單元。寫入定位字第三域中的校驗(yàn)和(CheckSum)可以由外部不加區(qū)別地送去或由卡計(jì)算出。這個(gè)校驗(yàn)和(CheckSum)可以是簡單的總數(shù)或字的異“或”(XOR)類型或密碼類型,可以在表中的字上攜帶或插入和此字有聯(lián)系的代碼序列。在圖7描述的表的圖解中,新字被寫入表的各序列和定位字的區(qū)域的一個(gè)未用過的地方。程序PENR也應(yīng)該改變在表最后一域前面的第三域,使它包含此新的代碼序列“E”的地址AD_Cod_E。
在程序PENR的階段29,當(dāng)所有操作進(jìn)行都對時(shí),標(biāo)志ECA_en_cours被恢復(fù)為無效。這個(gè)的主要結(jié)果是使定位表和各序列成為有效的。如果指令的執(zhí)行不正確,則程序PENR向外部送出的出錯(cuò)信息會(huì)把錯(cuò)誤類別通知用戶。
應(yīng)該記下為寫入AD_TAB或SENS的內(nèi)容的特殊情況。事實(shí)上,前面的敘述只對一個(gè)已經(jīng)開始的定位表有效。要提醒的是,AD_TAB包含定位表開頭的地址,以及如果此表如圖6所述那樣編制的話,域SENS表示的是在此表中掃描的方向。
使用圖9中敘述的數(shù)據(jù)格式可以為寫入AD_TAB以及或者SENS的內(nèi)容而提供一個(gè)特殊的碼參考。始終參考圖9,對于此特殊參考,域AD_Cod_A無效,而含有該序列碼的域包含有要放到AD_TAB及可能SENS中的內(nèi)容。
另一個(gè)做法,也是對于輸入全部數(shù)據(jù)(代碼序列、定位表的單元、…)有效的方法,為使用如下格式開始寫的地址字?jǐn)?shù)目數(shù)據(jù)這種方法的根本優(yōu)點(diǎn)是附加代碼設(shè)計(jì)者負(fù)責(zé)可以寫入不管怎么樣的數(shù)據(jù)。
為了識(shí)別一個(gè)操作系統(tǒng)或它的某些特征只要在加電卡時(shí)由卡送去識(shí)別字便可。加電是在能夠和一張卡對話前必不可少的一次操作。分析定位表的指針AD_SAUT和表本身,操作系統(tǒng)能夠以內(nèi)部方式建立它對復(fù)位到零的反應(yīng)。
從卡外部送來的一個(gè)代碼序列的無效指令I(lǐng)NS_INA_C的目的是由它的處理程序(PINA)使對應(yīng)于一定的參考代碼例如C的一次跳轉(zhuǎn)失效。一個(gè)最初做的方法是擦除和此代碼有關(guān)的所有數(shù)據(jù)定位表中的單元和對應(yīng)的整個(gè)序列,然后把定位表更新。第二個(gè)更快的實(shí)施方法是改變定位表中有待由另一個(gè)數(shù)值例如“NULL”去取消的代碼序列所對應(yīng)的參考代碼。此代碼不再存在,沒有一個(gè)詢問指令能將工作存儲(chǔ)器AD_SAUT更新以執(zhí)行此序列。最后一個(gè)方法是用一個(gè)不可能的地址值例如“NULL”去代替定位表中的地址值,或者繼續(xù)將調(diào)用程序引向一個(gè)“返回控制”的簡單的代碼序列。這最后一個(gè)實(shí)施辦法對于被寫入ROM中的代碼序列是十分合適的,此睡眠碼因此能很容易就被激活或無效。
寫入從卡外部來的重寫INS_REG的目的是經(jīng)由其處理程序PREG擦除一個(gè)或幾個(gè)代碼序列或表的一些單元或,一般說,一數(shù)據(jù)集。幾個(gè)方法都是可能的一個(gè)存儲(chǔ)空間的開端和結(jié)尾的地址被送至卡,而此空間的所有字均被擦除。這個(gè)有點(diǎn)“粗”的方法應(yīng)該小心使用,以免使不該擦除的序列變得不能使用。另一個(gè)方法是在卡上確定要擦除的參考代碼的碼和存在可編程序存儲(chǔ)器中的這些代碼序列,在一次這樣的指令之后,此程序應(yīng)確定對應(yīng)表單元的地址,然后擦除這些單元并確定代碼序列開頭和結(jié)尾處的地址,最后擦除內(nèi)容。尋找這些地址然后將表更新的方法取決于定位表的結(jié)構(gòu),見圖6圖7。此方法對熟練技術(shù)人員不成問題,因而沒有必要解釋。
最后一個(gè)指令REC_ESP_VRG能使表和代碼序列容易更新,為尋找未用過空間。此指令不帶特殊數(shù)據(jù)、被送至卡,它能夠由此指令的處理程序PREV把可編程序存儲(chǔ)器(11)的未用過的空間和這些空間中每個(gè)的開頭和結(jié)尾處的地址送到外面。希望添加代代碼序列的用戶在這個(gè)指令后檢驗(yàn)可用空間是否足夠,并確定出此代碼序列和其存貯地址的關(guān)系。
在一個(gè)可以核查該附加代碼序列的完整的不同實(shí)現(xiàn)方案中,在定位指令序列中正要實(shí)現(xiàn)跳轉(zhuǎn)前,在定位表的每一個(gè)單元中這時(shí)需要提供兩個(gè)增補(bǔ)域一個(gè)說明和該單元有關(guān)的附加代碼序列的劃分尺度的第一增補(bǔ)域,和一個(gè)正確含有初始化的校驗(yàn)和(CheckSum)的第二個(gè)增補(bǔ)域。
如果計(jì)算出的校驗(yàn)和(CheckSum)和開始的不同,則操作系統(tǒng)停止執(zhí)行,發(fā)出一個(gè)適當(dāng)狀態(tài)的字。此法的好處是在新的代碼序列每次執(zhí)行之前都要進(jìn)行一次校驗(yàn),但增加有關(guān)指令的執(zhí)行時(shí)間,可以在第一次執(zhí)行時(shí)限于進(jìn)行此校驗(yàn)。
此第二個(gè)方法在于提供一個(gè)專門指指令,對可編程序存儲(chǔ)器的一個(gè)區(qū)域進(jìn)行一次校驗(yàn)和(CheckSum)的計(jì)算,并將計(jì)算值和提供的或預(yù)先寫入域CHK_X中的數(shù)值進(jìn)行比較。這樣系統(tǒng)管理員可定期激活此指令以查明一切良好。
一個(gè)支持寫和執(zhí)行附加碼的操作系統(tǒng)可通過可編程序存儲(chǔ)器上如下的阻斷符而受到控制以降低其容量-CAI附加碼阻斷,在整個(gè)寫前由操作系統(tǒng)檢測,-RCI卡重寫阻斷,這些阻斷符從管理上看是與管理卡的操作系統(tǒng)的阻斷符(lock)相似的。在整個(gè)重寫前由操作系統(tǒng)檢測。
這種容量的一個(gè)利用是改變EEPROM(11)上的附加碼然后將阻斷符RCI和CAI定位,以便使添加的碼固定。
當(dāng)然,本發(fā)明毫不限于上述實(shí)施例,而是相反,包括構(gòu)成如同其組合一樣精確描述的方法的同樣技術(shù)的的所有方法,如果它們的實(shí)現(xiàn)是在本發(fā)明的宗旨下,并在下面權(quán)利要求的范圍里使用。
權(quán)利要求
1.在一個(gè)存儲(chǔ)器中執(zhí)行代碼序列的裝置,包括一個(gè)執(zhí)行代碼序列的集成電路(10),一個(gè)存儲(chǔ)器(12)含有一個(gè)主程序以及可能可由此集成電路執(zhí)行的其它代碼序列,或許可能含有此集成電路可執(zhí)行的代碼序列的一個(gè)非易失可編程序的第二存儲(chǔ)器(11),以及一個(gè)第三個(gè)工作存儲(chǔ)器(14),其特征在于,第二存儲(chǔ)器(11)中包含有一個(gè)定位表,該表包含有至少一個(gè)域,該域包含有第一裝置INS INT的代碼參考數(shù)據(jù)單元的使得以下成為可能-檢驗(yàn)代碼參考的存在,-在工作存儲(chǔ)器中存入和該代碼參考有關(guān)的地址數(shù)據(jù)單元,并設(shè)置一個(gè)跳轉(zhuǎn)指示DI,第二裝置(INS_ORT)的代碼參考數(shù)據(jù)單元可以-檢測跳轉(zhuǎn)指示DI,以及-向工作存儲(chǔ)器AD_SAUT的內(nèi)容指出的地址進(jìn)行一次跳轉(zhuǎn)。
2.按照權(quán)利要求1的裝置,其特征在于,在三個(gè)存儲(chǔ)器之一中包含的一個(gè)代碼序列的和代碼參考相聯(lián)的地址數(shù)據(jù)單元為從該代碼參考計(jì)算得的。
3.按照權(quán)利要求1的裝置,其特征在于,一個(gè)第二域包含有在三個(gè)存儲(chǔ)器之一中包含的一個(gè)代碼序列的地址數(shù)據(jù)單元。
4.按照權(quán)利要求1的裝置,其特征在于,它在可編程序存儲(chǔ)器(11)的一個(gè)可被保護(hù)的區(qū)域中裝有一個(gè)數(shù)據(jù)單元(AD_TAB),可確定第一地址以及或許第一類檢驗(yàn)裝置所用的搜索的方向(SENS)。
5.按照權(quán)利要求1的裝置,其特征在于,定位表有一個(gè)增補(bǔ)域(AD_TT),指示對應(yīng)后面的代碼參考的信息在表中的地址,即隨后的地址。
6.按照權(quán)利要求1的裝置,其特征在于,此定位表有一個(gè)增補(bǔ)域(CHK),通過與由校驗(yàn)和計(jì)算裝置提供的結(jié)果的比較比較可保證以前的域和/或附加代碼序列的完整。
7.按照權(quán)利要求1的裝置,其特征在于,當(dāng)為向同一個(gè)序列地址執(zhí)行一次跳轉(zhuǎn)有幾個(gè)第二裝置可用時(shí),此第二種裝置包括在一次跳轉(zhuǎn)之后在工作存儲(chǔ)器(AD_RET)上存儲(chǔ)一個(gè)返回地址的裝置。
8. 按照權(quán)利要求1的裝置,其特征在于,它包括有阻止寫一個(gè)附加代碼的裝置CAI和阻止卡的一次重寫的裝置RCI。
9.在按照權(quán)利要求4的一個(gè)裝置中寫一個(gè)新碼的方法,其特征在于它-接收一個(gè)寫指令;-檢驗(yàn)一個(gè)構(gòu)成代碼參考A、B、C…的第一域和表示和代碼參考相聯(lián)系的地址AD_Cod_A、AD_Cod_B、AD_Cod_C…的一個(gè)第二域的存在;-檢驗(yàn)沒有一個(gè)標(biāo)志ECA有效;-檢驗(yàn)第一地址(AD_TAB)的數(shù)值為一致的;-核查第一域提供的參考在表中不存在;-將標(biāo)志ECA放入被保護(hù)的可編程序存儲(chǔ)器的處于激活態(tài)的區(qū)域中;-接收和寫入對應(yīng)于新代碼的信息;-檢驗(yàn)操作執(zhí)行正確以及將定位表更新;-將標(biāo)志ECA置于非激活態(tài)。
10.按照權(quán)利要求9的方法,其特征在于,將表更新的操作包括在定位表中的下一個(gè)地址域?qū)懭牖虮粚懭氪a的前面的碼的定位字對應(yīng)的地址。
全文摘要
能對一個(gè)固化程序進(jìn)行改變的方法本發(fā)明涉及一種代碼序列的編制裝置,它包含有一個(gè)集成電路(10)能編制代碼序列,另外一方面有一個(gè)第一存儲(chǔ)器(12)包含一個(gè)主程序以及可能其他的可由此集成電路編制的代碼序列,另一方面有一個(gè)不會(huì)丟失信息的可編程序的第二存儲(chǔ)器(11)可能包含此集成電路可編制的代碼序列,以及一個(gè)第三工作存儲(chǔ)器(14),裝置的特征在于,第二存儲(chǔ)器(11)中包含的一個(gè)定位表包含有至少一個(gè)域,此域包含有碼參考的一個(gè)數(shù)據(jù):第一種方法(INS_INT)可以:-檢驗(yàn)碼的一個(gè)參考的存在,-在工作存儲(chǔ)器中存入和該碼參考有關(guān)的地址的數(shù)據(jù),并放置一個(gè)跳轉(zhuǎn)指示DI,第二類方法(INS_ORT)可以:-檢測跳轉(zhuǎn)指示DI,-向工作存儲(chǔ)器AD_SAUT的內(nèi)容指出的地址進(jìn)行一次跳轉(zhuǎn)。
文檔編號G06F9/40GK1189901SQ9719045
公開日1998年8月5日 申請日期1997年4月29日 優(yōu)先權(quán)日1996年4月30日
發(fā)明者阿扎達(dá)利·那索 申請人:Cp8川薩克公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1