CN100388200C - 编译方法、编译单元,目标程序执行方法及单元 - Google Patents
编译方法、编译单元,目标程序执行方法及单元 Download PDFInfo
- Publication number
- CN100388200C CN100388200C CNB2003801083783A CN200380108378A CN100388200C CN 100388200 C CN100388200 C CN 100388200C CN B2003801083783 A CNB2003801083783 A CN B2003801083783A CN 200380108378 A CN200380108378 A CN 200380108378A CN 100388200 C CN100388200 C CN 100388200C
- Authority
- CN
- China
- Prior art keywords
- address
- program
- program module
- access
- module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及编译程序、存储该程序的计算机可读存储媒体、编译方法和编译单元,其目的是自动生成重入目标程序。为实现这一目的,地址保存程序生成器16a生成地址保存程序,用于保存调用程序模块的数据区地址;地址设置程序生成器16b生成地址设置程序,用于设置其它程序模块的数据区地址;转移程序生成器16c生成转移程序,用于从调用程序模块转移到其它程序模块;地址复位程序生成器16d生成地址复位程序,用于阅读和复位保存的数据区地址;以及存取程序生成器16e生成存取程序,用于利用相对地址从设置数据区地址存取其它程序模块的数据区。
Description
技术领域
本发明涉及一种编译程序,用于转换(某些情况下也称为“转译”,但意思相同)以某一种编程语言写入特定计算机可执行的目标程序(下文称为“目标编码程序”或“目标编码”)的源程序(下文称为“源程序代码”或“源代码”),一种存储编译程序的计算机可读存储媒体、一种编译方法和编译单元。
本专利申请说明书中提及的目标程序等除可直接在计算机内执行的程序代码外,还包含中间程序代码,该中间程序代码是转换成此类程序代码的第一阶段;另一阶段的中间程序代码,其中尚未决定实际可存取的存储地址,实际可存取的存储地址是在计算机内可直接执行的程序代码中决定的;和可直接在计算机内执行的整个程序代码被集成前的再一个阶段的中间程序代码。
本发明还涉及生成目标程序的计算机程序、存储计算机程序的计算机可读存储媒体、符合在有限存储区内存储目标程序,例如所谓的设备安装程序,以及在有限存储器内针对象近年来的移动信息处理的高级和高功能性信息处理存储目标程序目的的编译方法及编译单元。
本发明还涉及自动生成可再入的再入目标程序(下文还称为“重入”目标程序)的计算机程序、存储计算机程序的计算机可读存储媒体、编译方法及编译单元。
背景技术
传统上,使用具有时分或优先权抢占或进程调度函数及类似函数的操作系统进行写入的函数程序,以及可在具体时间间隔内从多个任务或进程同时调用的函数编程语言已经需要重入。
程序员已对此类重入函数程序进行编码,并已写入可自动判断是否满足再入可能性的程序。例如,日本未审查的专利申请公开第2001-134431号(专利文献1)中揭示了这一现有技术。
满足再入可能性的条件取决于对描述抽出整个流程要判断的函数的整个源程序的语法分析、对整个流程内调用的所有资源进行的范围决定以及依照资源范围种类对完全排他性控制的判断。
然而,实际上,由于时间约束和计算机处理能力的限制,很难通过整个源程序的语法分析抽出整个流程、决定整个流程内调用的所有资源的范围以及依照资源范围种类判断是否执行完全排他性控制。这一困难迫使必须在某一程度上作出判断。
由于传统重入程序的基本部分由程序员写入,仅可实现不完全排他性控制,同时占用大量时间。在执行程序时,这会带来许多误操作。
另外,由于此重入程序常常用于多任务和时分环境下,所以很难找出误操作原因。更新和修订这一重入程序则更加困难。
发明内容
为了解决上述问题而开发本发明,本发明的目的是提供可自动生成重入目标程序的计算机程序、存储计算机程序的计算机可读存储媒体、编译方法及编译单元。
根据本发明的一个方面,提供一种编译方法,用于使计算机把源程序转换为目标程序,所述方法包括:地址保存程序生成步骤,用于生成地址保存程序,以便保存源程序内包含的调用程序模块所使用的数据存储区地址,地址设置程序生成步骤,用于生成地址设置程序,以便设置调用程序模块要调用的其它程序模块所使用的数据存储区地址,转移程序生成步骤,用于生成转移程序,以便从调用程序模块内含的第一子程序转移至所述其它程序模块内含的第二子程序,地址复位程序生成步骤,用于生成地址复位程序,以便从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址,以及存取程序生成步骤,用于生成存取程序,以便在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区。
根据本发明的另一个方面,提供一种把源程序转换为目标程序的编译单元,包括:地址保存程序生成装置,用于生成地址保存程序,以便保存源程序内包含的调用程序模块所使用的数据存储区地址,地址设置程序生成装置,用于生成地址设置程序,以便设置调用程序模块要调用的其它程序模块所使用的数据存储区地址,转移程序生成装置,用于生成转移程序,以便从调用程序模块内含的第一子程序转移至所述其它程序模块内含的第二子程序,地址复位程序生成装置,用于生成地址复位程序,以便从作为转移末端的第二子程序返回第一子程序后,为调用程序模块读取和复位保存的数据存储区,以及存取程序生成装置,用于生成存取程序,以便在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区。
根据本发明的再一个方面,提供一种执行通过转换源程序生成的目标程序的目标程序执行方法,包括:地址保存步骤,使计算机保存源程序内包括的调用程序模块所使用的数据存储区地址,地址设置步骤,使计算机设置调用程序模块要调用的其它程序模块所使用的数据存储区地址,转移步骤,使计算机执行从调用程序模块内含的第一子程序到所述其它程序模块内含的第二子程序的转移,地址复位步骤,使计算机在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址,以及存取步骤,使计算机在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区。
根据本发明的另一个方面,提供一种执行通过转换源程序生成的目标程序的目标程序执行单元,包括:地址保存装置,用于保存源程序内包括的调用程序模块所使用的数据存储区地址,地址设置装置,用于设置调用程序模块要调用的其它程序模块所使用的数据存储区地址,转移装置,用于执行从调用程序模块内含的第一子程序到所述其它程序模块内含的第二子程序的转移,地址复位装置,用于在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址,以及存取装置,用于在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区。
参考以下具体实施方式及附图说明可充分理解本发明的目的、特征、观点及优点。
附图说明
图1是依照本发明一项实施例的动态模块连接系统的结构图,
图2是图1所示编译单元的结构方框图,
图3是图2所示编译单元的示范性编译进程的流程图,
图4A及4B是依照本发明第一实施例,要由编译单元转换的源程序以及通过编译单元转换获得的目标程序的配置图,
图5是图1所示终端单元的结构方框图,
图6是应用程序模块通过图5所示的终端单元调用库程序模块的进程的流程图,
图7A和7B是表示从应用程序模块调用库程序模块的进程的示意图,
图8A和8B是表示应用程序模块和库程序模块的示范性源程序和目标程序的示意图,
图9A和9B是显示堆栈状态的示意图,
图10A和10B是依照第二实施例的示范性源程序和目标程序的示意图,
图11是依照本发明第二实施例的编译单元的结构方框图,
图12是图11所示编译单元的示范性编译进程的流程图,
图13是依照本发明第二实施例的库程序模块的代码区和数据区的示意图,
图14A和14B是依照本发明第三实施例的应用程序模块和库程序模块的示范性源程序和目标程序的示意图,
图15A和15B是依照本发明第三实施例的库程序模块代码区和数据区的示意图,
图16A、16B及16C是概念图,显示依照本发明第四实施例,作为编译器所转换的调用程序的应用程序模块、作为要调用的程序的库程序模块、和示范性调用进程,
图17是依照本发明第五实施例的编译单元的结构方框图,
图18是依照本发明第五实施例的终端单元的结构方框图,
图19是表示图18所示终端单元的示范性动态模块连接进程的流程图,
图20是用于解决碎片的编译单元和终端单元的结构方框图,
图21是依照第一变化用于解决碎片的编译单元和终端单元的结构方框图,
图22是依照第二变化用于解决碎片的编译单元和终端单元的结构方框图,
图23A、23B和23C是显示用于解决第二变化中的碎片的方法的示意图,
图24是依照第三变化用于解决碎片的编译单元和终端单元的结构的示意图,
图25A、25B和25C是显示用于解决第三变化中的碎片的方法的示意图,
图26是依照第四变化用于解决碎片的编译单元和终端单元的结构的示总图,以及
图27是依照第六变化用于解决碎片的编译单元和终端单元的结构方框图。
具体实施方式
以下参考附图说明本发明的优先实施例。
(第一实施例)
图1是依照本发明第一实施例的动态模块连接系统的结构图。图1所示的动态模块连接系统由服务器11和多个终端单元12(12a、12b、12c......)组成。服务器11和各终端单元12通过,例如,因特网连接。应注意,此实施例中的终端单元是目标程序执行单元,用于执行源程序转换所生成的目标程序。目标程序执行单元包括移动通信终端,例如移动电话和与诸如因特网之类的网络连接的家用电器。
本实施例中的终端单元通过诸如因特网13之类的网络从服务器11接收目标程序,并执行接收的目标程序。不过,本发明并不限于此。由编译单元生成的目标程序可保存在计算机可读存储媒体中,如CD-ROM或DVD-ROM,保存在存储媒体中的目标程序可由终端单元内提供的存储媒体驱动设备阅读,例如CD-ROM驱动器或DVD-ROM驱动器,并且可执行阅读的目标程序。
服务器11包括编译单元14。编译单元14将程序员写入的源程序转换为目标程序。终端单元12执行由编译单元14转换的目标程序。
图2是图1所示编译单元14的结构方框图。如图2所示,编译单元14具有程序执行单元16和程序存储器17。
程序执行单元16由,例如CPU(中央处理器)构造而成,并包括地址保存程序生成器16a、地址设置程序生成器16b、转移程序生成器16c、地址复位程序生成器16d和存取程序生成器16e。程序存储器17包括编译程序存储器17a、源程序存储器17b和目标程序存储器17c。
地址保存程序生成器16a生成地址保存程序,用于保存源程序内包含的调用程序模块所使用的数据存储区地址。
地址设置程序生成器16b生成地址设置程序,用于设置调用程序模块调用的其它程序模块所使用的数据存储区地址。
转移程序生成器16c生成转移程序,用于从调用程序模块内含的第一子程序转移至其它程序模块内含的第二子程序。
地址复位程序生成器16d生成地址复位程序,用于从作为转移末端的第二子程序返回第一子程序后,阅读和复位为调用程序模块保存的数据存储区。
存取程序生成器16e生成存取程序,用于在其它程序模块存取其它程序模块内包括的数据存储区时,利用相对地址从其它程序模块的数据存储区地址存取数据存储区。
编译程序存储器17a存储编译程序,用于将程序员预先写入的源程序转换为目标程序。源程序存储器17b存储以例如C语言、C++语言等写入的源程序。源程序写入并非用于整个应用程序,但逐模块进行。目标程序存储器17c存储从源程序转换的目标程序。
下面说明图2所示的编译单元的编译进程。图3是表示图2所示编译单元的示范性编译进程的流程图。
步骤1中,地址保存程序生成器16a生成地址保存程序,用于保存堆栈内应用程序模块的数据区的前导地址。
步骤S2中,地址设置程序生成器16b生成地址设置程序,用于设置库程序模块的数据区的前导地址。
步骤S3中,转移程序生成器16c生成转移程序,用于从应用程序模块转移至库程序模块。
步骤S4中,地址复位程序生成器16d生成地址复位程序,用于复位堆栈内应用程序模块的数据区前导地址。
步骤S5中,存取程序生成器16e生成存取程序,用于在库程序模块存取其中包含的数据区时,利用相对地址从库程序模块的数据区的设置前导地址存取数据区。
依此方式,通过执行编译程序生成的地址保存程序、地址设置程序、转移程序、地址复位程序和存取程序被作为目标程序被发送至各终端单元12,其依次执行接收的目标程序。
图4A及4B是依照本发明第一实施例,由编译单元转换的源程序以及通过编译单元转换获得的目标程序的配置图,其中图4A显示应用程序模块的配置,图4B显示库程序模块的配置。
应注意,这些程序并非始终以合并方式存在,而可以分离地保存在物理媒体或文件中。
这些程序包括应用程序模块121、131、库程序模块151以及几个其它程序模块,因为与本发明的说明无直接关系,所以不予论述。
通过将程序分为具体单元(例如函数单元、连接单元、升级单元)获得程序模块,并且各单元具有程序代码区和固有数据区。此处,尽管后一区域称为固有数据区,其实不必为固有的,严格地讲,可另外拥有其它具体目的和/或应用。这一原则也适用于其它描述。
程序模块的程序代码区是锁定写入程序模块的程序执行命令等等的区域。
程序模块的固有数据区是锁定程序模块内定义的外部变量和静态变量内容的区域。下文中,外部变量和静态变量有时统称为外部变量。
应用程序模块121包括程序代码区123、应用程序模块121的固有数据区125以及几个其它区域,因为与本发明的说明无直接关系,所以不予论述。
应用程序模块131包括程序代码区133、应用程序模块131的固有数据区135以及几个其它区域,因为与本发明的说明无直接关系,所以不予论述。
这些应用程序模块121、131是调用程序,一般调用库程序模块151。此调用通常以函数调用、子例程调用等形式进行。即图4所示的程序调用1和程序调用2(再入)。
这些程序模块通常包括数个子程序,通常为函数、子例程等。函数和子例程之一可称为程序模块。
通常,通过调用其它程序模块的子程序来调用程序模块。某些情况下,可调用相同程序模块的子程序。
例如,在所谓的多任务环境或以时分方式并行执行或必须执行多个进程、任务或应用程序的其它环境下,应用程序模块131可调用并执行库程序模块151,同时应用程序模块121调用并执行库程序模块151。
此状态无数次发生于各种信息装置中。此处给出几个简单例子。
例如,在具有移动信息通信功能的装置中,例如移动电话,用户必须在输入要发送的数据同时监视是否已有任何接收。
数据输入和接收可由另一个CPU监视,但需要以时分方式并行地完成,以便由一个CPU来保存要使用的CPU数量。
如果数据输入应用程序和接收监视应用程序中都使用某一基本函数子例程,该函数子例程可从一个应用程序调用,同时被另一个应用程序调用并执行。
多个任务等以时间重迭方式调用并执行相同程序模块(函数、子程序、子例程等)的情况被称为“再入”。如果将某一程序模块配置成从以时间重迭和并行方式执行多个任务的程序调用,该程序模块可称为“重入的”。
将程序模块配置成重入的几个方法是众所周知的。
第一种方法是使用内部变量(下文也称为局部变量,意思与内部变量相同)进行所有处理,而不使用所谓的外部变量。由于每次在完成程序模块处理的同时调用和释放此程序模块时,堆栈区内的内部变量重新被保护,只要使用唯一内部变量,对变量的存取就不会起冲突。因此,可同时并行执行程序模块。
第二种方法使用所谓的外部变量并利用称为信号量的状态变量协调对外部变量的存取。
由于依照第一种方法无法使用外部变量,除该程序和数据外的程序模块转移有时可能受到限制。
依照第二种方法,每次存取外部变量时必须麻烦地测试和设置信号量,对程序员造成很多负担并可能导致错误和误操作。
库程序模块151包括程序代码区153、库程序模块151的固有数据区155、157以及几个其它区域,因为与本发明的说明无直接关系,所以不予论述。
数据区155、157分别用于应用程序模块121和应用程序模块131,并通过调用该库程序模块151的原始程序模块区分。
例如,当从应用程序模块121调用该库程序模块151时,程序代码区153存取应用程序模块121作为外部变量区的数据区155并执行相应处理。例如,当从应用程序模块131调用库程序模块151时,程序代码区153存取应用程序模块131作为外部变量区的数据区157并执行相应处理。
通过分别利用库程序模块所使用的固有数据区,尤其是用于外部变量的数据区,可写入程序,而不用注意对外部变量的存取冲突。
如上所述,由于每次调用库程序模块151时保护堆栈区内的区域,对内部变量的存取不会起冲突。
尽管为每个调用应用程序准备并使用数据区,此处提及的应用程序可解释为应用任务单元或可视为与应用任务具有相同概念。
此处提及的应用程序也可解释为应用进程单元或可视为与应用进程具有相同概念。
以下参考图5至8更详细说明当应用程序模块121调用库程序模块151时执行的进程过程。
图5是图1所示终端单元12的结构方框图。图6是应用程序模块121通过图5所示终端单元12调用库程序模块151的进程流程图。图7A和7B是从应用程序模块调用库程序模块的过程图,其中图7A显示应用程序模块进程,图7B显示库程序模块进程。图8A和8B是应用程序模块和库程序模块的示范性源程序和目标程序图,其中图8A显示应用程序模块的源程序和目标程序,图8B显示库程序模块的源程序和目标程序。图8A和8B所示的源程序是以C语言写入的程序。
如图5所示,终端单元12具有程序执行单元18和存储器19。程序执行单元18由例如DSP(数字信号处理器)构造而成,并包括地址保存设备18a、地址设置设备18b、转移设备18c、地址复位设备18d和存取设备18e。存储器19包括应用程序模块存储器19a、库程序模块存储器19b和堆栈19c。
应用程序模块存储器19a保存从编译单元14发送的应用程序模块,库程序模块存储器19b保存从编译单元14发送的库程序模块,堆栈19c在调用子例程或函数的过程中临时保存数据和地址。
地址保存设备18a保存堆栈19c内的调用应用程序模块121所使用的固有数据区125的前导地址。
地址设置设备18b为应用程序模块121所调用的库程序模块151的应用程序模块设置数据区155的前导地址。
转移设备18c从应用程序模块121内包括的程序代码区123转移至库程序模块151内包括的程序代码区153。
地址复位设备18d在从转移库程序模块151的程序代码区153返回应用程序模块121的程序代码区123后,阅读并复位为应用程序模块保存的数据区125的前导地址。
存取设备18e在库程序模块151的程序代码区153存取库程序模块151内包括的库程序模块的数据区155时,使用相对地址从库程序模块的数据区155的前导地址存取数据区155。
此处,当写入应用程序模块121的源程序的“bar(A,B);”命令被转换为目标程序时,生成调用“bar”的目标程序,即库程序模块151内包括的函数子例程“bar”(以下可称为函数子程序“bar”或仅称为函数“bar”,但意思相同)(参见图7A的1至7)。
图6的步骤S11中,地址保存设备18a保存堆栈19c内DP(数据点)寄存器(以下有时仅称为“DP”)的现有内容。应用程序模块121的程序代码区123内包含的程序首先保存DP寄存器的内容,即在堆栈19c内保存0x0600(十六进制符号为0600,转换至十进制符号为0*163+6*162+0*16+0,以下相同),这是目前执行的应用程序模块121所使用的固有数据区125的前导地址(参见图7A内的1和图8A内的1)。
这是为了使应用程序模块121可在从库程序模块151返回后再次将DP内容设置为0x0600,并再次为本身使用固有数据区125。尽管此处提及固有数据区,其实不必为固有的,严格地讲,可另外拥有其它具体目的和/或应用。这一原则也适用于其它描述。
DP寄存器是为正在执行的程序模块锁定数据区的前导地址的区域。通常准备特殊寄存器作为此区域。不过,也可使用一般使用的寄存器,而不准备任何特殊寄存器。
接着,在步骤S12中,地址保存设备18a在堆栈19c内保存函数“bar”的参数。明确地说,应用程序模块121内包括的程序保存要转移至库程序模块151的参数A和B(参见图7A的1和图8A的2)。
现在说明堆栈19c的状态。图9A和9B是显示堆栈状态图,其中图9A是概念图,显示将参数A和B保存于堆栈内时的堆栈状态,图9B是概念图,显示如何使用堆栈。
如图9A所示,堆栈(以下也可称为堆栈存储器)19c是后入/先出类型的存储区,根据从具体程序模块调用其它程序模块(例如函数、子例程、子程序等)的需要保存数据,以便使用它在程序模块间转移数据,用作局部变量的存储区,保存从调用函数等返回调用程序的地址,以及用于其它目的。
堆栈19c中写入和阅读数据的区域地址由称为堆栈指针的寄存器指示(以下也可只称为堆栈指针或堆栈指针寄存器)。
参考图9B说明如何使用该堆栈19c。例如,通过改变堆栈点的数值或通过间接参考,将堆栈指针寄存器的数值减2作为地址,可存取从以上图9B所示的堆栈保存在第三地址的局部变量2。
接下来,步骤S13中,地址设置设备18b设置新DP。具体地说,应用程序模块121内包括的程序为应用程序模块121阅读数据区155的地址(0x800),并在DP内设置此地址(参见图7A的3和图8A的3),该地址保存在应用程序模块121的固有数据区125内的区域中并且用于包括函数“bar”的库程序模块151内。
通常由编译器设置为应用程序模块121锁定数据区155的地址(0x800)的区域,该地址用于包括函数“bar”的库程序模块151内。不过,此区域不一定由编译器来设置,可制备成程序库,并在连接时进行设置。
接下来,步骤S14中,转移设备18c调用库函数。应用程序模块121内包括的程序保存在作为调用程序从函数“bar”返回自身时所使用的地址,即对堆栈19c内函数“bar”的跳转命令后的命令地址,并跳转至函数“bar”(参见图7A的4和图8A的4)。
如图7B所示,库程序模块151内包括的程序代码区153中包括作为调用程序的函数“bar”。该函数“bar”用于抽取堆栈19c内保存的参数A和B。
另外,步骤S15中,存取设备18e置换外部变量值。例如,函数“bar”使用库程序模块151内定义的外部变量C作为外部变量。在函数“bar”中,存取外部变量C并且例如将数值10输入存储区后,为地址(0x850)置换数值10,这是保存于DP内的数值(0x800)与相对地址(0x50)之和。图7B的5和图8B的5显示该命令格式。
这样,函数“bar”可为应用程序模块121存取数据区155,即从地址(0x800)开始的存储区。
完成函数“bar”内的进程后,程序控制返回原始应用程序模块121内包括的程序。
接着,在步骤S16中,地址复位设备18d从堆栈19c废弃函数“bar”的参数A、B。从函数“bar”返回后,立即从堆栈19c废弃参数A、B(参见图7A的6和图8A的6)。尽管此处从函数“bar”返回后立即废弃参数,也可以不立即废弃,严格地讲,可在具体处理后再废弃。这一原则也适用于其它描述。
接下来,在步骤S17中,地址复位设备18d从堆栈19c取出保存于堆栈19c内的DP原始值,并在DP内将其复位(参见图7A的7和图8A的7)。
这样,应用程序模块121调用方内包括的程序可再次存取自身的固有数据区125。
此时,由于调用方DP值保存在堆栈的最低地址,如图9A和9B所示,被调用库程序模块151不必阅读DP的内容,并且实际上不用进行阅读即可执行所有必要处理,因此不必进行不需要的存取。
例如,在类似于以下第二实施例(其中可选择堆栈内DP值的保存)的另一实施例中,可通过存取相同地址执行相同处理,而不论是否通过在堆栈最低地址保存DP值而将DP值保存在堆栈中。因此,不需要在判断DP值是否保存在堆栈内后分离处理。
通过在堆栈最低地址保存DP值,检索必要数据,例如参数和返回地址的堆栈位置在调用库程序模块151方不会改变,不论DP值是否保存于堆栈内。换句话说,由于堆栈检索参数和返回地址的堆栈指针的相对位置不会改变,所以不必检索这些参数和返回地址。
尽管本实例中从应用程序模块调用库程序模块,也可从库程序模块调用其它库程序模块。由于这种情况下执行的处理与从应用程序模块调用其它库程序模块的情况中相同,不再对其进行说明。
尽管此实例中调用其它程序模块,但也可调用相同程序模块。由于这种情况下执行的处理与调用其它库程序模块的情况中相同,不再对其进行说明。
这样,即使调用程序模块再入其它程序模块,应用程序模块121所使用的固有数据区125的前导地址也可被取消,因为它保存于堆栈中,并且为由应用程序模块121调用的库程序模块所使用的应用程序模块121设置数据区155的前导地址。从而可生成重入目标程序,实现模块间的动态连接。
(第二实施例)
在本发明的第一实施例中,通过将写入应用程序模块121源程序中的命令“bar(A,B);”转换为目标程序而生成目标程序,目标程序保存DP寄存器的内容,该内容保存目前在堆栈内执行的应用程序模块121所使用的固有数据区125的前导地址;在堆栈内保存参数A、B,这是要转移至库程序模块151的数据;为调用函数“bar”所使用的应用程序模块121阅读数据区155地址,并在DP内设置这一地址;在从函数“bar”返回自身时于堆栈内保存该地址;跳转至函数“bar”;在从函数“bar”返回时从堆栈废弃参数A、B;以及在DP中复位保存于堆栈内的原始值。
在以下说明的本发明第二实施例中,库程序模块151的源程序内包括关于执行以上进程还是删除进程一部分的描述。
尽管上面的第一实施例中调用其它程序模块,但在第二实施例中调用相同模块内的函数“bar”。
图10A和10B是依照第二实施例的示范性源程序和目标程序图,其中图10A显示示范性库程序模块的源程序,图10B显示示范性库程序模块的示范性目标程序。应注意,程序都是以C语言写入的。本实例中,C语言的语言规范扩大并加入新关键字“private”,并通过给源代码加限定词“private”写入声明。
例如,图10所示的函数“bar”的调用显示第一实施例中执行的进程一部分可删除。在图10A所示的函数“bar”中,写入删除进程一部分的声明,例如“private void bar(int A,int B)”。
如图10A所示,库程序模块的源程序内包括的函数“bar”包括函数“bar”是“private”的描述。
该描述是说明“函数“bar”是所谓的私有函数”,例如有时也称为“私有声明”或“私有函数声明”。
在存在调用此函数“bar”的声明的情况下,不会生成如第一实施例中所说明的目标程序来保存调用程序模块所使用的DP值,设置指示调用程序模块所使用的固有数据区地址的DP值以及在从函数“bar”返回时将DP值复位至堆栈内保存的原始值。
图11是依照本发明第二实施例的编译单元14的结构方框图。如图11所示的编译单元14具有程序执行单元16和程序存储器17。
程序执行单元16由,例如CPU(中央处理器)构造而成,并包括地址保存程序生成器16a、地址设置程序生成器16b、转移程序生成器16c、地址复位程序生成器16d、存取程序生成器16e和声明鉴别器16f。程序存储器17包括编译程序存储器17a、源程序存储器17b和目标程序存储器17c。
应注意,图11所示的第二实施例的编译单元中与图1所示的第一实施例编译的单元相同的元件由相同参考数字识别,以下只说明与第一实施例不同的结构。
声明鉴别器16f根据从源程序内的应用程序模块中包括的程序代码区调用的库程序模块的程序代码区描述来判断是否缩短进程。换句话说,声明鉴别器16f鉴别上述私有声明是否包括在源程序描述内。
此处,如果声明鉴别器16f判断不缩短进程,就是说如果它鉴别不包括私有声明,地址保存程序生成器16a、地址设置程序生成器16b、转移程序生成器16c、地址复位程序生成器16d和存取程序生成器16e的进程执行与第一实施例相同的进程。
另外,如果声明鉴别器16f判断要缩短进程,就是说如果它鉴别包括私有声明,转移程序生成器16c生成转移程序,以便从应用程序模块内包括的程序代码区转移至库程序模块内包括的程序代码区,并且存取程序生成器16e生成存取程序,以便在库程序模块内包括的程序代码区存取数据区时,使用相对地址从该数据区的前导地址存取库程序模块内包括的库程序模块数据区。
图12是图11所示的编译单元14的示范性编译进程的流程图。
步骤S21中,声明鉴别器16f判断上述库程序模块的程序代码区的描述内是否包括私有声明。如果判断不包括私有声明(步骤S21内的“否”),则后跟步骤S22,如果判断包括私有声明(步骤S21内的“是”),则后跟步骤S27。
从步骤S22到步骤S26的处理与图3所示的步骤S1到步骤S5的相同,所以不再说明。另外,步骤S27的处理与图3所示的步骤S3相同,所以也不再说明。
步骤S28中,存取程序生成器16e生成存取程序,用于在库程序模块内包括的程序代码区存取该数据区时使用相对地址从该数据区的前导地址存取库程序模块内包括的库程序模块的数据区。
图13是依照本发明第二实施例的库程序模块的代码区和数据区的示意图。当在库程序模块151的程序代码区153内进行调用私有函数“bar”的描述时,通过图11所示的本实施例的编译单元生成目标程序,用于执行以下步骤:在堆栈内保存用于函数“bar”的数据参数A、B,将它们转移至函数“bar”的步骤,在堆栈内保存跳转至函数“bar”的命令以后的命令地址(返回地址),并跳转至函数“bar”的步骤,以及在从函数“bar”返回时从堆栈废弃参数A、B的步骤。
因此,在正在调用的程序模块和要调用的程序模块不必使用不同数据区的情况下,可通过为函数“bar”执行私有声明加速目标程序的执行,从而省去保存、设置和复位DP值的步骤,并且因为不执行不需要的步骤,所以目标程序的规模更小。
执行这一私有声明的函数“bar”后,DP内容不会改变,同时作为调用程序保持在程序模块内的状态,如图11所示。因此,例如,当为外部变量C读出数据等等时,存取调用程序模块的固有数据区(本情况中是固有数据区155)。
尽管图中未显示,在从声明的私有函数“bar”返回调用程序时,例如,也不必复位DP值。
迄今说明的实施例中,只声明私有函数,包括保存DP值的一连串处理并未执行,例如如果函数“bar”前描述“private”。如果不进行具体描述,函数“bar”不是私有函数,并且执行保存DP值等处理。
然而,在另一实施例中,可给予“public”等描述,明确指示函数并非私有函数。
这一描述有时称为“公共声明”或“公共函数声明”。通过给出该声明可明确指示一连串处理,包括保存DP值。
另一实施例中,给予该“私有声明”的函数可以是只在相同程序模块内被调用或可被调用的函数。另一实施例中,给予该“私有声明”的函数可以是只在不同程序模块间被调用或可被调用的函数。
尽管此实例中通过增加新关键字“private”和“public”给予声明来扩展C语言,也可不扩展语言使用而给予声明,通过使用语用等等。或者,可将声明描述为分离文件或指定为编译器参数。
这样,由于根据从应用程序模块内包括的程序代码区调用的库程序模块的程序代码区的描述来鉴别是否缩短进程,通过删除保存、设置和复位地址的处理,可加速执行目标程序,在应用程序模块和库程序模块不必使用不同数据区的情况中,通过不执行不需要的处理,目标程序的规模可以更小。
另外,由于库程序模块的程序代码区的描述是为每个程序代码区描述的声明,根据库程序模块程序代码区的处理内容,可删除保存、设置和复位地址的处理,这取决于该声明存在与否。从而可加速目标程序的执行。
(第三实施例)
在第一实施例中,利用把相对地址(例如0x50)从DP加入DP内保存的数值(例如0x800)而获得的地址,存取函数“bar”使用的所有外部变量(例如C)。
结果,函数“bar”可为应用程序模块121使用固有数据区155,即起始地址是例如0x800的存储区,作为要使用的所有外部变量的区域。
不过,在以下说明的本发明的第三实施例中,例如,函数“bar”的源程序可包括与数据存储区有关的描述,该数据存储区由多个应用程序模块为调用例如其变量声明部分内的函数“bar”而共同存取。
图14A和14B是依照第三实施例的示范性源程序和目标程序图,其中图14A显示依照第三实施例的示范性库程序模块源程序,图14B显示依照第三实施例的示范性库程序模块目标程序。
图14A和14B中,声明以C语言写入。本实例中,C语言的语言规范被扩大并加入新关键字“common”,并通过给源代码加限定词“common”来描述声明。
例如,在图14A所示的函数“bar”的程序中,D和C用作函数“bar”所使用的外部变量。这些声明是图14A所示的描述,例如,描述“common intD;”和“int C;”。
描述“common int D;”声明外部变量D是由多个调用应用程序共同存取以调用函数“bar”的外部变量。
尽管此实例中通过增加新关键字“common”扩展C语言来给予声明,也可不扩展语言规范而给予声明,通过使用语用学等等。
或者,可将声明描述为分离文件或指定为编译器参数。
如图14A所示,应用程序模块的源程序内包括的外部变量D包括该外部变量D是“common”的描述。该描述是说明“外部变量D是所谓的共同外部变量”,例如有时也称为“共同声明”或“共同外部变量声明”。
图15A和15B是依照本发明第三实施例的库程序模块代码区和数据区的示意图。
图15A显示程序代码区553符合重入函数“bar”和作为固有数据区的应用程序模块121的数据区555,和从该程序存取共同数据区559。尽管此处使用术语“共同数据区”,此区域不必共同用于其它具体目的或应用,严格地讲,可以不用于其它具体目的或应用。这一原则也适用于其它描述。
图15B更详细地显示外部变量C保存于应用程序模块121的数据区555内,该区域是固有数据区,而外部变量D保存于由共同数据区存取进行存取的共同数据区559内。
图14A的描述“intC;”是声明外部变量C为多个调用应用程序模块中的每一个应用程序模块使用固有存储区,以调用函数“bar”。通过该描述,外部变量C保存在应用程序模块(本实例中是程序模块121)的固有数据区555内,该数据区由图15B所示的固有数据区存取进行存取。
在函数“bar”中,当存取为每个调用应用程序(例如本实例中的程序模块121)保存在固有数据区555内的外部变量C,以便例如为该存储区内的外部变量C置换数值10时,在通过从DP向DP内保存的值(例如0x800)添加相对地址(例如0x50)而获得的地址置换该数值10。图14B和15B中显示该命令格式。此时的命令格式与第一实施例相同。
如图15B所示,函数“bar”可为应用程序模块121存取数据区555,即始于,例如,地址0x800的存储区。函数“bar”同时被多个应用程序模块调用(例如图4A的应用程序模块121和应用程序模块131)。即使结果发生再入,对外部变量的存取不会起冲突。
图14A的描述“common int D;”是声明外部变量D使用由多个调用应用程序共同使用的存储区,以调用函数“bar”。通过该描述,外部变量D保存在多个应用程序模块共同使用的共同数据区559内,并且由图15B所示的共同数据区存取进行存取。
在函数“bar”中,当外部变量D保存在调用应用程序(例如程序模块121)共同使用的共同数据区559内,以便例如为该存储区内的外部变量D置换数值20时,在通过从特殊寄存器SDP向特殊寄存器SDP内保存值(例如0xF00)添加相对地址(例如0x60)而获得的地址置换该数值20。图14B和15B中显示该命令格式。
该SDP是特殊寄存器,用于为所有程序模块保存一个共同数据区的前导地址。该所有应用程序的共同数据区的前导地址本身有时称为SDP,这个地址是保存在SDP内的数值。
另一实施例中,通用寄存器也可作为该SDP,而不使用这类特殊寄存器。这一实施例在具有许多通用寄存器的MPU(微处理器)内特别有效,在该通用寄存器可用作存储器存取偏移地址的MPU内更为有效。
另一实施例中,普通存储器或堆栈寄存器可作为该SDP,而不使用特殊寄存器或此类通用寄存器。
不过,该实施例中,对于把堆栈或普通存储器内保存的SDP作为偏移地址的存储器存取,需要若干处理。
这些处理包括,例如,阅读堆栈或存储器内保存的SDP,并把它保存在可用作存储器存取偏移地址的寄存器的处理,和取消寄存器现有内容以便为前一处理做准备的处理。
这些方法中,通过使用SDP寄存器内保存的数值作为偏移地址来存取存储区,函数“bar”可为应用程序模块存取共同数据区559,即始于,例如,地址0xF00的存储区,如图7B所示。
尽管未显示SDP值,它可以保存在与图7A所示的库程序模块151固有数据区地址相同的固有数据区125内,并可在从应用程序模块121调用库程序模块151的处理中进行保存和设置。
例如,在图3的步骤S1中把现有DP(0x0600)保存在堆栈内前,可把现有SDP保存在堆栈中。
另外,在图3的步骤S2中设置新DP(0x0880)前,可设置新SDP(0x0F00)。
这样在自变量A、B被保存于堆栈前把现有SDP保存在堆栈内,SDP内保存的SDP存在与否不会影响要调用的库程序模块。由于与第一实施例相同,这里不再详细说明。
这样的实施例中,当同时从多个应用程序模块(例如图4A的应用程序模块121和应用程序模块131)调用函数“bar”并且结果发生再入时,很明显数据可被共同使用并且可被转移和应用于共同使用某些外部变量的其它处理。
此时,可以或必须使用上述信号量等进行协调。然而,由于这与本发明内容无直接关系,不对其进行说明。
如上所述,因为存取为各应用程序模块提供的执行固有数据存储区,例如,在存取外部变量时,即使从多个应用程序模块调用库程序模块,也不会发生冲突。因此,程序模块可被配置成重入。另外,因为存取各应用程序模块共同使用的执行共同数据存储区,即使从多个应用程序模块调用库程序模块,例如,也可共同使用某些外部变量。
指定要使用库程序模块执行共同数据存储区还是库程序模块执行固有数据存储区的描述是为库程序模块内每个外部变量进行描述的共同声明。所以,通过判断共同声明存在与否,可以容易地正确使用执行共同数据存储区和执行固有数据存储区。
(第四实施例)
图16A、16B及16C是概念图,显示依照本发明第四实施例,作为编译器所转换的调用程序的示范性应用程序模块121、要调用的示范性库程序模块151、在调用库程序模块151时执行的示范性进程。具体地说,图16A显示保存各程序模块固有数据区地址的示范性表格,图16B显示依照第四实施例的应用程序模块的示范性代码区和示范性数据区,图16C显示依照第四实施例的库程序模块的示范性代码区和示范性数据区。
如图16A所示,在第四实施例中,存储各程序模块固有数据区地址的表格被称为CCT(文字控制表),它用于各调用应用程序模块,各调用应用程序、各调用应用进程、各调用进程、各调用任务、各调用应用、各调用进程或各调用任务。
在调用应用程序模块121中,通过参考应用程序模块121的CCT,读出“0x600”,这是应用程序模块121自身的数据区地址,在DP内设置这个数值,并利用该数值作为偏移地址存取外部变量,来使用应用程序模块121的固有数据区125。
为从该应用程序模块121调用库程序模块151内包括的函数“bar”,首先把要转移至函数“bar”的参数A、B保存在堆栈内。
随后,在应用程序模块121中,地址被保存在堆栈中,该地址用于从函数“bar”返回至应用程序模块121本身,即跳转至函数“bar”的跳转命令后的地址,并且控制被切换至函数“bar”。
在包括在要调用的库程序模块151内并且是控制切换到的函数“bar”中,保存DP现有内容。DP现有内容是调用应用程序模块121的固有数据地址的数值。保存该值,以便在从函数“bar”返回调用程序时,为使用应用程序模块121的固有数据区而在DP中复位。
随后,通过参考DP的内容读出应用程序模块121的CCT指针地址;通过参考该指针地址读出应用程序模块121的CCT;在函数“bar”内应用程序模块121本身使用的应用程序模块121的数据区155的地址(本实例中是0x800)被读出并设置在DP寄存器中。
在被应用程序模块121调用的库程序模块151内包括的函数“bar”中,DP寄存器的数值在存取外部变量时用作相对地址的基本地址。因此,用0x800作为相对地址的基本地址来存取函数“bar”使用的所有外部变量,只要从应用程序模块121调用库程序模块151,就分配应用程序模块121的数据区155。
所以,即使函数“bar”在被多个应用程序模块调用时经历再入,外部变量的存取也不会起冲突。
在从函数“bar”返回调用应用程序模块121时,DP的内容被复位至调用应用程序模块121的固有数据区地址的保存值,然后返回。
因此,在调用应用程序模块121中,其数据区可被再次使用。
第四实施例中,由于DP不在要调用的库程序模块151设置,调用方的目标程序尺寸可更小,这在频繁调用库程序模块151的情况下特别有效。
这样,即使发生应用程序模块对库程序模块的再入,例如,对外部变量的存取也不会出现冲突,因为存取是通过存储各程序模块数据存储区前导地址的表格(CCT)进行。所以,程序模块可被配置成重入。
尽管图中未显示,如果图16C内的函数“bar”给予“privatedeclaration”,则不与第二实施例一样执行上述处理,即保存DP值并通过从CCT读出而为函数“bar”设置DP值,函数“bar”是从应用程序模块121调用后使用。如果给予“private”声明,则明确执行上述处理,即保存DP值并通过从CCT读出而为函数“bar”设置DP值,函数“bar”是从应用程序模块121调用后使用。这些与第二实施例相同,这里不再说明。
这种情况下,根据从应用程序模块中包括的程序代码区调用的库程序模块包括的程序代码区的描述来鉴别是否缩短进程。据此,在要调用的应用程序模块和库程序模块不必使用不同数据区的情况中,可删除通过为各程序模块存储数据区前导地址的表格(CCT)设置前导地址的处理,从而加速目标程序的执行。由于不执行不需要的处理,目标程序的规模可以更小。
尽管图中未显示,不仅代替在图7A的固有数据区125内保存DP值和而且代替第三实施例所述的新SDP(0x0F00)值并在调重程序模块121的程序代码区123内进行保存和设置,可以准备,例如,与图16A的CCT类似的表格;该表格中可保存各程序模块的共同数据区前导地址;类似于CCT的表格和保存在该表格中的SDP值在处理过程中阅读和设置,例如在图16C的库程序模块151的程序代码区153中,库程序模块151是将要调用的库程序模块。这和上述DP值的保存和设置相同,不再进行说明。与CCT不同,类似于CCT的表格只能拥有一个执行环境。
(第五实施例)
下面说明本发明的第五实施例。第五实施例中,给予程序模块标识号;准备与各程序模块的标识号和数据区DP对应的表格;在从应用程序模块调用库程序模块时使用程序模块的标识号作为索引查阅表格,从而切换库程序模块数据区的DP与应用程序模块数据内的DP。
图17是依照本发明第五实施例的编译单元的结构方框图。如图17所示的编译单元14具有程序执行单元16和程序存储器17。
程序执行单元16由例如CPU(中央处理器)构造而成,并包括地址保存程序生成器16a、地址设置程序生成器16b、转移程序生成器16c、地址复位程序生成器16d、存取程序生成器16e、标识号指定程序生成器16g、表格制备程序生成器16h、标识号获得程序生成器16i和前导地址获得程序生成器16j。程序存储器17包括编译程序存储器17a、源程序存储器17b和目标程序存储器17c。
应注意,依照图17所示的第五实施例的编译单元中与依照图2所示的第一实施例的编译单元中相同的元件由相同参考数字识别,以下只说明与第一实施例不同的结构。
标识号指定程序生成器16g生成标识号指定程序,用于指定识别调用程序模块的标识号和识别其它程序模块的标识号。
表格制备程序生成器16h生成表格制备程序,用于使调用程序模块的指定标识号和调用程序模块数据区的前导地址相关,并且使其它程序模块的指定标识号和其它程序模块数据区的前导地址相关。
标识号获得程序生成器16i生成标识号获得程序,用于根据从调用程序模块对其它程序模块的调用命令获得其它程序模块的标识号。
前导地址获得程序生成器16j生成前导地址获得程序,以便利用获得的标识号作为索引,从制备的表格获得其它程序模块的数据区的前导地址。
图18是依照本发明第五实施例的终端单元的结构方框图。如图18所示的终端单元12具有程序执行单元18、存储器19、数据阅读器20和通信单元21。通信单元21保存从存储器19内服务器11发送的下载目标程序,并包括标识号指定设备21a。数据阅读器20适合阅读存储器19内的通信单元21下载的目标程序,并且包括DP表格制备设备20a。程序执行单元18由例如SDP等等构造而成,并包括地址保存设备18a、地址设置设备18b、转移设备18c、地址复位设备18d、存取设备18e、标识号获得设备18g和前导地址获得设备18h。存储器19包括应用程序模块存储器19a、库程序模块存储器19b、堆栈19c和DP表格存储器19d。
依照图18所示的第五实施例的终端单元中与依照图5所示的第一实施例的编译单元中相同的元件由相同参考数字识别,以下只说明与第一实施例不同的结构。
标识号指定设备21a向应用程序模块指定用于识别作为调用程序模块的应用程序模块的标识号,以及向库程序模块指定用于识别作为其它程序模块的库程序模块的标识号。
DP表格制备设备20a使标识号指定设备21a所指定的应用程序模块标识号与应用程序模块数据区的前导地址(DP)相关,并且使标识号指定设备21a所指定的库程序模块标识号与库程序模块数据区的前导地址(DP)相关,以及把它保存在DP表存储器19d中。
标识号获得设备18g根据从应用程序模块到库程序模块的调用命令来获得库程序模块的标识号。
前导地址获得设备18h使用标识号获得设备18g所得到的标识号作为索引,从DP表制备设备20a生成的DP表获得库程序模块数据区的前导地址。
地址设置设备18b把应用程序模块所调用的库程序模块使用的数据区的前导地址设置在由前导地址获得设备18h获得的前导地址。
DP表存储器19d保存DP表制备设备20a生成的DP表。
图19是图18所示终端单元的示范性动态模块连接进程的流程图。
步骤S31中,通信单元21下载通过服务器11的编译单元14从源程序转换至目标程序的应用程序模块和库程序模块。
步骤S32中,标识号指定设备21a向下载的应用程序模块和库程序模块指定固有标识号。标识号指定设备21a指定的标识号分别被保存在应用程序模块存储器19a和库程序模块存储器19b中。
步骤S33中,数据阅读器20阅读应用程序模块和库程序模块的代码区。
步骤S34中,DP表制备设备20a生成DP表,DP表使存储器19的DP表存储器19d内的各程序模块数据区的前导地址与各程序模块的标识号相关。应注意,此时尚无数据被输入DP表,存储器内只确定一个区域。
步骤S35中,数据阅读器20向存取程序和库程序模块分配数据区。具体地说,应用程序模块和库程序模块的数据区被保存在存储器19的应用程序模块存储器19a和库程序模块存储器19b中。
步骤S36中,DP表制备设备20a使应用程序模块数据区的前导地址(DP)与保存在DP表存储器19d中的应用程序模块标识号相关,并且使库程序模块数据区的前导地址与保存在DP表存储器19d中的库程序模块标识号相关。
步骤S37中,标识号获得设备18g判断是否已从应用程序模块调用库程序模块。此处,如果判断库程序模块已从应用程序模块调用,则后跟步骤S38,而如果判断库程序模块未从应用程序模块调用,则设置备用状态,直至从应用程序模块调用库程序模块。
步骤S38中,地址保存设备18a通过把应用程序模块代码区和数据区的前导地址保存在存储器19的堆栈19c中来取消前导地址。
步骤S39中,标识号获得设备18g获得保存在库程序模块存储器19b内的库程序模块标识。
步骤S40中,前导地址获得设备18h使用标识号获得设备18g所得到的库程序模块标识号作为索引,查阅保存在DP表存储器19d内的DP表,并且获得对应库程序模块标识号的前导地址。
步骤S41中,地址设置设备18b通过设置前导地址获得设备18h获得的库程序模块的数据区的前导地址而切换应用程序模块的数据区的前导地址。
步骤S42中,地址复位设备18d通过复位恢复已收回存储器19的堆栈19c的应用程序模块代码区和数据区的前导地址。
这样,首先,标识号指定程序生成器16g生成标识号指定程序,用于指定识别应用程序模块的标识号和识别库程序模块的标识号。接着,表格制备程序生成器16h生成表格制备程序,用于制备表格,使应用程序模块的指定标识号和应用程序模块数据区前导地址相关,并且使库程序模块的指定标识号和库程序模块数据区的前导地址相关。根据从应用程序模块到库程序模块的调用命令,标识号获得程序生成器16i生成标识号获得程序,用于获得库程序模块的标识号。前导地址获得程序生成器16j生成前导地址获得程序,以便利用获得的标识号作为索引从制备表格获得库程序模块数据区的前导地址。另外,地址设置程序生成器16b生成前导地址切换程序,用于将应用程序模块的数据区地址切换到获得的前导地址。
相应地,代替传统的MMU(存储器管理单元)内逐页面为地址转换而制备表格,可逐个模块制备这一表格,从而可减少表格数据量,符合具有严格资源限制的小尺寸设备。另外,因为可减少表格数据量,与传统MMU的地址转换相比,可提高执行速度。
编译单元14的程序执行单元16可具有地址锁定程序生成器,用于生成对库程序模块外部定义的变量或函数锁定地址的地址锁定程序,并且终端单元12的程序执行单元18可具有地址锁定设备,用于对库程序模块外部定义的变量或函数锁定地址。这种情况下,存取设备18e使用相对地址从前导地址获得设备18h获得的前导地址存取库程序模块内部定义的变量,同时使用相对地址从PC(程序计数器)存取库程序模块内部定义的函数。另外,在使用相对地址从前导地址获得设备18h获得的前导地址存取由地址锁定设备锁定的地址后,存取设备18e通过地址锁定设备锁定的地址间接存取库程序模块外部定义的变量或函数。
采用这一配置,地址锁定程序生成器生成地址锁定程序,用于对库程序模块外部定义的变量或函数锁定地址。接着,存取程序生成器16e生成存取程序,以便使用相对地址从获得的前导地址存取库程序模块外部定义的变量或函数,使用相对地址从程序计数器存取库程序模块内部定义的函数,并且在使用相对地址从获得的前导地址存取锁定地址后,通过地址锁定设备锁定的地址间接存取库程序模块外部定义的变量或函数。相应地,库程序模块外部定义的变量或函数可通过锁定地址间接存取。
本实施例中,终端单元12下载由编译单元14内提供的表格制备程序生成器16h生成的表格制备程序,从而把数据阅读器20用作DP表格制备设备20a,同时终端单元12下载标识号指定程序生成器16g生成的标识号指定程序,从而把通信单元21用作标识号指定设备21a。然而,数据阅读器20可以预先配备与DP表格制备设备20a相同的功能,而通信单元21可以预先配备与标识号指定设备21a相同的功能。这种情况中,图17所示的编译单元14的程序执行单元16只包括地址保存程序生成器16a、地址设置程序生成器16b、转移程序生成齐16c、地址复位程序生成器16d、存取程序生成器16e、标识号获得程序生成器16i和前导地址获得程序生成器16j。
这样,根据从应用程序模块到库程序模块的调用命令,标识号获得程序生成器16i生成标识号获得程序,用于获得识别库程序模块的标识号。前导地址获得程序生成器16j生成前导地址获得程序,以便从表格获得库程序模块数据区前导地址,该表格使应用程序模块的标识号和应用程序模块数据区的前导地址相关,并且使库程序模块的标识号和库程序模块数据区的前导地址相关。然后,地址复位程序生成器16d生成前导地址切换程序,用于将应用程序模块数据区的前导地址切换到获得的前导地址。
通过逐个模块而非逐页面地为地址转换制备表格,可减少表格数据量,表格能符合具有严格资源限制的小尺寸设备。另外,编译进程所需要的时间可以缩短,并且可减少发送至终端单元12的程序模块的数据量,这是因为用于指定标识号的程序和用于制备表格的程序不必编译。
接下来,说明解决碎片的方法。如果重复写入并从存储器删除数据,存储器内的空白区域会成为碎片,并且难以在存储器内连续保存一项数据。这种情况下,一项数据不得不保存在多个区域中,导致对存储器存取速度的降低。因此,需要将碎片存储区整合为连续存储区。
图20是用于解决碎片的编译单元和终端单元的结构方框图。应注意,关于以相同参考数字识别的与其它实施例相同的元件,不再进行说明。
如图20所示,服务器11具有通信单元22和编译单元14。通信单元22向终端单元12发送由编译单元14转换的目标程序。编译单元14具有程序执行单元16和程序存储器17。程序执行单元16包括应用结束程序生成器23a、压缩程序生成器23b和应用恢复程序生成器23c。
应用结束程序生成器23a生成结束程序,它由至少一个程序模块组成,适合结束目前执行的应用程序。
压缩程序生成器23b生成压缩程序,用于压缩存储器19,即在应用结束后对存储器19应用压缩。压缩意味着将存储器19内的碎片区域整合为连续区域。
应用恢复程序生成器23c生成恢复程序,用于在压缩存储器19后从开始恢复已结束的应用程序。
终端单元12具有程序执行单元18、存储器19和通信单元21。通信单元21接收从服务器11发送的目标程序,并将它保存在存储器19内。程序执行单元18包括应用结束设备24a、压缩设备24b和应用恢复设备24c。
应用结束设备24a由至少一个程序模块组成,结束目前执行的应用程序。压缩设备24b在应用结束设备24a结束应用程序后压缩存储器18。应用恢复设备23c在压缩存储器19后从开始恢复应用结束设备24a结束的应用程序。
这样,应用结束程序生成器23a生成结束程序,它由至少一个程序模块组成,适合结束目前执行的应用程序。结束应用程序后,压缩程序生成器23b生成压缩程序,用于压缩存储器19。应用程序恢复程序生成器23c生成恢复程序,用于在压缩存储器19后从开始恢复应用程序。因此,可解决存储器的碎片,从而有效使用存储器。
接下来,说明解决存储器碎片的方法的第一变化。在第一变化中,使用独立于地址值的信息保存目前执行的应用程序状态,并在压缩后以保存状态执行应用程序。
图21是依照第一变化用于解决碎片的编译单元和终端单元的结构方框图。应注意,关于以相同参考数字识别的与其它实施例相同的元件,不再进行说明。
如图21所示,服务器11具有通信单元22和编译单元14。编译单元14具有程序执行单元16和程序存储器17。程序执行单元16包括应用程序结束程序生成器23a、应用程序信息保存程序生成器23d、压缩程序生成器23b和应用程序执行程序生成器23e。
应用程序信息保存程序生成器23d生成保存程序,用于保存独立于应用程序的地址值的信息,直至应用程序结束。
应用程序执行程序生成器23e生成执行程序,用于在压缩存储器19后阅读保存的信息,并根据阅读信息执行应用程序,直到应用程序结束的状态。
终端单元12具有程序执行单元18、存储器19和通信单元21。程序执行单元18包括应用程序结束设备24a、应用程序信息保存设备24d、压缩设备24b和应用程序执行设备24c。
应用程序信息保存设备24d保存独立于应用程序的地址值的信息,直至应用程序结束设备24a结束应用程序。应用程序执行设备24e在压缩存储器19后阅读应用程序信息保存设备24d保存的信息,并根据阅读信息执行应用程序,直到应用程序结束的状态。
这样,应用程序结束程序生成器23a生成结束程序,结束程序由至少一个程序模块组成,适合结束目前执行的应用程序。接着,应用程序信息保存程序生成器23d生成应用程序信息保存程序,用于保存独立于应用程序的地址值的信息,直至应用程序结束。压缩程序生成器23b生成压缩程序,用于压缩存储器19。压缩存储器19后,应用程序执行程序生成器23e生成应用程序执行程序,用于阅读保存的信息,并根据阅读信息执行应用程序,直到应用程序结束的状态。因此,可解决存储器的碎片,从而有效使用存储器。
接下来,说明解决存储器碎片的方法的第二变化。第二变化中,为所有存储空间提供参考标记(标识符)区域;根据参考标记可鉴别设置地址值的情况和设置除地址值以外的数值的情况,例如数字值;以及为根据压缩后参考标记设置地址值的项目执行浮动。
图22是依照第二变化用于解决碎片的编译单元和终端单元的结构方框图。应注意,关于以相同参考数字识别的与其它实施例相同的元件,不再进行说明。
如图22所示,服务器11具有通信单元22和编译单元14。编译单元14具有程序执行单元16和程序存储器17。程序执行单元16包括存储器状态保存程序生成器23f、压缩程序生成器23b和浮动程序生成器23g。
存储器状态保存程序生成器23f生成存储器状态保存程序,用于保存压缩前的存储器19状态(存储器映射)。
浮动程序生成器23g生成浮动程序,以便在压缩存储器19后为根据参考标记设置地址值的项目浮动地址值,参考标记识别通过查阅压缩前存储器19的保存状态设置地址值的情况和设置除地址值以外的数值的情况,例如数字值。
终端单元12具有程序执行单元18、存储器19和通信单元21。程序执行单元18包括存储器状态保存设备24f、压缩设备24b和浮动设备24g。
存储器状态保存设备24f在压缩前保存存储器19状态(存储器映射)。浮动设备24g在压缩存储器19后为根据参考标记设置地址值的项目浮动地址值,参考标记识别通过查阅压缩前存储器19的保存状态设置地址值的情况和设置除地址值以外的数值的情况,例如数字值。
图23A、23B和23C显示用于解决第二变化中的碎片的方法,其中图23A显示压缩前的存储器碎片状态,图23B显示压缩后的存储器状态,图23C显示浮动后的存储器状态。
在图23A所示的存储器19中,从0x300到0x400的区域未使用;地址值0x558保存在0x500;值3保存在0x554;值100保存在0x558;自0x700以上的区域未使用;其它数据保存在其它区域中。在这一变化中,为存储器19的每个存储空间提供参考标记的区域RF。在该区域RF中,设置地址值时设置“1”,而设置除地址值以外的数值时设置“0”,例如数字值。在图23A中,参考标记在地址0x550被设置为“1”,因为0x558地址值被设置为指针变量,而在地址0x554、0x558被设置为“0”,因为此处设置数字值3。
当压缩图23A所示状态的存储器19时,可获得图23B所示的状态。具体地说,如图23B所示,从0x300到0x400的未用区域消失,从0x100到0x600的区域被整合,自0x600以上的区域是存储器19内的未用区域。这种情况下,由于存储器19内地址移位,压缩前保存地址值0x558的地址0x550移位到0x450,地址0x550指向的地址0x558移位到0x458。结果,保存在地址0x450的指针变量指向的地址消失,如图23B所示。
相应地,存储器状态保存设备24f在压缩前保存存储器19的状态,浮动设备24g在压缩存储器19后鉴别参考标记值,并通过查阅压缩前保存的存储器状态和压缩后的存储器19状态为参考标记设置在“1”的项目浮动地址值。例如,如图23C所示,保存在地址0x450的地址值从0x558浮动到正确地址值0x458。
这样,指示是否设置地址值的标识符提供在存储器19内,存储器状态保存程序生成器23f生成存储器状态保存程序,用于保存压缩前的存储器19状态。接着,压缩程序生成器23b生成压缩程序,用于压缩存储器19。另外,压缩存储器19后,浮动程序生成器23g生成浮动程序,以便根据标识符,通过查阅压缩前保存的存储器19的状态设置地址值的项目浮动地址值。因此,可解决存储器的碎片,从而有效使用存储器。
接下来,说明解决存储器碎片的方法的第三变化。第三变化中,存储器内的区域分为地址值存储区,此处保存地址值,非地址值存储区,此处保存除地址值以外的数值,例如数字值,并且压缩后只为地址值存储区浮动地址值。
图24是依照第三变化用于解决碎片的编译单元和终端单元的结构方框图。应注意,关于以相同参考数字识别的与其它实施例相同的元件,不再进行说明。
如图24所示,服务器11具有通信单元22和编译单元14。编译单元14具有程序执行单元16和程序存储器17。程序执行单元16包括存储器状态保存程序生成器23h、压缩程序生成器23b和地址值存储器浮动程序生成器23i。
存储器状态保存程序生成器23h生成存储器状态保存程序,以便保存地址值存储区的状态,此处保存地址值,和非地址值存储区的状态,此处保存除地址值以外的数值。
地址值存储器浮动程序生成器23i生成浮动程序,以便在压缩地址值存储区和非地址值存储区后,通过查阅压缩前保存的地址值存储区状态只浮动地址值存储区的地址值。
终端单元12具有程序执行单元18、存储器19和通信单元21。程序执行单元18包括存储器状态保存设备24h、压缩设备24b和地址值存储器浮动设备24i。
存储器19分为地址值存储区,此处保存地址值,和非地址值存储区,此处保存除地址值以外的数值,例如数字值。
存储器状态保存设备24h保存地址值存储区状态,此处保存地址值,和非地址值存储区状态,此处保存除地址值以外的压缩前数值,例如数字值。
地址值存储器浮动设备24i在压缩地址值存储区和非地址值存储区后,通过查阅压缩前的地址值存储区状态只浮动地址值存储区的地址值。
图25A、25B和25C显示了用于解决第三变化中的碎片的方法,其中图25A显示了压缩前的存储器碎片的状态,图25B显示了压缩后的存储器的状态,图25C显示了浮动后的存储器状态。
如图25A所示,存储器19分为地址值存储区,此处保存地址值,和非地址值存储区,此处保存除地址值以外的数值,例如数字值。
在图23A所示的存储器19的地址值存储区中,从0x100到0x200的区域未使用;地址值0x304保存在0x300;0x200保存在0x304;自0x500以上的区域未使用;其它数据保存在其它区域中。另外,在存储器19的非地址值存储区中,从0x5000到0x5100的区域未使用;值1000保存在0x5200;值2000保存在0x5204;自0x5400以上的区域未使用;其它数据保存在其它区域中。
当压缩图25A所示状态的存储器19时,可获得图25B所示的状态。具体地说,如图25B所示,从0x100到0x200的未用区域消失,从0x100到0x400的区域被整合,自0x400以上的区域是存储器19地址值存储区内的未用区域。另外,在存储器19的非地址值存储区内,从0x5000到0x5100的未用区域消失;从0x5000到0x5300的区域被整合;自0x5300以上的区域未使用。
这种情况下,由于存储器19内的地址移位,压缩前保存地址值0x304的地址0x300移位到0x200;压缩前保存地址值0x200的地址0x304移位到0x204;地址0x304指向的地址0x200移位到0x100。结果,保存在地址0x200和0x240的指针变量指向的地址消失,如图25B所示。
相应地,存储器状态保存设备24h在压缩前保存存储器19的地址值存储区和非地址值存储区状态,地址值浮动设备24i通过查阅压缩前存储器状态保存设备24h保存的地址值存储区状态和压缩后存储器19的地址值存储区状态,在压缩存诸器19后只浮动地址值存储区的地址值。例如,如图25C所示,地址值存储器浮动设备24i把保存在地址0x200的地址值从0x304浮动到正确地址值0x204,并把保存在地址0x204的地址值从0x200浮动到正确地址值0x100。
这样,提供保存地址值的地址值存储区和保存除地址值以外的数值的非地址值存储器,存储器状态保存程序生成器23h生成存储器状态保存程序,以便在压缩前保存地址值存储区和非地址值存储区的状态。压缩程序生成器23b生成压缩程序,用于压缩地址值存储区和非地址值存储区。在压缩地址值存储区和非地址值存储区后,地址值存储器浮动程序生成器23i生成地址值存储器浮动程序,以便通过查阅压缩前保存的地址值存储区状态只浮动地址值存储区的地址值。因此,可解决存储器的碎片,从而有效使用存储器。
接下来,说明解决存储器碎片的方法的第四变化。在第四变化中,存储器内的区域分为保存地址值的地址值存储区和保存除地址值以外的数值,例如数字值的非地址值存储区;提供识别模块的标识号和鉴别是设置模块数据区地址还是为存储器内的指针变量设置代码区地址的标识标记(标识符);置换指针变量地址后标识号和标识标记在执行模块时设置;根据标识号和标识标记只为压缩后地址值存储器重新计算地址。
图26是依照第四变化用于解决碎片的编译单元和终端单元的结构方框图。应注意,关于以相同参考数字识别的与其它实施例相同的元件,不再进行说明。
如图26所示,服务器11具有通信单元22和编译单元14。编译单元14具有程序执行单元16和程序存储器17。程序执行单元16包括标识号/标识标记设置程序生成器23j、压缩程序生成器23b和重新计算程序生成器23k。
标识号/标识标记设置程序生成器23j生成设置程序,用于设置识别程序模块的标识号和鉴别在执行程序模块时是设置程序模块数据区地址还是在为指针置换地址值后设置代码区地址的标识标记。
重新计算程序生成器23k生成重新计算程序,以便根据压缩存储器19后的标识号和标识符重新计算地址值。
终端单元12具有程序执行单元18、存储器19和通信单元21。程序执行单元18包括标识号/标识标记设置设备24j、压缩设备24b和重新计算设备24k。
存储器19分为地址值存储区,此处保存地址值,和非地址值存储区,此处保存除地址值以外的数值,例如数字值。存储器19还具有一个区域,用于保存识别程序模块的标识号和鉴别是设置程序模块数据区地址还是设置代码区地址的标识标记。
标识号/标识标记设置设备24j设置识别程序模块的标识号和鉴别在执行程序模块时是设置程序模块数据区地址还是在为指针置换地址值后设置代码区地址的标识标记。
重新计算设备24k根据压缩存储器19后的标识号和标识符重新计算地址值。
首先,在本变化中,把程序模块保存到存储器后,指定识别程序模块的标识号,并预先保存便该标识号与数据区和代码区前导地址相关的表格。接着,标识号/标识标记设置设备24j设置识别程序模块的标识号和鉴别在执行程序模块时是设置程序模块数据区地址还是在为指针置换地址值后设置代码区地址的标识标记。在为指针设置程序模块数据区地址的情况中,标识标记被设置为“1”,而在为指针设置程序模块代码区地址的情况中,标识标记被设置为“0”。然后,压缩设备24b压缩存储器19。
压缩存储器19后,重新计算设备24k通过查阅预先保存的表格,根据标识号和标识符重新计算地址值,并把重新计算出的地址值设置为新地址值。
尽管该变化中存储器19分为地址值存储区,此处保存地址值,和非地址值存储区,此处保存除地址值以外的数值,例如数字值,本发明并不特别限于此安排。可以锁定指示地址值位置的信息。
这样,存储器19内提供识别模块的标识号和鉴别是设置模块数据区地址还是设置代码区地址的标识标记,标识号/标识标记设置程序生成器23j生成设置程序,用于在为指针置换地址值后设置标识号和标识标记。压缩程序生成器23b生成压缩程序,用于压缩存储器19。压缩存储器19后,重新计算程序生成器23k生成重新计算程序,以便根据标识号和标识标记重新计算地址值。因此,可解决存储器的碎片,从而有效使用存储器。
接下来,说明解决碎片的方法的第五变化。第五变化中,存储器内的区域分为保存地址值的地址值存储区和保存除地址值以外的数值(例如数字值)的非地址值存储区;提供识别模块的标识号和鉴别是设置模块数据区地址还是为存储器内的指针变量设置代码区地址的标识标记(标识符);为指针变量置换地址后在执行模块时设置标识号和标识标记,并且把数据区前导地址偏移值或代码区前导地址偏移值设置为地址值。在执行程序模块时使用指针变量后,使用通过向数据区的前导地址或代码区前导地址增加偏移值而转换的实际地址。
由于第五变化与第四变化的唯一区别在于地址值保存为偏移值,不再进行其它说明。
这样,存储器19内提供识别模块的标识号和鉴别是设置模块数据区地址还是设置代码区地址的标识标记,并生成偏移值设置程序,用于在为指针置换地址值后设置标识号和标识标记,并且从数据区前导地址或代码区前导地址设置偏移值。接着,生成实际地址转换程序,以便利用指针通过把数据区前导地址或代码区前导地址添加到偏移值而把地址值转换为实际地址。因此,可解决存储器的碎片,从而有效使用存储器。
接下来,说明解决碎片的方法的第六变化。在第六变化中,参考具有间接查阅目标的句柄;搜索是否有任何指示代码区或数据区被压缩移位的句柄;如果找到指示代码区或数据区的句柄,浮动该句柄并在浮动所有句柄后压缩代码区或数据区。
图27是依照第六变化用于解决碎片的编译单元和终端单元的结构方框图。应注意,关于以相同参考数字识别的与其它实施例相同的元件,不再进行说明。
如图27所示,服务器11具有通信单元22和编译单元14。编译单元14具有程序执行单元16和程序存储器17。程序执行单元16包括句柄搜索程序生成器231、压缩程序生成器23b和句柄浮动程序生成器23m。
句柄搜索程序生成器231生成搜索程序,用于搜索是否有任何指示程序代码区或数据区被压缩移位的句柄。
压缩程序生成器23b生成压缩程序,以便对程序模块的各代码区或各数据区应用压缩。
句柄浮动程序生成器23m生成句柄浮动程序,用于在找到指示代码区或数据区的句柄时浮动句柄。
压缩程序生成器23b还生成压缩程序,以便在浮动所有句柄后压缩代码区或数据区。
终端单元12具有程序执行单元18、存储器19和通信单元21。程序执行单元18包括句柄搜索设备241、压缩设备24b和句柄浮动设备24m。
存储器19内为参考所用的句柄提供一块区域,以间接查阅目标地址。因此,参考通过句柄间接查阅目标,而非直接查阅目标。句柄和目标具有一对一的对应关系。这意味着不会有多个句柄指示同一目标。另外,参考和目标具有多对一的对应关系,因为目标可能被多个不同参考查阅。
句柄搜索设备241搜索是否有任何指示程序模块代码区或数据区被压缩移位的句柄。压缩设备24b对程序模块的每个代码区或每个数据区应用压缩。句柄浮动设备24m在找到指示代码区或数据区的句柄时浮动句柄地址值。压缩设备24b在所有句柄被浮动后压缩代码区或数据区。
这样,句柄搜索程序生成器231生成搜索程序,用于搜索是否有任何指示代码区或数据区被压缩移位的句柄。如果找到指示代码区或数据区的句柄,句柄浮动程序生成器23m生成句柄浮动程序,用于浮动句柄。在所有句柄被浮动后,压缩程序生成器23b生成压缩程序,以便压缩代码区或数据区。因此,可解决存储器的碎片,从而有效使用存储器。
上述源程序、目标程序和所有其它程序被保存在计算机可读存储媒体内,在从计算机阅读后被使用和执行,从而通过网络,例如某些情况中的因特网,与其它计算机通信。同样,执行以上翻译的编译程序也被保存在计算机可读存储媒体内,通过从计算机阅读后执行编译(从源程序翻译/转换到目标程序),从而通过网络,例如因特网,与其它计算机通信。
利用该编译程序,计算机执行该编译程序所指定的编译方法。该计算机硬件和编译程序构成整个编译单元。
(实施例总结)
上述本发明的各种实施例可总结如下。
具体地说,依照本发明的编译程序用于把源程序转换为目标程序,并且使计算机可用作地址保存程序生成装置,用于保存地址保存程序,地址保存程序用于保存源程序内包括的调用程序模块使用的数据存储区地址;地址设置程序生成装置,用于生成地址设置程序,地址设置程序用于设置调用程序模块要调用的其它程序模块使用的数据存储区地址;转移程序生成装置,用于生成转移程序,以便从调用程序模块内包括的第一子程序转移至其它程序模块内包括的第二子程序;地址复位程序生成装置,用于生成地址复位程序,地址复位程序用于在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址;和存取程序生成装置,用于生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用其它程序模块的设置数据存储区相对地址存取其它程序模块的数据存储区。
采用该配置,地址保存程序生成装置生成地址保存程序,以便保存源程序内包括的调用程序模块所使用的数据存储区地址。地址设置程序生成装置生成地址设置程序,以便设置调用程序模块要调用的其它程序模块所使用的数据存储区地址。另外,转移程序生成装置生成转移程序,以便从调用程序模块内含的第一子程序转移至其它程序模块内含的第二子程序。地址复位程序生成装置生成地址复位程序,以便从作为转移末端的第二子程序返回第一子程序后,阅读和复位为调用程序模块保存的数据存储区。存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
因此,即使调用程序再入其它程序模块,因为保存了调用程序模块使用的数据存储区地址,可以取消调用程序模块的数据存储区地址,并且由于设置了调用程序模块要调用的其它程序模块的数据存储区地址,可生成重入目标程序。所以,模块间可实现动态连接。
具体而言,可自动生成重入目标程序,它能符合在有限存储区内存储目标程序,如所谓的设备安装程序,和在有限存储器内存储高级和高功能性信息处理,例如移动信息处理,目标程序的目的。所以,模块间可实现动态连接。
以上编译程序中,计算机最好还能用作鉴别装置,以便根据其它程序模块的描述鉴别是否缩短进程,其它程序模块包括源程序内包括的调用程序模块内含的第一子程序所调用的第二子程序;如果鉴别装置鉴别不缩短进程,地址保存程序生成装置生成地址保存程序,用于保存调用程序模块使用的数据存储区地址,地址设置程序生成装置生成地址设置程序,用于设置调用程序模块所调用的其它程序模块使用的数据存储区地址,转移程序生成装置生成转移程序,用于从调用程序模块内包括的第一子程序转移到其它程序模块内包括的第二子程序,地址复位程序生成装置生成地址复位程序,用于在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存数据存储区地址,并且存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区;如果鉴别装置鉴别进程要缩短,转移程序生成装置生成转移程序,以便从调用程序模块内包括的第一子程序转移到其它程序模块内包括的第二子程序,并且存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从调用程序模块的数据存储区地址存取其它程序模块的数据存储区。
采用这种配置,根据其它程序模块的描述鉴别是否要缩短进程,其它程序模块包括从源程序中包括的调用程序模块内含的第一子程序调用的第二子程序。如果鉴别装置鉴别不缩短进程,地址保存程序生成装置生成地址保存程序,用于保存调用程序模块使用的数据存储区地址。接着,地址设置程序生成装置生成地址设置程序,以便设置调用程序模块要调用的其它程序模块所使用的数据存储区地址。另外,转移程序生成装置生成转移程序,以便从调用程序模块内包括的第一子程序转移到其它程序模块内包括的第二子程序,并且地址复位程序生成装置生成地址复位程序,以便从作为转移末端的第二子程序返回第一子程序后,阅读和复位为调用程序模块保存的数据存储区。此外,存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
另一方面,如果鉴别装置鉴别进程要缩短,转移程序生成装置生成转移程序,以便从调用程序模块内包括的第一子程序转移到其它程序模块内包括的第二子程序接着,存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从调用程序模块的数据存储区地址存取其它程序模块的数据存储区。
由于根据其它程序模块的描述,包括从源程序内包括的调用程序模块内含的第一子程序调用的第二子程序,鉴别是否缩短进程,可删除保存、设置和复位地址的处理,从而加速执行目标程序,在调用程序模块和调用方程序模块不必使用不同数据区的情况中,通过不执行不需要的处理,目标程序的规模可以更小。
以上编译程序中,最好在从源程序内包括的调用程序模块内含的第一子程序调用其它程序模块内包括的第二子程序后,地址设置程序生成装置生成地址设置程序,以便从调用程序模块执行单元内保存的各程序模块的数据存储区地址表阅读并设置其它程序模块的数据存储区地址,并且存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
采用这种配置,在从源程序内包括的调用程序模块内含的第一子程序调用其它程序模块内包括的第二子程序后,地址设置程序生成装置生成地址设置程序,以便从保存于调用程序模块执行单元内的各程序模块的数据存储区地址表阅读并设置其它程序模块的数据存储区地址。接着,存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
因此,即使调用程序模块再入其它程序模块,对例如外部变量的存取不会起冲突,因为存取是通过各程序模块的数据存储区地址表进行的。所以,程序模块可被配置成重入。
在以上编译程序中,计算机最好还能再用作鉴别装置,以便根据其它程序模块的描述鉴别是否缩短进程,其它程序模块包括源程序内包括的调用程序模块内含的第一子程序所调用的第二子程序;如果鉴别装置鉴别不缩短进程,从源程序内包括的调用程序模块内含的第一子程序调用其它程序模块内含的第二子程序后,地址设置程序生成装置生成地址设置程序,以便从调用程序模块执行单元内保存的各程序模块的数据存储区地址表设置并阅读其它程序模块的数据存储区地址,并且存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区;如果鉴别装置鉴别进程要缩短,存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从调用程序模块的数据存储区地址存取其它程序模块的数据存储区。
采用这种配置,鉴别装置根据其它程序模块的描述鉴别是否要缩短进程,其它程序模块包括从源程序中包括的调用程序模块内含的第一子程序调用的第二子程序。如果鉴别装置鉴别进程不缩短,在从源程序内包括的调用程序模块内含的第一子程序调用其它程序模块内包括的第二子程序后,地址设置程序生成装置生成地址设置程序,以便从保存于调用程序模块执行单元内的各程序模块的数据存储区地址表设置并阅读其它程序模块的数据存储区地址。接着,存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
另一方面,如果鉴别装置鉴别进程要缩短,存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从调用程序模块的数据存储区地址存取其它程序模块的数据存储区。
由于根据其它程序模块的描述,包括从调用程序模块内含的第一子程序调用的第二子程序,鉴别是否缩短进程,可删除通过各程序模块的数据存储区地址表设置地址的处理,从而加速执行目标程序,在调用程序模块和调用方程序模块不必使用不同数据区的情况下,通过不执行不需要的处理,目标程序的规模可以更小。
另外,在以上编译程序中,其它程序模块的描述,包括要从源程序内含的调用程序模块中包括的第一子程序调用的第二子程序,最好是为每个第二子程序描述的声明。
采用这种配置,根据依照第二子程序处理内容的该声明存在与否,可删除设置地址的处理,从而加速目标程序的执行,因为其它程序模块的描述,包括要从源程序内含的调用程序模块中包括的第一子程序调用的第二子程序,是为每个第二子程序描述的声明。
另外,以上编译程序中,包括其它程序模块(包括调用程序模块调用的第二子程序)的源程序最好包括一种描述,用于指定要使用执行多次调用程序模块时其它程序模块内包括的外部变量共同存取的其它程序模块执行共同数据存储区,还是每次执行调用程序模块时它们共同存取的其它程序模块执行固有数据存储区。
采用这种配置,包括其它程序模块(包括调用程序模块调用的第二子程序)的源程序中包括的描述指定要使用执行多次调用程序模块时其它程序模块内包括的外部变量共同存取的其它程序模块执行共同数据存储区,还是每次执行调用程序模块时它们共同存取的其它程序模块执行固有数据存储区。
因此,即使从多个调用程序模块调用其它程序模块,也可存取各调用程序模块提供的执行固有数据存储区。所以,对例如外部变量的存取不会起冲突,程序模块可配置成重入。另外,即使从多个调用程序模块调用其它程序模块,也可存取各调用程序模块共享的执行共同数据存储区。所以,例如,可共同使用某些外部变量。
另外,在以上编译程序中,指定要使用其它程序模块执行共同数据存储区还是其它程序模块执行固有数据存储区的描述最好是为其它程序模块内每个外部变量进行描述的声明。
采用这种配置,因为指定要使用其它程序模块执行共同数据存储区还是其它程序模块执行固有数据存储区的描述是为其它程序模块内包括的每个外部变量进行描述的声明,通过判断该声明存在与否,可容易地正确使用执行共同数据存储区和执行固有数据存储区。
以上编译程序中,地址保存程序生成装置最好生成地址保存程序,用于为调用程序模块保存执行共同数据存储区地址和执行固有数据存储区地址;地址设置程序生成装置为调用程序模块调用的其它程序模块设置执行共同数据存储区地址和执行固有数据存储区地址;转移程序生成装置生成转移程序,用于从第一子程序转移到第二子程序;地址复位程序生成装置生成地址复位程序,以便在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读并复位保存的执行固有数据存储区地址和执行共同数据存储区地址;而存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含执行固有数据存储区时,使用相对地址从其它程序模块的设置执行固有数据存储区地址存取其它程序模块的数据存储区,并且在其它程序模块存取它的内含执行共同数据存储区时,使用相对地址从其它程序模块的设置执行共同数据存储区地址存取其它程序模块的数据存储区。
采用这种配置,地址保存程序生成装置生成地址保存程序,以便为调用程序模块保存执行共同数据存储区地址和执行固有数据存储区地址。地址设置程序生成装置为调用程序模块所调用的其它程序模块设置执行共同数据存储区地址和执行固有数据存储区地址。转移程序生成装置生成转移程序,以便从第一子程序转移到第二子程序。地址复位程序生成装置生成地址复位程序,以便从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的执行固有数据存储区地址和执行共同数据存储区地址。存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含执行固有数据存储区时,利用相对地址从其它程序模块的设置执行固有数据存储区地址存取数据存储区,并且在其它程序模块存取它的内含执行共同数据存储区时,使用相对地址从其它程序模块的设置执行共同数据存储区地址存取数据存储区。
因此,可以正确使用执行固有数据存储区和执行共同数据存储区。即使多个调用程序模块调用其它程序模块,对外部变量的存取不会起冲突,从而可把程序模块配置成重入,并且多个程序模块可共享外部变量。
在以上编译程序中,最好在从源程序内包括的调用程序模块调用其它程序模块后,地址设置程序生成装置生成地址设置程序,以便从调用程序模块执行单元内保存的各程序模块的数据存储区地址表阅读并设置其它程序模块的执行固有数据存储区地址,并阅读和设置调用程序模块的多次执行所存取的其它程序模块的执行共同数据存储区地址;而存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含执行固有数据存储区时,利用相对地址从其它程序的设置执行固有数据存储区地址存取数据存储区,并在其它程序模块存取它的内含执行共同数据存储区时,利用相对地址从其它程序的设置执行共同数据存储区地址存取数据存储区。
采用这种配置,在从源程序内包括的调用程序模块调用其它程序模块后,地址设置程序生成装置生成地址设置程序,以便从保存于调用程序模块执行单元内的各程序模块的数据存储区地址表阅读并设置其它程序模块的执行固有数据存储区地址,并为调用程序模块的多次执行所共同存取的其它程序阅读和设置执行共同数据存储区地址。存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含执行固有数据存储区时,利用相对地址从其它程序的设置执行固有数据存储区地址存取数据存储区,并且在其它程序模块存取它的内含执行共同数据存储区时,使用相对地址从其它程序模块的设置执行共同数据存储区地址存取数据存储区。
因此,可以正确使用执行固有数据存储区和执行共同数据存储区。即使多个调用程序模块调用其它程序模块,对外部变量的存取不会起冲突,从而可把程序模块配置成重入,并且多个程序模块可共享外部变量。
另外,在以上编译程序中,地址保存程序生成装置最好生成地址保存程序,以便在从第一子程序转移到第二子程序所需的数据前,为堆栈存储器内的调用程序模块保存执行共同数据存储区地址和执行固有数据存储区地址。
采用这种配置,地址保存程序生成装置生成地址保存程序,以便在从第一子程序转移到第二子程序所需的数据前,为堆栈存储器内的调用程序模块保存执行共同数据存储区地址和执行固有数据存储区地址。
因此,调用程序模块要调用的其它程序模块可不必在乎堆栈存储器内是否保存执行共同数据存储区地址和执行固有数据存储区地址。
另外,在以上编译程序中,源程序内包括的调用程序模块和其它程序模块,包括要从调用程序模块中包括的第一子程序调用的第二子程序,最好是相同程序模块。
采用这种配置,源程序内包括的调用程序模块和其它程序模块,包括要从调用程序模块中包括的第一子程序调用的第二子程序,是相同程序模块。
因此,通过缩短相同模组内的调用,不用降低处理速度就能完成模块内部的进程。
另外,以上编译程序中,最好是调用程序模块包括代码区和数据区;其它程序模块包括代码区和数据区;计算机可另外用作标识号获得程序生成装置,用于生成标识号获得程序,以便在接收从调用程序模块到其它程序的调用命令后,获得识别其它程序模块的标识号;前导地址获得程序生成装置,用于生成前导地址获得程序,以便利用获得的标识号作为索引,从表格获得其它程序模块的数据区前导地址,该表格使调用程序模块标识号与调用程序模块数据区前导地址相关,并使其它程序模块标识号与其它程序模块的数据区前导地址相关;以及前导地址切换程序生成装置,用于生成前导地址切换程序,以便切换获得的其它程序模块数据区前导地址和调用程序模块数据区前导地址。
采用这种配置,调用程序模块包括代码区和数据区,并且其它程序模块包括代码区和数据区。标识号获得程序生成装置生成标识号获得程序,以便在接收从调用程序模块到其它程序模块的调用命令后获得识别其它程序模块的标识号。前导地址获得程序生成装置生成前导地址获得程序,以便利用获得的标识号作为索引,从表格获得其它程序模块数据区的前导地址,该表格使调用程序模块的标识号和调用程序模块数据区的前导地址相关,并且使其它程序模块的标识号和其它程序模块数据区的前导地址相关。前导地址切换程序生成装置生成前导地址切换程序,以便切换获得的其它程序模块数据区前导地址和调用程序模块数据区前导地址。
因此,通过逐个模块而非逐页面地为地址转换制备表格,可减少表格数据量,表格能符合具有严格资源限制的小尺寸设备。
以上编译程序中,最好调用程序模块包括代码区和数据区;其它程序模块包括代码区和数据区;计算机可另外用作标识号指定程序生成装置,用于生成标识号指定程序,以便指定识别调用程序模块的标识号和识别其它程序模块的标识号;表格制备程序生成装置,用于生成表格制备程序,以便制备表格,使调用程序模块的指定标识号和调用程序模块的数据区的前导地址相关,并使其它程序模块的指定标识号和其它程序模块的数据区的前导地址相关;标识号获得程序生成装置,用于生成标识号获得程序,以便在接收从调用程序模块到其它程序的调用命令后,获得其它程序模块的标识号;前导地址获得程序生成装置,用于生成前导地址获得程序,以便利用获得的标识号作为索引,从制备的表格获得其它程序模块的数据区的前导地址;以及前导地址切换程序生成装置,用于生成前导地址切换程序,以便切换获得的其它程序模块数据区的前导地址和调用程序模块数据区的前导地址。
采用这种配置,调用程序模块包括代码区和数据区,并且其它程序模块包括代码区和数据区。标识号指定程序生成装置生成标识号指定程序,用于指定识别调用程序模块的标识号和识别其它程序模块的标识号。表格制备程序生成装置生成表格制备程序,用于制备表格,使调用程序模块的指定标识号和调用程序模块数据区的前导地址相关,并且使其它程序模块的指定标识号和其它程序模块数据区的前导地址相关。标识号获得程序生成装置生成标识号获得程序,以便在接收从调用程序模块到其它程序的调用命令后获得其它程序模块的标识号。前导地址获得程序生成装置生成前导地址获得程序,以便利用获得的标识号作为索引从制备表格获得其它程序模块数据区的前导地址。前导地址切换程序生成装置生成前导地址切换程序,以便切换获得的其它程序模块数据区的前导地址和调用程序模块数据区的前导地址。
因此,通过逐个模块而非逐页面地为地址转换制备表格,可减少表格数据量,表格能符合具有严格资源限制的小尺寸设备。
以上编译程序中,最好是使计算机还能用作地址锁定程序生成装置,用于生成地址锁定程序,以便把地址锁定在其它程序模块外部定义的变量或函数;而存取程序生成装置生成存取程序,以便利用相对地址从获得的前导地址存取其它程序模块内部定义的变量,并利用相对地址从程序计数器存取其它程序模块内部定义的函数,同时在利用相对地址从获得的前导地址存取锁定地址后,通过锁定地址间接存取其它程序模块外部定义的变量或函数。
采用这一配置,地址锁定程序生成装置生成地址锁定程序,用于把地址锁定在库程序模块外部定义的变量或函数。存取程序生成装置生成存取程序,以便使用相对地址从获得的前导地址存取其它程序模块内部定义的变量,使用相对地址从程序计数器存取其它程序模块内部定义的函数,同时在使用相对地址从获得的前导地址存取锁定地址后,通过锁定的地址间接存取其它程序模块外部定义的变量或函数。相应地,其它程序模块外部定义的变量或函数可通过锁定地址间接存取。
以上编译程序中,最好是计算机能另外用作结束程序生成装置,用于生成结束程序,以便结束由至少一个模块组成且目前在执行的应用程序;压缩程序生成装置,用于生成压缩程序,以便在结束应用程序后压缩存储器;以及恢复程序生成装置,用于生成恢复程序,以便压缩存储器后从开始恢复应用程序。
采用这种配置,结束程序生成装置生成结束程序,用于结束由至少一个程序模块组成并且目前在执行的应用程序。结束应用程序后,压缩程序生成装置生成压缩程序,用于压缩存储器。压缩存储器后,恢复程序生成装置生成恢复程序,用于从开始恢复应用程序。因此,可解决存储器的碎片,从而有效使用存储器。
在以上编译程序中,最好是计算机能够另外用作结束程序生成装置,用于生成结束程序,以便结束由至少一个模块组成且目前在执行的应用程序;保存程序生成装置,用于生成保存程序,以便保存独立于应用程序地址值的信息,直至应用程序结束;压缩程序生成装置,用于生成压缩程序,以便压缩存储器;以及执行程序生成装置,用于生成执行程序,以便在压缩存储器后阅读保存的信息并根据阅读信息执行应用程序,直到应用程序结束的状态。
采用这种配置,结束程序生成装置生成结束程序,用于结束由至少一个程序模块组成并且目前在执行的应用程序。保存程序生成装置生成保存程序,用于保存独立于应用程序地址值的信息,直至应用程序结束。压缩程序生成装置生成压缩程序,用于压缩存储器。压缩存储器后,执行程序生成装置生成执行程序,用于阅读保存的信息,并根据阅读信息执行应用程序,直到应用程序结束的状态。因此,可解决存储器的碎片,从而有效使用存储器。
在以上编译程序中,最好是在存储器内提供指示是否要设置地址值的标识符,并且计算机还能用作存储器状态保存程序生成装置,用于生成存储器状态保存程序,以便在压缩前保存存储器状态;压缩程序生成装置,用于生成压缩程序,以便压缩存储器;以及浮动程序生成装置,用于生成浮动程序,以便根据标识符为通过查阅压缩前保存的存储器状态设置地址值的项目浮动地址值。
采用这种配置,在存储器内提供指示是否要设置地址值的标识符,存储器状态保存程序生成装置生成存储器状态保存程序,用于保存压缩前的存储器状态。压缩程序生成装置生成压缩程序,用于压缩存储器。另外,压缩存储器19后,浮动程序生成装置生成浮动程序,以便根据标识符为压缩前通过查阅保存的存储器状态设置地址值的项目浮动地址值。因此,可解决存储器的碎片,从而有效使用存储器。
以上编译程序中,最好是提供保存地址值的地址值存储器和保存除地址值以外的数值的非地址值存储器,并且计算机还能用作存储器状态保存程序生成装置,用于生成存储器状态保存程序,以便在压缩前保存地址值存储器和非地址值存储器状态;压缩程序生成装置,用于生成压缩程序,以便压缩地址值存储器和非地址值存储器;以及浮动程序生成装置,用于生成浮动程序,以便在压缩地址值存储器和非地址值存储器后,通过查阅压缩前保存的地址值存储器和非地址值存储器状态,只浮动地址值存储器的地址值。
采用这种配置,提供保存地址值的地址值存储器和保存除地址值以外的数值的非地址值存储器,存储器状态保存程序生成装置生成存储器状态保存程序,以便在压缩前保存地址值存储器和非地址值存储器的状态。压缩程序生成装置生成压缩程序,用于压缩地址值存储器和非地址值存储器。在压缩地址值存储器和非地址值存储器后,浮动程序生成装置生成浮动程序,以便通过查阅压缩前保存的地址值存储器和非地址值存储器状态,只浮动地址值存储器的地址值。因此,可解决存储器的碎片,从而有效使用存储器。
以上编译程序中,最好在存储器内提供识别模块的标识号和识别要设置模块数据区地址还是设置代码区地址的标识符,并且计算机还能用作设置程序生成装置,用于生成设置程序,以便在为指针置换地址值后设置标识号和标识符;压缩程序生成装置,用于生成压缩程序,以便压缩存储器;以及浮动程序生成装置,用于生成浮动程序,以便在压缩存储器后根据标识号和标识符浮动地址值。
采用这种配置,在存储器内提供识别模块的标识号和识别是设置模块数据区地址还是设置代码区地址的标识符,而设置程序生成装置生成设置程序,用于在为指针置换地址值后设置标识号和标识符。压缩程序生成装置生成压缩程序,用于压缩存储器。压缩存储器后,重新计算程序生成装置生成重新计算程序,以便根据标识号和标识符重新计算地址值。因此,可解决存储器的碎片,从而有效使用存储器。
另外,以上编译程序中,最好在存储器内提供识别模块的标识号和识别要设置模块数据区地址还是设置代码区地址的标识符,并且计算机还能用作偏移值设置程序生成装置,用于生成偏移值设置程序,以便在为指针置换地址值后设置标识号和标识符,并从数据区前导地址或代码区前导地址设置偏移值;以及实际地址转换程序生成装置,用于生成实际地址转换程序,以便通过使用指针后向偏移值增加数据区前导地址或代码区前导地址转换成实际地址。
采用这种配置,在存储器内提供识别模块的标识号和识别是设置模块数据区地址还是设置代码区地址的标识符,而偏移值设置程序生成装置生成偏移值设置程序,用于在为指针置换地址值后设置标识号和标识符,并从数据区的前导地址或代码区前导地址设置偏移值。使用指针后,实际地址转换程序生成装置生成实际地址转换程序,用于通过向偏移值增加数据区的前导地址或代码区的前导地址而转换成实际地址。因此,可解决存储器的碎片,从而有效使用存储器。
在以上编译程序中,最好是计算机还能用作压缩程序生成装置,用于生成压缩程序,以便压缩模块的每个代码区或每个数据区,搜索程序生成装置,用于生成搜索程序,以便搜索是否存在任何指示代码区或数据区被压缩移位的句柄,以及句柄浮动程序生成装置,用于生成句柄浮动程序,以便在找到指示代码区或数据区的句柄后浮动句柄,而压缩程序生成装置生成压缩程序,用于在所有句柄被浮动后压缩代码区或数据区。
采用这种配置,搜索程序生成装置生成搜索程序,用于搜索是否有任何指示代码区或数据区被压缩移位的句柄。如果找到指示代码区或数据区的句柄,句柄浮动程序生成装置生成句柄浮动程序,用于浮动句柄。在所有句柄被浮动后,压缩程序生成装置生成压缩程序,用于压缩代码区或数据区。因此,可解决存储器的碎片,从而有效使用存储器。
另外,存储依照本发明的编译程序的计算机可读存储媒体中,计算机可读存储媒体存储的编译程序用于把源程序转换为目标程序,并且使计算机可用作地址保存程序生成装置,用于保存地址保存程序,地址保存程序用于保存源程序内包括的调用程序模块使用的数据存储区地址;地址设置程序生成装置,用于生成地址设置程序,地址设置程序用于设置调用程序模块要调用的其它程序模块使用的数据存储区地址;转移程序生成装置,用于生成转移程序,以便从调用程序模块内包括的第一子程序转移至其它程序模块内包括的第二子程序;地址复位程序生成装置,用于生成地址复位程序,地址复位程序用于在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址;和存取程序生成装置,用于生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区存取其它程序模块的数据存储区。
采用该存储媒体,地址保存程序生成装置生成地址保存程序,以便保存源程序内包括的调用程序模块所使用的数据存储区地址。地址设置程序生成装置生成地址设置程序,以便设置调用程序模块要调用的其它程序模块所使用的数据存储区地址。另外,转移程序生成装置生成转移程序,以便从调用程序模块内含的第一子程序转移至其它程序模块内含的第二子程序。地址复位程序生成装置生成地址复位程序,以便从作为转移末端的第二子程序返回第一子程序后,阅读和复位为调用程序模块保存的数据存储区。存取程序生成装置生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
因此,即使调用程序模块再入其它程序模块,因为保存了调用程序模块使用的数据存储区地址,可以取消调用程序模块的数据存储区地址,并且由于设置了调用程序模块要调用的其它程序模块的数据存储区地址,可生成重入目标程序。所以,模块间可实现动态连接。
另外,依照本发明的编译方法用于把源程序转换为目标程序,并包含地址保存程序生成步骤,使计算机可保存地址保存程序,地址保存程序用于保存源程序内包括的调用程序模块使用的数据存储区地址;地址设置程序生成步骤,使计算机可生成地址设置程序,地址设置程序用于设置调用程序模块要调用的其它程序模块使用的数据存储区地址;转移程序生成步骤,使计算机生成转移程序,以便从调用程序模块内包括的第一子程序转移至其它程序模块内包括的第二子程序;地址复位程序生成步骤,使计算机生成地址复位程序,地址复位程序用于在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址;和存取程序生成步骤,使计算机生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区存取其它程序模块的数据存储区。
采用该方法,在地址保存程序生成步骤中生成地址保存程序,以便保存源程序内包括的调用程序模块所使用的数据存储区地址。在地址设置程序生成步骤中生成地址设置程序,以便设置调用程序模块要调用的其它程序模块所使用的数据存储区地址。另外,在转移程序生成步骤中生成转移程序,以便从调用程序模块内含的第一子程序转移至其它程序模块内含的第二子程序。在地址复位程序生成步骤中生成地址复位程序,以便从作为转移末端的第二子程序返回第一子程序后,阅读和复位为调用程序模块保存的数据存储区。在存取程序生成步骤中生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
因此,即使调用程序模块再入其它程序模块,因为保存了调用程序模块使用的数据存储区地址,可以取消调用程序模块的数据存储区地址,并且由于设置了调用程序模块要调用的其它程序模块的数据存储区地址,可生成重入目标程序。所以,模块间可实现动态连接。
另外,依照本发明的编译程序用于把源程序转换为目标程序,并且包含地址保存程序生成装置,用于保存地址保存程序,地址保存程序用于保存源程序内包括的调用程序模块使用的数据存储区地址;地址设置程序生成装置,用于生成地址设置程序,地址设置程序用于设置调用程序模块要调用的其它程序模块使用的数据存储区地址;转移程序生成装置,用于生成转移程序,以便从调用程序模块内包括的第一子程序转移至其它程序模块内包括的第二子程序;地址复位程序生成装置,用于生成地址复位程序,地址复位程序用于在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址;和存取程序生成装置,用于生成存取程序,以便在其它程序模块存取它的内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区的存取其它程序模块的数据存储区。
采用这种结构,地址保存程序生成装置生成地址保存程序,以便保存源程序内包括的调用程序模块所使用的数据存储区地址。地址设置程序生成装置生成地址设置程序,以便设置调用程序模块要调用的其它程序模块所使用的数据存储区地址。另外,转移程序生成装置生成转移程序,以便从调用程序模块内含的第一子程序转移至其它程序模块内含的第二子程序。地址复位程序生成装置生成地址复位程序,以便从作为转移末端的第二子程序返回第一子程序后,阅读和复位为调用程序模块保存的数据存储区。存取程序生成装置生成存取程序,以便在其它程序模块存取它内含数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
因此,即使调用程序模块再入其它程序模块,因为保存了调用程序模块使用的数据存储区地址,可以取消调用程序模块的数据存储区地址,并且由于设置了调用程序模块要调用的其它程序模块的数据存储区地址,可生成重入目标程序。所以,模块间可实现动态连接。
另外,依照本发明的目标程序通过转换源程序而生成,并且使计算机可用作地址保存装置,用于保存源程序内包括的调用程序模块使用的数据存储区地址;地址设置装置,用于设置调用程序模块要调用的其它程序模块使用的数据存储区地址;转移装置,用于从调用程序模块内包括的第一子程序转移至其它程序模块内包括的第二子程序;地址复位装置,用于在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址;和存取装置,用于在其它程序模块存取它内含数据存储区时,利用相对地址从地址设置装置设置的其它程序模块的数据存储区地址存取其它程序模块的数据存储区。
采用这种配置,地址保存装置保存源程序内包括的调用程序模块所使用的数据存储区地址。地址设置装置设置调用程序模块要调用的其它程序模块所使用的数据存储区地址。另外,转移装置执行从调用程序模块内含的第一子程序到其它程序模块内含的第二子程序的转移。地址复位装置在从作为转移末端的第二子程序返回第一子程序后,为地址保存装置保存的调用程序模块阅读和复位数据存储区地址。存取装置在其它程序模块存取它内含的数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
因此,即使调用程序模块再入其它程序模块,因为保存了调用程序模块使用的数据存储区地址,可以取消调用程序模块的数据存储区地址,并且由于设置了调用程序模块要调用的其它程序模块的数据存储区地址,可生成重入目标程序。所以,模块间可实现动态连接。
另外,存储依照本发明的编译程序的计算机可读存储媒体中,计算机可读存储媒体存储的目标程序通过转换源程序而生成,并且使计算机可用作地址保存装置,用于保存源程序内包括的调用程序模块使用的数据存储区地址;地址设置装置,用于设置调用程序模块要调用的其它程序模块使用的数据存储区地址;转移装置,用于从调用程序模块内包括的第一子程序转移至其它程序模块内包括的第二子程序;地址复位装置,用于在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址;和存取装置,用于在其它程序模块存取它内含的数据存储区时,利用相对地址从地址设置装置设置的其它程序模块的数据存储区地址存取其它程序模块的数据存储区。
采用这种配置,地址保存装置保存源程序内包括的调用程序模块所使用的数据存储区地址。地址设置装置设置调用程序模块要调用的其它程序模块所使用的数据存储区地址。另外,转移装置执行从调用程序模块内含的第一子程序到其它程序模块内含的第二子程序的转移。地址复位装置在从作为转移末端的第二子程序返回第一子程序后,为地址保存装置保存的调用程序模块阅读和复位数据存储区地址。存取装置在其它程序模块存取它内含的数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
因此,即使调用程序模块再入其它程序模块,因为保存了调用程序模块使用的数据存储区地址,可以取消调用程序模块的数据存储区地址,并且由于设置了调用程序模块要调用的其它程序模块的数据存储区地址,可生成重入目标程序。所以,模块间可实现动态连接。
另外,依照本发明的目标程序执行方法用于执行通过转换源程序而生成的目标程序,并且包含地址保存步骤,使计算机保存源程序内包括的调用程序模块使用的数据存储区地址;地址设置步骤,使计算机设置调用程序模块要调用的其它程序模块使用的数据存储区地址;转移步骤,使计算机执行从调用程序模块内包括的第一子程序至其它程序模块内包括的第二子程序的转移;地址复位步骤,使计算机在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址;和存取步骤,使计算机在其它程序模块存取它内含的数据存储区时,利用相对地址从地址设置装置设置的其它程序模块的数据存储区地址存取其它程序模块的数据存储区。
采用这种方法,在地址保存步骤中保存源程序内包括的调用程序模块所使用的数据存储区地址。在地址设置步骤中设置调用程序模块要调用的其它程序模块所使用的数据存储区地址。另外,在转移步骤中执行从调用程序模块内含的第一子程序到其它程序模块内含的第二子程序的转移。在地址复位步骤中,在从作为转移末端的第二子程序返回第一子程序后,阅读和复位调用程序模块的保存数据存储区地址。在存取步骤中,在其它程序模块存取它内含的数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
因此,即使调用程序模块再入其它程序模块,因为保存了调用程序模块使用的数据存储区地址,可以取消调用程序模块的数据存储区地址,并且由于设置了调用程序模块要调用的其它程序模块的数据存储区地址,可生成重入目标程序。所以,模块间可实现动态连接。
另外,依照本发明的目标程序执行单元用于执行通过转换源程序而生成的目标程序,并且包含地址保存装置,用于保存源程序内包括的调用程序模块使用的数据存储区地址;地址设置装置,用于设置调用程序模块要调用的其它程序模块使用的数据存储区地址;转移装置,用于从调用程序模块内包括的第一子程序转移至其它程序模块内包括的第二子程序;地址复位装置,用于在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址;和存取装置,用于在其它程序模块存取它内含的数据存储区时,利用相对地址从地址设置装置设置的其它程序模块的数据存储区地址存取其它程序模块的数据存储区。
采用这种结构,地址保存装置保存源程序内包括的调用程序模块所使用的数据存储区地址。地址设置装置设置调用程序模块要调用的其它程序模块所使用的数据存储区地址。另外,转移装置执行从调用程序模块内含的第一子程序到其它程序模块内含的第二子程序的转移。地址复位装置在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位数据存储区地址。存取装置在其它程序模块存取它内含的数据存储区时,利用相对地址从其它程序模块的设置数据存储区地址存取其它程序模块的数据存储区。
因此,即使调用程序模块再入其它程序模块,因为保存了调用程序模块使用的数据存储区地址,可以取消调用程序模块的数据存储区地址,并且由于设置了调用程序模块要调用的其它程序模块的数据存储区地址,可生成重入目标程序。所以,模块间可实现动态连接。
在以上目标程序执行单元中,最好是调用程序模块包括代码区和数据区;其它程序模块包括代码区和数据区;目标程序执行单元还包含标识号指定装置,用于指定识别调用程序模块的标识号和识别其它程序模块的标识号;表格制备装置,用于制备表格,使标识号指定装置指定的调用程序模块标识号和调用程序模块的数据区前导地址相关,并使标识号指定装置指定的其它程序模块标识号和其它程序模块的数据区前导地址相关;标识号获得装置,用于在接收从调用程序模块到其它程序的调用命令后,获得其它程序模块的标识号;前导地址获得装置,用于利用标识号获得装置获得的标识号作为索引,从表格生成装置制备的表格获得其它程序模块的数据区的前导地址;以及前导地址切换装置,用于切换前导地址获得装置获得的其它程序模块数据区的前导地址和调用程序模块数据区的前导地址。
采用这种结构,调用程序模块包括代码区和数据区;其它程序模块包括代码区和数据区;标识号指定装置指定识别调用程序模块的标识号和识别其它程序模块的标识号。接着,表格制备装置制备表格,使调用程序模块的指定标识号和调用程序模块数据区的前导地址相关,并且使其它程序模块的指定标识号和其它程序模块数据区的前导地址相关。标识号获得装置在接收从应用程序模块到库程序模块的调用命令后获得其它程序模块的标识号。前导地址获得装置利用获得的标识号作为索引从表格生成装置制备的表格获得其它程序模块数据区的前导地址。前导地址切换装置切换获得的其它程序模块数据区的前导地址和调用程序模块数据区的前导地址。
因此,通过逐个模块而非逐页面地为地址转换制备表格,可减少表格数据量,表格能够符合具有严格资源限制的小尺寸设备。
另外,以上目标程序执行单元中,最好是调用程序模块包括代码区和数据区;其它程序模块包括代码区和数据区;目标程序执行单元还包含标识号指定装置,用于指定识别调用程序模块的标识号和识别其它程序模块的标识号;和表格制备装置,用于制备表格,使标识号指定装置指定的调用程序模块标识号和调用程序模块的数据区的前导地址相关,并使标识号指定装置指定的其它程序模块标识号和其它程序模块的数据区的前导地址相关。
采用这种结构,调用程序模块包括代码区和数据区;其它程序模块包括代码区和数据区;标识号指定装置指定识别调用程序模块的标识号和识别其它程序模块的标识号。接着,表格制备装置制备表格,使调用程序模块的指定标识号和调用程序模块数据区的前导地址相关,并且使其它程序模块的指定标识号和其它程序模块数据区的前导地址相关。
因此,通过逐个模块而非逐页面地为地址转换制备表格,可减少表格数据量,表格能够符合具有严格资源限制的小尺寸设备。
尽管已经详细说明了本发明,以上说明只是各方面的实例,本发明并不局限于这些实施例。应该理解,在不脱离本发明范围的情况下,可设想出无数未说明的变化和实施例。
产业应用性
依照本发明的编译程序、存储编译程序的计算机可读存储媒体、编译方法和编译单元可自动生成重入目标程序,并且作为编译程序、存储编译程序的计算机可读存储媒体、编译方法、编译单元等,可有效地把用某一程序语言写入的源程序转换为某一计算机可执行的目标程序。
Claims (26)
1.一种编译方法,用于使计算机把源程序转换为目标程序,所述方法包括:
地址保存程序生成步骤,用于生成地址保存程序,以便保存源程序内包含的调用程序模块所使用的数据存储区地址,
地址设置程序生成步骤,用于生成地址设置程序,以便设置调用程序模块要调用的其它程序模块所使用的数据存储区地址,
转移程序生成步骤,用于生成转移程序,以便从调用程序模块内含的第一子程序转移至所述其它程序模块内含的第二子程序,
地址复位程序生成步骤,用于生成地址复位程序,以便从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址,以及
存取程序生成步骤,用于生成存取程序,以便在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区。
2.根据权利要求1所述的编译方法,进一步包括:
鉴别步骤,用于根据所述其它程序模块的描述鉴别是否要缩短进程,所述其它程序模块包括从源程序中包括的调用程序模块内含的第一子程序调用的第二子程序,
如果所述鉴别步骤鉴别不缩短进程,
所述地址保存程序生成步骤生成地址保存程序,以便保存调用程序模块所使用的数据存储区地址,
所述地址设置程序生成步骤生成地址设置程序,以便设置调用程序模块要调用的所述其它程序模块所使用的数据存储区地址,
所述转移程序生成步骤生成转移程序,以便从调用程序模块内含的第一子程序转移至所述其它程序模块内含的第二子程序,
所述地址复位程序生成步骤生成地址复位程序,以便在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址,以及
所述存取程序生成步骤生成存取程序,以便在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区,以及
如果所述鉴别步骤鉴别要缩短进程,
所述转移程序生成步骤生成转移程序,以便从调用程序模块内含的第一子程序转移至所述其它程序模块内含的第二子程序,以及
所述存取程序生成步骤生成存取程序,以便在所述其它程序模块存取它内含的数据存储区时,利用相对地址从调用程序模块的数据存储区地址存取所述其它程序模块的数据存储区。
3.根据权利要求1所述的编译方法,其中,从源程序内包括的调用程序模块内含的第一子程序调用所述其它程序模块内含的第二子程序后,
所述地址设置程序生成步骤生成地址设置程序,以便从调用程序模块执行单元内保存的各程序模块的数据存储区地址表阅读所述其它程序模块的数据存储区地址,并设置该数据存储区地址,以及
所述存取程序生成步骤生成存取程序,以便在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区。
4.根据权利要求3所述的编译方法,进一步包括鉴别步骤,用于根据所述其它程序模块的描述鉴别是否要缩短进程,所述其它程序模块包括从源程序中包括的调用程序模块内含的第一子程序调用的第二子程序,
如果鉴别步骤鉴别不缩短进程,在从源程序内包括的调用程序模块内含的第一子程序调用所述其它程序模块内含的第二子程序后,
所述地址设置程序生成步骤生成地址设置程序,以便从调用程序模块执行单元内保存的各程序模块的数据存储区地址表阅读所述其它程序模块的数据存储区地址,并设置该数据存储区地址,以及
所述存取程序生成步骤生成存取程序,以便在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区,以及
如果鉴别步骤鉴别要缩短进程,
所述存取程序生成步骤生成存取程序,以便在所述其它程序模块存取它内含的数据存储区时,利用相对地址从调用程序模块的数据存储区地址存取所述其它程序模块的数据存储区。
5.根据权利要求2或4所述的编译方法,其中,所述其它程序模块包括要从源程序内含的调用程序模块中包括的第一子程序调用的第二子程序,所述其它程序模块的描述是为每个第二子程序描述的声明。
6.根据权利要求1到4所述的编译方法,其中,包括含有要由调用程序模块调用的第二子程序的所述其它程序模块的源程序包括一项描述,用于指定要使用执行多次调用程序模块时所述其它程序模块内包括的所述其它程序模块外部变量共同存取的执行共同数据存储区,还是每次执行调用程序模块时所述其它程序模块内含的外部变量共同存取的所述其它程序模块执行固有数据存储区。
7.根据权利要求6所述的编译方法,其中,指定要使用所述其它程序模块执行共同数据存储区还是所述其它程序模块执行固有数据存储区的描述是为所述其它程序模块内含的每个外部变量进行描述的声明。
8.根据权利要求6所述的编译方法,其中:
所述地址保存程序生成步骤生成地址保存程序,以便保存调用程序模块的执行共同数据存储区地址和调用程序模块的执行固有数据存储区地址,
所述地址设置程序生成步骤生成地址设置程序,以便为调用程序模块所调用的所述其它程序模块设置执行共同数据存储区地址,并且为调用程序模块所调用的所述其它程序模块设置执行固有数据存储区地址,
所述转移程序生成步骡生成转移程序,以便从第一子程序转移到第二子程序,
所述地址复位程序生成步骤生成地址复位程序,以便在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的执行固有数据存储区地址和执行共同数据存储区地址,以及
所述存取程序生成步骤生成存取程序,以便在所述其它程序模块存取它内含的执行固有数据存储区时,利用相对地址从所述其它程序模块的设置执行固有数据存储区地址存取其它程序的执行固有数据存储区,并且在所述其它程序模块存取它内含的执行固有数据存储区地址时,使用相对地址从所述其它程序模块的设置执行共同数据存储区地址存取其它程序的执行共同数据存储区。
9.根据权利要求6所述的编译方法,其中,从源程序内包括的调用程序模块调用所述其它程序模块后:
所述地址设置程序生成步骤生成地址设置程序,以便从调用程序模块的执行单元内保存的各程序模块的数据存储区地址表阅读通过执行多次调用程序模块而共同存取的所述其它程序模块的执行固有数据存储区地址和所述其它程序模块的执行共同数据存储区地址,并设置这些数据存储区地址,以及
所述存取程序生成步骤生成存取程序,以便在所述其它程序模块存取它内含的执行固有数据存储区时,利用相对地址从所述其它程序模块的设置执行固有数据存储区地址存取其它程序的执行固有数据存储区,并且在所述其它程序模块存取它内含的执行固有数据存储区地址时,使用相对地址从所述其它程序模块的设置执行共同数据存储区地址存取其它程序的执行共同数据存储区。
10.根据权利要求1所述的编译方法,其中,所述地址保存程序生成步骤生成地址保存程序,以便在从第一子程序转移到第二子程序所需的数据前,为堆栈存储器内的调用程序模块保存执行共同数据存储区地址和执行固有数据存储区地址。
11.根据权利要求1到4所述的编译方法,其中,源程序内包括的调用程序模块和所述其它程序模块,包括要从调用程序模块中包括的第一子程序调用的第二子程序,是相同程序模块。
12.根据权利要求1所述的编译方法,其中,调用程序模块包括代码区和数据区,所述其它程序模块包括代码区和数据区,所述方法进一步包括:
标识号获得程序生成步骤,用于生成标识号获得程序,以便在接收从调用程序模块到所述其它程序模块的调用命令后获得识别所述其它程序模块的标识号,
前导地址获得程序生成步骤,用于生成前导地址获得程序,以便利用获得的标识号作为索引,从表格获得所述其它程序模块数据区的前导地址,该表格使调用程序模块的标识号和调用程序模块数据区的前导地址相关,并且使所述其它程序模块的标识号和所述其它程序模块数据区的前导地址相关,以及
前导地址切换程序生成步骤,用于生成前导地址切换程序,以便切换获得的所述其它程序模块数据区的前导地址和调用程序模块数据区的前导地址。
13.根据权利要求1所述的编译方法,其中,调用程序模块包括代码区和数据区,所述其它程序模块包括代码区和数据区,所述方法进一步包括:
标识号指定程序生成步骤,用于生成标识号生成程序,以便指定识别调用程序模块的标识号和识别所述其它程序模块的标识号,
表格制备程序生成步骤,用于生成表格制备程序,用于制备表格,使调用程序模块的指定标识号和调用程序模块数据区的前导地址相关,并且使所述其它程序模块的指定标识号和所述其它程序模块数据区的前导地址相关,
标识号获得程序生成步骤,用于生成标识号获得程序,以便在接收从调用程序模块到所述其它程序模块的调用命令后获得所述其它程序模块的标识号,
前导地址获得程序生成步骤,用于生成前导地址获得程序,以便利用获得的标识号作为索引,从制备的表格获得所述其它程序模块数据区的前导地址,以及
前导地址切换程序生成步骤,用于生成前导地址切换程序,以便切换获得的所述其它程序模块数据区的前导地址和调用程序模块数据区的前导地址。
14.根据权利要求1所述的编译方法,进一步包括:
地址锁定程序生成步骤,用于生成地址锁定程序,以便为地址锁定在所述其它程序模块外部定义的变量或函数,其中
所述存取程序生成步骤生成存取程序,以便利用相对地址从获得的前导地址存取所述其它程序模块内部定义的变量,并利用相对地址从程序计数器存取所述其它程序模块内部定义的函数,同时在利用相对地址从获得的前导地址存取锁定地址后,通过锁定地址间接存取所述其它程序模块外部定义的变量或函数。
15.根据权利要求1所述的编译方法,进一步包括:
结束程序生成步骤,用于生成结束程序,以便结束由至少一个程序模块组成的、并且目前在执行的应用程序,
压缩程序生成步骤,用于生成压缩程序,以便在结束应用程序后压缩存储器,以及
恢复程序生成步骤,用于生成恢复程序,以便在压缩存储器后从开始恢复应用程序。
16.根据权利要求1所述的编译方法,进一步:
结束程序生成步骤,用于生成结束程序,以便结束由至少一个程序模块组成的、并且目前在执行的应用程序,
保存程序生成步骤,用于生成保存程序,以便保存独立于应用程序地址值的信息,直至应用程序结束,
压缩程序生成步骤,用于生成压缩存储器的压缩程序,以及
执行程序生成步骤,用于生成执行程序,以便在压缩存储器后,阅读保存的信息,并根据阅读信息执行应用程序,直到应用程序结束的状态。
17.根据权利要求1所述的编译方法,其中,在存储器内提供识别是否要保存地址值的标识符,所述方法进一步包括:
存储器状态保存程序生成步骤,用于生成存储器状态保存程序,以便保存压缩前的存储器状态,
压缩程序生成步骤,用于生成压缩存储器的压缩程序,以及
浮动程序生成步骤,用于生成浮动程序,以便在压缩存储器后,根据标识符为压缩前通过查阅保存的存储器状态来设置地址值的项目浮动地址值。
18.根据权利要求1所述的编译方法,其中,提供保存地址值的地址值存储器和保存除地址值以外的数值的非地址值存储器,所述方法进一步包括:
存储器状态保存程序生成步骤,用于生成存储器状态保存程序,以便保存压缩前的地址值存储器和非地址值存储器状态,
压缩程序生成步骤,用于生成压缩程序,以便压缩地址值存储器和非地址值存储器,
浮动程序生成步骤,用于生成浮动程序,以便在压缩地址值存储器和非地址值存储器后,通过查阅压缩前保存的地址值存储器的状态,只浮动地址值存储器的地址值。
19.根据权利要求1所述的编译方法,其中,在存储器内提供识别模块的标识号和识别要设置模块数据区地址还是设置模块代码区地址的标识符,所述方法进一步包括:
设置程序生成步骤,用于生成设置程序,以便在为指针置换地址值后设置标识号和标识符,
压缩程序生成步骤,用于生成压缩存储器的压缩程序,以及
重新计算程序生成步骤,用于生成重新计算程序,以便根据压缩存储器后的标识号和标识符重新计算地址值。
20.根据权利要求1所述的编译方法,其中,在存储器内提供识别模块的标识号和识别要设置模块数据区地址还是设置模块代码区地址的标识符,所述方法进一步包括:
偏移值设置程序生成步骤,用于生成偏移值设置程序,以便在为指针置换地址值后设置标识号和标识符,并从数据区的前导地址或代码区的前导地址设置偏移值,以及
实际地址转换程序生成步骤,用于生成实际地址转换程序,以便通过使用指针后向偏移值增加数据区的前导地址或代码区的前导地址转换成实际地址。
21.根据权利要求1所述的编译方法,其中,所述方法进一步包括:
压缩程序生成步骤,用于生成压缩程序,以便压缩模块的各代码区或模块的各数据区,
搜索程序生成步骤,用于生成搜索程序,以便搜索是否有任何指示代码区或被压缩移位的数据区的句柄,以及
句柄浮动程序生成步骤,用于生成句柄浮动程序,以便在找到指示代码区或数据区的句柄时浮动句柄,
其中在所有句柄被浮动后,所述压缩程序生成步骤生成压缩程序,用于压缩代码区或数据区。
22.一种把源程序转换为目标程序的编译单元,包括:
地址保存程序生成装置,用于生成地址保存程序,以便保存源程序内包含的调用程序模块所使用的数据存储区地址,
地址设置程序生成装置,用于生成地址设置程序,以便设置调用程序模块要调用的其它程序模块所使用的数据存储区地址,
转移程序生成装置,用于生成转移程序,以便从调用程序模块内含的第一子程序转移至所述其它程序模块内含的第二子程序,
地址复位程序生成装置,用于生成地址复位程序,以便从作为转移末端的第二子程序返回第一子程序后,为调用程序模块读取和复位保存的数据存储区,以及
存取程序生成装置,用于生成存取程序,以便在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区。
23.一种执行通过转换源程序生成的目标程序的目标程序执行方法,包括:
地址保存步骤,使计算机保存源程序内包括的调用程序模块所使用的数据存储区地址,
地址设置步骤,使计算机设置调用程序模块要调用的其它程序模块所使用的数据存储区地址,
转移步骤,使计算机执行从调用程序模块内含的第一子程序到所述其它程序模块内含的第二子程序的转移,
地址复位步骤,使计算机在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址,以及
存取步骤,使计算机在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区。
24.一种执行通过转换源程序生成的目标程序的目标程序执行单元,包括:
地址保存装置,用于保存源程序内包括的调用程序模块所使用的数据存储区地址,
地址设置装置,用于设置调用程序模块要调用的其它程序模块所使用的数据存储区地址,
转移装置,用于执行从调用程序模块内含的第一子程序到所述其它程序模块内含的第二子程序的转移,
地址复位装置,用于在从作为转移末端的第二子程序返回第一子程序后,为调用程序模块阅读和复位保存的数据存储区地址,以及
存取装置,用于在所述其它程序模块存取它内含的数据存储区时,利用相对地址从所述其它程序模块的设置数据存储区地址存取所述其它程序模块的数据存储区。
25.根据权利要求24所述的目标程序执行单元,其中,调用程序模块包括代码区和数据区,所述其它程序模块包括代码区和数据区,并且所述目标程序执行单元还包含:
标识号指定装置,用于指定识别调用程序模块的标识号和识别所述其它程序模块的标识号,
表格制备装置,用于制备表格,使标识号指定装置指定的调用程序模块的标识号和调用程序模块数据区的前导地址相关,并且使标识号指定装置指定的所述其它程序模块的标识号和所述其它程序模块数据区的前导地址相关,
标识号获得装置,用于在接收从调用程序模块到所述其它程序模块的调用命令后,获得所述其它程序模块的标识号,
前导址获得装置,用于利用标识号获得装置所获得的标识号作为索引,从表格制备装置制备的表格获得所述其它程序模块数据区的前导地址,以及
前导地址切换装置,用于切换前导地址获得装置所获得的所述其它程序模块数据区的前导地址和调用程序模块数据区的前导地址。
26.根据权利要求24所述的目标程序执行单元,其中,调用程序模块包括代码区和数据区,所述其它程序模块包括代码区和数据区,并且所述目标程序执行单元还包含:
标识号指定装置,用于指定识别调用程序模块的标识号和识别所述其它程序模块的标识号,以及
表格制备装置,用于制备表格,使标识号指定装置指定的调用程序模块的标识号和调用程序模块数据区的前导地址相关,并且使标识号指定装置指定的所述其它程序模块的标识号和所述其它程序模块数据区的前导地址相关。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP000275/2003 | 2003-01-06 | ||
JP2003000275 | 2003-01-06 | ||
JP402207/2003 | 2003-12-01 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1820252A CN1820252A (zh) | 2006-08-16 |
CN100388200C true CN100388200C (zh) | 2008-05-14 |
Family
ID=36919520
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2003801083783A Expired - Fee Related CN100388200C (zh) | 2003-01-06 | 2003-12-26 | 编译方法、编译单元,目标程序执行方法及单元 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100388200C (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104714834B (zh) * | 2013-12-14 | 2018-01-12 | 中国航空工业集团公司第六三一研究所 | 一种空间确定的任务调度方法 |
CN108121285B (zh) * | 2017-12-20 | 2020-08-25 | 中国铁道科学研究院 | 基于连续功能图的应用软件协同编译方法及装置 |
JP6950635B2 (ja) * | 2018-07-03 | 2021-10-13 | オムロン株式会社 | コンパイル装置およびコンパイル方法 |
CN112084013B (zh) * | 2019-06-13 | 2024-04-05 | 武汉杰开科技有限公司 | 一种程序调用方法、芯片及计算机存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6093216A (en) * | 1998-05-29 | 2000-07-25 | Intel Corporation | Method of run-time tracking of object references in Java programs |
-
2003
- 2003-12-26 CN CNB2003801083783A patent/CN100388200C/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6093216A (en) * | 1998-05-29 | 2000-07-25 | Intel Corporation | Method of run-time tracking of object references in Java programs |
Non-Patent Citations (9)
Title |
---|
Java Compiler Technology and Java Performance. 冀振燕,程虎.中国学术期刊(光盘版)电子杂志社. 2000 |
Java Compiler Technology and Java Performance. 冀振燕,程虎.中国学术期刊(光盘版)电子杂志社. 2000 * |
Java编译系统的研究. 冀振燕,程虎.中国学术期刊(光盘版)电子杂志社. 1999 |
Java编译系统的研究. 冀振燕,程虎.中国学术期刊(光盘版)电子杂志社. 1999 * |
Microsoft Wondows and the C compiler options. Rogerson D,1-21,http://msdn.microsoft.com. 1992 The PowerPC Compiler Writer's Guide. HOXEY S,18-20,http://the.wall.riscom.net/books/proc/ppc/cwg. 1966 |
Microsoft Wondows and the C compiler options. Rogerson D,1-21,http://msdn.microsoft.com. 1992 * |
The PowerPC Compiler Writer's Guide. HOXEY S,18-20,http://the.wall.riscom.net/books/proc/ppc/cwg. 1966 * |
Turbo C编译模式深入研究. 唐培和.中国学术期刊(光盘版)电子杂志社. 1994 |
Turbo C编译模式深入研究. 唐培和.中国学术期刊(光盘版)电子杂志社. 1994 * |
Also Published As
Publication number | Publication date |
---|---|
CN1820252A (zh) | 2006-08-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7913243B2 (en) | Method and system for generating and applying patches to a computer program concurrently with its execution | |
CN1575453B (zh) | 解决地址空间冲突的方法和装置 | |
JP4018158B2 (ja) | 可変命令セットコンピュータ | |
US6151618A (en) | Safe general purpose virtual machine computing system | |
EP2487585B1 (en) | Method and device for dynamically loading relocatable file | |
EP1557760A2 (en) | Method and system for improving performance of java virtual machine | |
US9081626B2 (en) | Method and apparatus for converting software | |
US9235389B2 (en) | Method of providing embedded software development tool for supporting embedded software development environment based on native building, and apparatus thereof | |
US7076765B1 (en) | System for hiding runtime environment dependent part | |
JP2000035893A (ja) | デ―タ処理システムの配列の静的初期化方法、デ―タ処理方法、並びにデ―タ処理システム及びその制御手順をコンピュ―タに実行させるプログラムを記憶したコンピュ―タ読み取り可能な記憶媒体 | |
CN109739508B (zh) | 源代码编译方法、装置、系统及存储介质 | |
CN104461503A (zh) | 动态组成软件界面的方法与系统 | |
KR20040048246A (ko) | 자바 실행 장치 및 자바 실행 방법 | |
CN101231597A (zh) | 智能卡中java程序指令的执行方法 | |
KR101407629B1 (ko) | 자바 변환 가속 장치 및 방법 | |
JP2007535241A (ja) | 条件付で実行可能モジュールを縮小するシステムおよび方法 | |
CN111767116A (zh) | 面向机械臂程序开发编程语言的虚拟机及对汇编文件的运行方法 | |
CN106406972A (zh) | 程序编译方法和编译器 | |
US20060242491A1 (en) | Method and system for applying patches to a computer program concurrently with its execution | |
US6175935B1 (en) | Software debugging method and recording medium to which debugging program has been recorded | |
CN100388200C (zh) | 编译方法、编译单元,目标程序执行方法及单元 | |
US6959430B2 (en) | Specialized heaps for creation of objects in object-oriented environments | |
KR20010079730A (ko) | 프로세서의 작업 메모리내에서 스와핑된 프로그램 모듈을칩카드상에 링킹하기 위한 방법 | |
US20110113409A1 (en) | Symbol capabilities support within elf | |
US7770152B1 (en) | Method and apparatus for coordinating state and execution context of interpreted languages |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080514 Termination date: 20191226 |