著录项信息
专利名称 | 优化编译器生成的程序代码的方法 |
申请号 | CN03808472.4 | 申请日期 | 2003-04-11 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2005-11-30 | 公开/公告号 | CN1703674 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/45 | IPC分类号 | G;0;6;F;9;/;4;5查看分类表>
|
申请人 | 德国捷德有限公司 | 申请人地址 | 德国慕尼黑
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 德国捷德有限公司 | 当前权利人 | 德国捷德有限公司 |
发明人 | 迈克尔·鲍尔迪希韦勒;沃纳·尼斯 |
代理机构 | 北京市柳沈律师事务所 | 代理人 | 黄小临;王志森 |
摘要
本发明涉及一种用于编译器生成的程序代码(38)的优化的方法。由编译器生成的程序代码(38)由程序代码段(42)检查,程序代码段(42)至少有关其动作而对应包含在预定库(28)中的库代码段(30x)。因此,通过分别调用对应的库代码段(30x),替换找到的程序代码段(42)。一种计算机程序产品,包括用于执行所述方法的程序指令。一种移动数据载体(10),包括根据所述方法优化的程序代码(44),并且包括库。本发明使得移动数据载体(10)中可用的存储器能够有效使用,并且对程序修改和/或对相对小量的数据载体(10)的生产提供高度适应性。
技术领域\n本发明涉及便携数据载体的编程,并涉及通过便携数据载体的程序执行。 便携数据载体在本申请的意义内具体可以是各种设计的芯片卡(smart card, 灵通卡)或者芯片模块。\n背景技术\n便携数据载体在当今共同使用时,具有处理器核心和以不同技术生产的 多个存储器。在典型配置中,例如,提供掩膜编程的(mask-programmed) ROM、电可擦写和可编程EEPROM和可写RAM。RAM用作为运行程序期 间的工作存储器,而处理器核心要执行的程序代码可存储在ROM和/或 EEPROM中。数据载体的这些和类似设计描述在W.Rankl and W.Effing, Hanser Verlag的书“Handbuch der Chipkarten”1999年第三版的3.4节。\n一般地,EEPROM中的存储单元占据大约4倍的ROM存储单元的芯片 面积。为了节省芯片面积,或者为了以同样面积取得更大的可用存储容量, 因此可希望在ROM中尽可能广地容纳可执行程序代码。然而,有必要早在 掩膜编程的ROM的生产阶段,为大量数据载体不可改变地定义掩膜编程的 ROM的内容。比较起来,写入EEPROM,仅仅在完成和初始化一系列数据 载体后,或者在个性化单独的数据载体时执行。因此,由于更大的适应性, 可执行程序代码尽可能广地存储在EEPROM中是有利的。这既适用于数据载 体的较小产量的编程,也适用于在大产量情形的错误修正和附加功能的引入。\n因而在便携载体的编程中存在问题:一方面,尽可能广地使用掩膜编程 的ROM和同等存储器;另一方面,对程序变化和/或对较小产量的数据载体 的生产取得尽可能大的适应性。\n发明内容\n根据本发明,通过具有权利要求1的特征的方法、根据权利要求8的计 算机程序产品和根据权利要求10的便携数据载体,完全或部分地解决了此问 题。各从属权利要求定义本发明的优选发展。在有关方法的各权利要求中条 目化各步骤的顺序不被理解为对保护范围的限制。而是,提供了本发明的各 开发,其中这些步骤以不同顺序、或者完全或部分并行地、或者彼此完全或 部分交织地执行。\n本发明来自使用包括用于优化程序代码目的的多重库代码段的预定库的 基本思想。在根据本发明的优化方法中,为在其效果或功能上分别对应一个 库代码段的程序代码段,一方面,搜索要优化的程序代码。这样的程序代码 段分别由对应的库代码段的一个调用替换。优化的程序代码存储在数据载体 的第一存储区域中(例如在EEPROM中),而为在第二存储区域中(例如在 ROM中)的存储提供库。\n在发明人进行的测试中,根据本发明的优化过程导致对第一存储区域提 供的程序代码的规模的显著减少。该结果是未预料到的,因为我们会直观地 假定:使用实际范围的库,仅会找到少部分程序代码对应库代码段。\n本发明产生的代码规模的减少具有结果:在具有预定量的存储器的数据 载体的情形,在第一存储区域中可包括用于附加功能的程序代码。如果第一 存储区域设计为EEPROM或以等同技术设计,在数据载体的个性化或完成或 初始化之后,只需要装载该程序代码。由于其简洁而实现多重功能的程序代 码,因此可既迅速而且甚至对小产量的各数据载体、或甚至对单一数据载体 进行改变或重写。\n根据本发明,预定库位于第二存储区域中,即例如在掩膜编程的ROM 中。通常,根据本发明通过优化得到的程序代码的节省(saving)少于库的大 小。然而,即使在此情形,由于更好地利用有价值的第一存储区域,应用本 发明也是有利的。如果在编译器生成的程序代码中存在多个代码段,那么其 各组在每个情形可分别通过一个单一库代码段替换,而如果库仅仅包含少数 不需要的代码段,那么优化可导致程序代码收缩甚至多于库的长度。在此情 形,即使第一和第二存储区域仅仅是同样的物理存储区域(field)的概念部 分,应用本发明也是有利的。\n根据本发明,为了优化目的,为程序代码段进行搜索,即搜索可由对应 的库代码段替换的编译器生成的程序代码中的部分。在程序生成期间,编程 人员不需要考虑随后的优化过程;特别是,编程人员不需要在用于库例程的 调用的程序中预作安排。因此,本发明不以任何方式使编程更难。\n在这里使用的术语的选择中,术语“程序代码”或“代码段”的意图在 于不仅表示在链接(linkage)前或后的可执行机器代码,而且表示对应的汇 编源代码。换言之,在本发明的不同开发中,根据本发明的优化过程既可根 据编译器生成的汇编源代码执行,也可根据已经汇编的机器代码执行。在前 者的情形,汇编和必要时的链接仅仅在优化后执行。同样地,库可以在优化 期间作为汇编源代码和/或作为已经汇编的机器代码是可用的。\n一般,无论何时两个代码段执行相互对应的功能,库代码段对程序代码 段的替换就是可能的。就此而论,可就代码段的准确效果进行复杂计算,以 便例如初始化替换过程,即使代码段中的个别指令以无害方式交换。在具体 地简单示范性的各实施例中,作为对照,仅仅在代码段在由其定义的机器代 码方面是相同的条件下进行替换。然而,甚至在此简单开发的情形,由于例 如可能一般不替换具有带有不在该代码段中的跳转目的地的跳转的代码段的 事实,也需要代码段的某些分析。\n如果使用以类似过程调用的方式包含一个或多个参数(例如存储地址或 者数值)的参数化的代码段,附加的替换可能跟着发生。\n最好,通过插入程序代码中的子程序调用指令,正常地调用库代码段。 然后紧跟库代码段之后,在库中提供返回指令。如果要替换的代码段干扰程 序流,该规则的例外就可应用在有些实施例中。例如,如果代码段以子程序 返回指令结束,该调用就可通过跳转指令正常被实现。\n根据本发明,预定义使用的库,即不依赖在当前优化运行中处理的程序 代码。然而,为了实现可能的最好优化结果,最好设计库使其包含适当的条 目用于程序代码的频繁出现的结构。这样的频繁出现的代码部分可具体依赖 于数据载体的硬件和/或操作系统和/或依赖于在编译器生成的程序代码的生 成中使用的编译器。\n根据本发明提供的计算机程序产品具体可以是计算机可读数据载体,如 例如电子或磁或光存储介质,但其不限于物理数据载体。电或光信号(例如 通信链路的电压电平)也理解为这里使用的意义上的计算机程序产品。计算 机程序产品包括执行根据本发明的优化步骤的程序代码。最好,计算机程序 产品还包括编译器和/或汇编器和/或链接器和/或装载器程序。\n根据本发明的计算机程序产品和根据本发明的便携数据载体最好被开发 具有对应上述和/或在有关方法的各权利要求中所述的特征的特征。\n附图说明\n本发明的进一步的特征、目的和优点通过示范实施例和多个替代实施例 的以下说明来揭示。参照示意图,其中唯一的图(图1)说明本发明的示范 实施例中的程序代码的不同版本的表示和便携数据载体的表示。\n具体实施方式\n本发明用于便携数据载体10的编程中,便携数据载体10在这里描述的 示范实施例中设计为芯片卡。数据载体10以其自身已知的方式包括具有处理 器核心12的半导体芯片、掩膜编程的ROM14、EEPROM16、RAM18和用 于非接触或接触绑定(contact-bound)通信的接口20。所述各部件经由总线 22彼此连接。在各替代实施例中,三个存储区域14、16、18可以其它技术 设计;具体地,FLASH技术可用于ROM14和/或EEPROM16。\n第一和第二存储区域24、26概念性地提供在存储区域14、16、18中。 第一存储区域24用作接收可执行机器代码形式的优化的程序代码。同样可执 行机器代码形式的预定库28存储在第二存储区域26中。在这里描述的示范 实施例中,第一存储区域24位于EEPROM16中,而第二存储区域26位于 ROM14中。除了第二存储区域26,ROM14以其自身已知的方式还包括固 定预定义的、组成例如数据载体10的操作系统的例程。EEPROM16还包括 文件系统,用于要存储为数据载体10中的非易失性数据的数据。\n库28具有多重预定义的库代码段30A、30B、30C、......,其在下面总 地表示为30x。在图1中,为了清楚表示的原因,库代码段30x表示为汇编 源代码。通常,每个库代码段30x后紧跟子程序返回指令32A、32B、......(在 下面总地表示为32x)。然而,如果由于以下事实,子程序返回指令32x在库 代码段30x的执行中不能达到,那么子程序返回指令32x可省略,该事实是 例如库代码段30x的每个程序流在出口结束或者结束在包含在库代码段30x 中的子程序返回指令。\n用于便携数据载体10的程序开发源于高级语言源代码34,其在图1中 以编程语言C示范表示。图1所示的部分等待直到出自单位位置(out from unit position)的输入寄存器INPORT的第三位达到值“0”,然后设置输出寄存器 OUTPORT为16进制值“FF”。自身已知的编译器36将高级语言源代码34 转换为编译器生成的程序代码38,其在图1中以用于6805指令集的汇编源 代码形式表示。分别根据处理器核心12的其它指令集在各替代实施例中提 供。\n优化程序40执行对本示范实施例必需的优化步骤。优化程序40处理编 译器生成的程序代码38,并且访问有关包含在库28中的库代码段30x的信 息。在不同的实施例变体中,该信息可包含例如汇编源代码的库28的拷贝和 /或可执行机器代码的库28的拷贝和/或适当描述语言的各个库代码段30x的 效果的规范。进而,可提供附加信息如例如索引或hash表,以便加速优化程 序40进行的搜索过程。\n优化程序40识别包含在编译器生成的程序代码38中的程序代码段42, 其在处理器核心12的执行中具有等同于包含在库28中的库代码段30x的功 能。相对简单的过程在本示范实施例中用于此目的,在该过程中,在汇编器 源文本级比较编译器生成的程序代码38与库28中的各条目。对于缩写形式 的指令和地址和值信息,在此情形可执行文本比较。作为对照,在比较前, 符号跳转目的地必须转换为标准形式或者数值相对值。在各替代实施例中, 作为对照,可根据已经以汇编的机器代码的形式表示的编译器生成的程序代 码38执行优化。\n对其在比较过程中已经找到对应的库代码段30x的程序代码段42,在优 化过程中通过调用该库代码段30x替换。在图1中,例如,除了跳转目的地 的符号目的地之外,程序代码段42和库代码段30B相同。因此,在优化的程 序代码44中,优化程序40通过调用该库代码段30B替换该程序代码段42。 在本例中,该调用设计为子程序调用指令46。因为在本例中程序代码段42 对应7字节长度的机器代码,而子程序调用指令46仅仅需要3字节,所以优 化的程序代码44需要的存储空间已经基本上通过替换被减少。\n完成优化后,优化的程序代码44由汇编器48转换为可由处理器核心12 执行的机器代码。跟随可能必要的与进一步的程序部分的链接操作,在数据 载体10的完成或者初始化或者个性化后,将代码装入第一存储区域24。从 产生用于数据载体10的芯片之时,第二存储区域26中已经存在库28。因此 数据载体10准备好使用。上述转换(translation)、优化和汇编步骤由通用计 算机(未显示在图1中)执行,通用计算机执行编译器36、优化程序40和 汇编器48。\n在数据载体10的操作中,在处理器核心12的程序执行到达第一存储区 域24中的子程序调用指令46的位置时,第二存储区域26中的库代码段30B 作为子程序执行。在其效果上,执行的指令准确对应优化期间去除的程序代 码段42。执行这些指令后,由子程序返回命令32B触发,处理器核心12执 行返回,返回到紧随子程序调用指令46之后的、第一存储区域24中的指令。\n优化期间必须确保不改变各程序功能。因此,例如,具有特定跳转指令 的程序代码段42应该仅仅根据精确的分析来替换,该跳转指令可能具有位于 程序代码段42之外的跳转目的地。如果程序代码段42的每个可能流结束于 出口或者子程序返回,替换是可允许的。但是在这样的情形,通过正常的跳 转指令而不是通过子程序调用指令,来调用对应的库代码段30x。这些考虑 甚至还可在生成库28时包括,使得后者仅仅包含可没有进一步限制而使用的 库代码段30x。\n库28应该具有这样的构造:其尽可能经常地提供适当的库代码段30x, 因而提供尽可能多的优化可能。因此,例如图1的库代码段30B匹配数据载 体10的硬件特性。如果该库代码段30B中请求的输入位对应频繁需要的信号 值,就假设:甚至对数据载体10的很大不同的应用,对应的程序代码段42 在编译器生成的程序代码38中也反复出现。类似地,频繁的操作系统调用可 由对应的库代码段30x代替(cover)。用于在编译器生成的程序代码38中重 复代码段的进一步的源(source)来源于以下事实:根据某些模式(schema) 执行编译器36中的代码生成,并且作为结果生成递归(recurring)代码结构。\n因此,总地来说,为了生成库28,对为数据载体10的硬件和操作系统 指定的多重应用、统计地评估由编译器36生成的程序代码38是有利的。
法律信息
- 2017-05-31
未缴年费专利权终止
IPC(主分类): G06F 9/45
专利号: ZL 03808472.4
申请日: 2003.04.11
授权公告日: 2008.02.20
- 2008-02-20
- 2006-01-18
- 2005-11-30
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |