專利名稱:編譯器生成的程序代碼的優化的制作方法
技術領域:
本發明涉及便攜數據載體的編程,并涉及通過便攜數據載體的程序執行。便攜數據載體在本申請的意義內具體可以是各種設計的芯片卡(smart card,靈通卡)或者芯片模塊。
便攜數據載體在當今共同使用時,具有處理器核心和以不同技術生產的多個存儲器。在典型配置中,例如,提供掩膜編程的(mask-programmed)ROM、電可擦寫和可編程EEPROM和可寫RAM。RAM用作為運行程序期間的工作存儲器,而處理器核心要執行的程序代碼可存儲在ROM和/或EEPROM中。數據載體的這些和類似設計描述在W.Rankl and W.Effing,Hanser Verlag的書“Handbuch der Chipkarten”1999年第三版的3.4節。
一般地,EEPROM中的存儲單元占據大約4倍的ROM存儲單元的芯片面積。為了節省芯片面積,或者為了以同樣面積取得更大的可用存儲容量,因此可希望在ROM中盡可能廣地容納可執行程序代碼。然而,有必要早在掩膜編程的ROM的生產階段,為大量數據載體不可改變地定義掩膜編程的ROM的內容。比較起來,寫入EEPROM,僅僅在完成和初始化一系列數據載體后,或者在個性化單獨的數據載體時執行。因此,由于更大的適應性,可執行程序代碼盡可能廣地存儲在EEPROM中是有利的。這既適用于數據載體的較小產量的編程,也適用于在大產量情形的錯誤修正和附加功能的引入。
因而在便攜載體的編程中存在問題一方面,盡可能廣地使用掩膜編程的ROM和同等存儲器;另一方面,對程序變化和/或對較小產量的數據載體的生產取得盡可能大的適應性。
根據本發明,通過具有權利要求1的特征的方法、根據權利要求8的計算機程序產品和根據權利要求10的便攜數據載體,完全或部分地解決了此問題。各從屬權利要求定義本發明的優選發展。在有關方法的各權利要求中條目化各步驟的順序不被理解為對保護范圍的限制。而是,提供了本發明的各開發,其中這些步驟以不同順序、或者完全或部分并行地、或者彼此完全或部分交織地執行。
本發明來自使用包括用于優化程序代碼目的的多重庫代碼段的預定庫的基本思想。在根據本發明的優化方法中,為在其效果或功能上分別對應一個庫代碼段的程序代碼段,一方面,搜索要優化的程序代碼。這樣的程序代碼段分別由對應的庫代碼段的一個調用替換。優化的程序代碼存儲在數據載體的第一存儲區域中(例如在EEPROM中),而為在第二存儲區域中(例如在ROM中)的存儲提供庫。
在發明人進行的測試中,根據本發明的優化過程導致對第一存儲區域提供的程序代碼的規模的顯著減少。該結果是未預料到的,因為我們會直觀地假定使用實際范圍的庫,僅會找到少部分程序代碼對應庫代碼段。
本發明產生的代碼規模的減少具有結果在具有預定量的存儲器的數據載體的情形,在第一存儲區域中可包括用于附加功能的程序代碼。如果第一存儲區域設計為EEPROM或以等同技術設計,在數據載體的個性化或完成或初始化之后,只需要裝載該程序代碼。由于其簡潔而實現多重功能的程序代碼,因此可既迅速而且甚至對小產量的各數據載體、或甚至對單一數據載體進行改變或重寫。
根據本發明,預定庫位于第二存儲區域中,即例如在掩膜編程的ROM中。通常,根據本發明通過優化得到的程序代碼的節省(saving)少于庫的大小。然而,即使在此情形,由于更好地利用有價值的第一存儲區域,應用本發明也是有利的。如果在編譯器生成的程序代碼中存在多個代碼段,那么其各組在每個情形可分別通過一個單一庫代碼段替換,而如果庫僅僅包含少數不需要的代碼段,那么優化可導致程序代碼收縮甚至多于庫的長度。在此情形,即使第一和第二存儲區域僅僅是同樣的物理存儲區域(field)的概念部分,應用本發明也是有利的。
根據本發明,為了優化目的,為程序代碼段進行搜索,即搜索可由對應的庫代碼段替換的編譯器生成的程序代碼中的部分。在程序生成期間,編程人員不需要考慮隨后的優化過程;特別是,編程人員不需要在用于庫例程的調用的程序中預作安排。因此,本發明不以任何方式使編程更難。
在這里使用的術語的選擇中,術語“程序代碼”或“代碼段”的意圖在于不僅表示在鏈接(linkage)前或后的可執行機器代碼,而且表示對應的匯編源代碼。換言之,在本發明的不同開發中,根據本發明的優化過程既可根據編譯器生成的匯編源代碼執行,也可根據已經匯編的機器代碼執行。在前者的情形,匯編和必要時的鏈接僅僅在優化后執行。同樣地,庫可以在優化期間作為匯編源代碼和/或作為已經匯編的機器代碼是可用的。
一般,無論何時兩個代碼段執行相互對應的功能,庫代碼段對程序代碼段的替換就是可能的。就此而論,可就代碼段的準確效果進行復雜計算,以便例如初始化替換過程,即使代碼段中的個別指令以無害方式交換。在具體地簡單示范性的各實施例中,作為對照,僅僅在代碼段在由其定義的機器代碼方面是相同的條件下進行替換。然而,甚至在此簡單開發的情形,由于例如可能一般不替換具有帶有不在該代碼段中的跳轉目的地的跳轉的代碼段的事實,也需要代碼段的某些分析。
如果使用以類似過程調用的方式包含一個或多個參數(例如存儲地址或者數值)的參數化的代碼段,附加的替換可能跟著發生。
最好,通過插入程序代碼中的子程序調用指令,正常地調用庫代碼段。然后緊跟庫代碼段之后,在庫中提供返回指令。如果要替換的代碼段干擾程序流,該規則的例外就可應用在有些實施例中。例如,如果代碼段以子程序返回指令結束,該調用就可通過跳轉指令正常被實現。
根據本發明,預定義使用的庫,即不依賴在當前優化運行中處理的程序代碼。然而,為了實現可能的最好優化結果,最好設計庫使其包含適當的條目用于程序代碼的頻繁出現的結構。這樣的頻繁出現的代碼部分可具體依賴于數據載體的硬件和/或操作系統和/或依賴于在編譯器生成的程序代碼的生成中使用的編譯器。
根據本發明提供的計算機程序產品具體可以是計算機可讀數據載體,如例如電子或磁或光存儲介質,但其不限于物理數據載體。電或光信號(例如通信鏈路的電壓電平)也理解為這里使用的意義上的計算機程序產品。計算機程序產品包括執行根據本發明的優化步驟的程序代碼。最好,計算機程序產品還包括編譯器和/或匯編器和/或鏈接器和/或裝載器程序。
根據本發明的計算機程序產品和根據本發明的便攜數據載體最好被開發具有對應上述和/或在有關方法的各權利要求中所述的特征的特征。
本發明的進一步的特征、目的和優點通過示范實施例和多個替代實施例的以下說明來揭示。參照示意圖,其中唯一的圖(
圖1)說明本發明的示范實施例中的程序代碼的不同版本的表示和便攜數據載體的表示。
本發明用于便攜數據載體10的編程中,便攜數據載體10在這里描述的示范實施例中設計為芯片卡。數據載體10以其自身已知的方式包括具有處理器核心12的半導體芯片、掩膜編程的ROM 14、EEPROM 16、RAM 18和用于非接觸或接觸綁定(contact-bound)通信的接口20。所述各部件經由總線22彼此連接。在各替代實施例中,三個存儲區域14、16、18可以其它技術設計;具體地,FLASH技術可用于ROM 14和/或EEPROM 16。
第一和第二存儲區域24、26概念性地提供在存儲區域14、16、18中。第一存儲區域24用作接收可執行機器代碼形式的優化的程序代碼。同樣可執行機器代碼形式的預定庫28存儲在第二存儲區域26中。在這里描述的示范實施例中,第一存儲區域24位于EEPROM 16中,而第二存儲區域26位于ROM 14中。除了第二存儲區域26,ROM 14以其自身已知的方式還包括固定預定義的、組成例如數據載體10的操作系統的例程。EEPROM 16還包括文件系統,用于要存儲為數據載體10中的非易失性數據的數據。
庫28具有多重預定義的庫代碼段30A、30B、30C、......,其在下面總地表示為30x。在圖1中,為了清楚表示的原因,庫代碼段30x表示為匯編源代碼。通常,每個庫代碼段30x后緊跟子程序返回指令32A、32B、......(在下面總地表示為32x)。然而,如果由于以下事實,子程序返回指令32x在庫代碼段30x的執行中不能達到,那么子程序返回指令32x可省略,該事實是例如庫代碼段30x的每個程序流在出口結束或者結束在包含在庫代碼段30x中的子程序返回指令。
用于便攜數據載體10的程序開發源于高級語言源代碼34,其在圖1中以編程語言C示范表示。圖1所示的部分等待直到出自單位位置(out from unitposition)的輸入寄存器INPORT的第三位達到值“0”,然后設置輸出寄存器OUTPORT為16進制值“FF”。自身已知的編譯器36將高級語言源代碼34轉換為編譯器生成的程序代碼38,其在圖1中以用于6805指令集的匯編源代碼形式表示。分別根據處理器核心12的其它指令集在各替代實施例中提供。
優化程序40執行對本示范實施例必需的優化步驟。優化程序40處理編譯器生成的程序代碼38,并且訪問有關包含在庫28中的庫代碼段30x的信息。在不同的實施例變體中,該信息可包含例如匯編源代碼的庫28的拷貝和/或可執行機器代碼的庫28的拷貝和/或適當描述語言的各個庫代碼段30x的效果的規范。進而,可提供附加信息如例如索引或hash表,以便加速優化程序40進行的搜索過程。
優化程序40識別包含在編譯器生成的程序代碼38中的程序代碼段42,其在處理器核心12的執行中具有等同于包含在庫28中的庫代碼段30x的功能。相對簡單的過程在本示范實施例中用于此目的,在該過程中,在匯編器源文本級比較編譯器生成的程序代碼38與庫28中的各條目。對于縮寫形式的指令和地址和值信息,在此情形可執行文本比較。作為對照,在比較前,符號跳轉目的地必須轉換為標準形式或者數值相對值。在各替代實施例中,作為對照,可根據已經以匯編的機器代碼的形式表示的編譯器生成的程序代碼38執行優化。
對其在比較過程中已經找到對應的庫代碼段30x的程序代碼段42,在優化過程中通過調用該庫代碼段30x替換。在圖1中,例如,除了跳轉目的地的符號目的地之外,程序代碼段42和庫代碼段30B相同。因此,在優化的程序代碼44中,優化程序40通過調用該庫代碼段30B替換該程序代碼段42。在本例中,該調用設計為子程序調用指令46。因為在本例中程序代碼段42對應7字節長度的機器代碼,而子程序調用指令46僅僅需要3字節,所以優化的程序代碼44需要的存儲空間已經基本上通過替換被減少。
完成優化后,優化的程序代碼44由匯編器48轉換為可由處理器核心12執行的機器代碼。跟隨可能必要的與進一步的程序部分的鏈接操作,在數據載體10的完成或者初始化或者個性化后,將代碼裝入第一存儲區域24。從產生用于數據載體10的芯片之時,第二存儲區域26中已經存在庫28。因此數據載體10準備好使用。上述轉換(translation)、優化和匯編步驟由通用計算機(未顯示在圖1中)執行,通用計算機執行編譯器36、優化程序40和匯編器48。
在數據載體10的操作中,在處理器核心12的程序執行到達第一存儲區域24中的子程序調用指令46的位置時,第二存儲區域26中的庫代碼段30B作為子程序執行。在其效果上,執行的指令準確對應優化期間去除的程序代碼段42。執行這些指令后,由子程序返回命令32B觸發,處理器核心12執行返回,返回到緊隨子程序調用指令46之后的、第一存儲區域24中的指令。
優化期間必須確保不改變各程序功能。因此,例如,具有特定跳轉指令的程序代碼段42應該僅僅根據精確的分析來替換,該跳轉指令可能具有位于程序代碼段42之外的跳轉目的地。如果程序代碼段42的每個可能流結束于出口或者子程序返回,替換是可允許的。但是在這樣的情形,通過正常的跳轉指令而不是通過子程序調用指令,來調用對應的庫代碼段30x。這些考慮甚至還可在生成庫28時包括,使得后者僅僅包含可沒有進一步限制而使用的庫代碼段30x。
庫28應該具有這樣的構造其盡可能經常地提供適當的庫代碼段30x,因而提供盡可能多的優化可能。因此,例如圖1的庫代碼段30B匹配數據載體10的硬件特性。如果該庫代碼段30B中請求的輸入位對應頻繁需要的信號值,就假設甚至對數據載體10的很大不同的應用,對應的程序代碼段42在編譯器生成的程序代碼38中也反復出現。類似地,頻繁的操作系統調用可由對應的庫代碼段30x代替(cover)。用于在編譯器生成的程序代碼38中重復代碼段的進一步的源(source)來源于以下事實根據某些模式(schema)執行編譯器36中的代碼生成,并且作為結果生成遞歸(recurring)代碼結構。
因此,總地來說,為了生成庫28,對為數據載體10的硬件和操作系統指定的多重應用、統計地評估由編譯器36生成的程序代碼38是有利的。
權利要求
1.優化編譯器生成的程序代碼(38)的方法,該編譯器生成的程序代碼計劃用于具有處理器核心(12)和第一和第二存儲區域(24、26)的便攜數據載體(10)提供第一存儲區域(24)以接收優化的程序代碼(44);提供第二存儲區域(26)以接收具有多重庫代碼段(30x)的預定庫(28);以及為至少有關其效果分別對應一個庫代碼段(30x)的程序代碼段(42)搜索編譯器生成的程序代碼(38),由此找到的程序代碼段(42)分別通過對應的庫代碼段(30x)的一個調用被替換。
2.根據權利要求1所述的方法,其特征在于僅僅在兩個代碼段(42、30x)在作為可執行機器代碼的其形式上相同的條件下,程序代碼段(42)由庫代碼段(30x)替換。
3.根據權利要求1所述的方法,其特征在于至少有些庫代碼段(30x)被參數化。
4.根據權利要求1-3的任一所述的方法,其特征在于至少在程序代碼段(42)不干擾程序流的條件下,通過對對應的庫代碼段(30x)的子程序調用指令(46),替換要替換的程序代碼段(42)。
5.根據權利要求1-4的任一所述的方法,其特征在于編譯器生成的程序代碼(38)以匯編源代碼形式存在,并且優化過程在源代碼級上執行。
6.根據權利要求1-5的任一所述的方法,其特征在于預定庫(28)匹配于便攜數據載體(10)的硬件、和/或便攜數據載體(10)的操作系統、和/或在編譯器生成的程序代碼(38)的生成中使用的編譯器(36)。
7.根據權利要求1-6的任一所述的方法,其特征在于第一存儲區域(24)是電可編程的,和/或第二存儲區域(26)是掩膜可編程的,和/或在便攜數據載體(10)中,第一存儲區域(24)比第二存儲區域(26)每個存儲單元占據更多芯片面積。
8.計算機程序產品,包括用于通用計算機的程序指令,所述程序指令使得通用計算機執行根據權利要求1-7的任一所述的方法。
9.根據權利要求8所述的計算機程序產品,其特征在于所述程序指令還實現編譯器(36),用于將高級語言源代碼(34)轉換為編譯器生成的程序代碼(38)。
10.便攜數據載體(10),具有處理器核心(12)、第一存儲區域(24)和第二存儲區域(26),第一存儲區域(24)中包含通過根據權利要求1-7的任一所述的方法生成的優化的程序代碼(44),而第二存儲區域(26)中包含獨立于優化的程序代碼(44)而預定義的、并且具有多重庫代碼段(30x)的庫(28)。
全文摘要
本發明涉及一種用于編譯器生成的程序代碼(38)的優化的方法。由編譯器生成的程序代碼(38)由程序代碼段(42)檢查,程序代碼段(42)至少有關其動作而對應包含在預定庫(28)中的庫代碼段(30x)。因此,通過分別調用對應的庫代碼段(30x),替換找到的程序代碼段(42)。一種計算機程序產品,包括用于執行所述方法的程序指令。一種移動數據載體(10),包括根據所述方法優化的程序代碼(44),并且包括庫。本發明使得移動數據載體(10)中可用的存儲器能夠有效使用,并且對程序修改和/或對相對小量的數據載體(10)的生產提供高度適應性。
文檔編號G06F9/45GK1703674SQ03808472
公開日2005年11月30日 申請日期2003年4月11日 優先權日2002年4月15日
發明者邁克爾·鮑爾迪希韋勒, 沃納·尼斯 申請人:德國捷德有限公司