可编程智能装置的便携式安全交易系统.pdf

上传人:00062****4422 文档编号:1010361 上传时间:2018-03-25 格式:PDF 页数:87 大小:3.38MB
返回 下载 相关 举报
摘要
申请专利号:

CN97195913.7

申请日:

1997.06.26

公开号:

CN1223737A

公开日:

1999.07.21

当前法律状态:

撤回

有效性:

无权

法律详情:

发明专利申请公布后的视为撤回||||||公开

IPC分类号:

G07F7/10; G06K19/07

主分类号:

G07F7/10; G06K19/07

申请人:

欧罗巴国际公司;

发明人:

G·海恩斯; P·约翰尼斯

地址:

比利时滑铁卢

优先权:

1996.06.27 GB 9613450.7

专利代理机构:

上海专利商标事务所

代理人:

李玲

PDF下载: PDF下载
内容摘要

本发明提供一种在第一装置(1)与第二装置之间执行交易的交易管理系统,所述第一和第二装置适合于彼此通信,第一和第二装置中至少有一个为集成电路卡,所述系统包括:至少一个输入/输出装置(25);一便携式虚拟机器(20),用以解译第一装置上的计算机程序,所述虚拟机器包括一虚拟微处理器和用于至少一输入/输出装置(25)的驱动器;以及根据所述已解译程序执行所述程序的执行装置。本发明背后的一般链接技术概念是与交易系统中数据安全性和运行时间保证相结合的便携性,只要成功地通过编译时间检查,这与目标的执行无关。一般链接技术概念可通过如下所述实现,利用虚拟机器作解译器,包括虚拟机器中I/O装置用的驱动器,以使应用程序具有一个与I/O装置的公共接口,因此在广泛的不同的环境中可携;在存储器的分配和解除分配以及包括应用程序中存储器量的指示,这意味着所述程序只能成功地运行或者完全不运行,安全管理功能减少到最少,这提高了操作速度,提供一种从应用程序和数据库中输入、输出数据的安全方式。

权利要求书

1: 一种在第一装置与第二装置之间执行交易的交易管理系统,其特征在于: 所述第一和第二装置适合于彼此通信并且所述第一和第二装置中至少一个为集 成电路卡,所述系统包括: 至少一个输入/输出装置; 对所述第一装置上计算机程序进行解译的一便携式虚拟机器,所述虚拟机器 包括一虚拟微处理器和一用于所述输入/输出装置中至少一个装置的驱动器;以及 响应于所述解译程序而执行所述程序的执行装置。
2: 一种包括与第二装置进行交易的第一装置的终端机,其特征在于:所述第 一和第二装置中至少一个装置为集成电路卡,所述终端机包括: 对所述第一装置上计算机程序进行解译的便携式虚拟机器,所述虚拟机器包 括一虚拟微处理器和一用于所述输入/输出装置中至少一个装置的驱动器;以及 响应于所述所述解译程序而执行所述程序的执行装置。
3: 一种包括与第二装置进行交易的第一装置的自含便携式智能卡,其特征在 于所述智能卡包括: 便携式虚拟机器,所述虚拟机器包括一虚拟微处理器和一用于所述输入/输出 装置中至少一个装置的驱动器。
4: 如权利要求1所述的系统或如权利要求2所述的终端机或如权利要求3所 述的智能卡,其特征在于:所述虚拟机器的机器指令为一组记号,所述记号为专 用字节代码。
5: 如权利要求3或4所述的智能卡,其特征在于进一步包括存储在所述智能 卡上的计算机程序、对所述计算机程序进行解译的所述虚拟机器和响应于所述所 述解译程序而执行所述程序的执行装置。
6: 如权利要求4所述的系统或终端机或如权利要求5所述的智能卡,其特征 在于:所述计算机程序以从所述组记号中选出的记号和相应的直接插入数据的流 的方式撰写。
7: 如权利要求6所述的系统或终端机或智能卡,其特征在于:所述记号流以 模块传送,模块包括所述记号流以及执行模块所需的相应直接插入数据。
8: 如权利要求7所述的系统或终端机或智能卡,其特征在于:所述模块还包 括执行所述模块对存储器要求之指示。
9: 如权利要求8所述的系统或终端机或智能卡,其特征在于:所述虚拟机器 还包括载入所述模块和解译其中记号的装置。
10: 如权利要求9所述的系统或终端机或智能卡,其特征在于:所述的记号 载入和解译装置读出所述模块中的所述记号,如果读出的记号不属于所述记号组 则发出一异常情况。
11: 如权利要求7至10中任何一项所述的系统或终端机或智能卡,其特征在 于:所述虚拟机器包括可读/写的逻辑地址空间,所述空间具有至少一个所述模块 的储存库,所述模块包括其执行所需的可读/写的逻辑地址空间量的指示; 所述虚拟机器还包括依据所述指示在所述模块的载入时分配可读/写的逻辑 地址空间量的装置,所述的已分配可读/写逻辑地址空间具有已限定和受保护的边 界。
12: 如权利要求11所述的系统或终端机或智能卡,其特征在于进一步包括在 终止所述模块时解除所述已分配可读/写逻辑地址空间量的装置。
13: 如权利要求9至12中任何一项所述的系统或终端机或智能卡,其特征在 于:所述第二装置包括提供至少一条至少能修改所述计算机程序执行时间性态的 程序指令的装置;在所述载入和解译装置已经载入所述模块后并且所述模块正在 运行时;所述载入和解译装置依据预定安全条件载入并解译所述至少一条程序指 令;所述执行装置按照所述虚拟机器的解译对所述载入程序指令作出响应并且利 用所述修改性态来执行所述计算机程序。
14: 如权利要求13所述的系统或终端机或智能卡,其特征在于:所述安全条 件由一函数所提供。
15: 如权利要求9至14中任何一项所述的系统或终端机或智能卡,其特征在 于进一步包括可读/写逻辑地址空间,所述空间包括至少一个数据库,所述数据库 包括至少一条记录,所述模块包括执行所述模块必须的非初始化可读/写逻辑地址 空间量的指示; 所述载入器依据所述指示分配非初始化逻辑地址空间的所需量;以及 访问所述数据库中记录的装置,所述数据库中的所述记录仅可通过所述模块 访问,所述访问装置在所述数据库当前记录上提供一视窗并把所述记录复制到可 由所述应用程序寻址的一部分所述非初始化可读/写逻辑地址空间中。
16: 一种交易管理系统,其特征在于所述系统包括: 第一装置和第二装置,所述第一和第二装置适合于彼此通信,所述第一和第 二装置中至少一种为集成电路卡; 所述第二装置包括提供至少一条至少能修改所述第一装置上所述计算机程 序执行时间性态的程序指令的装置; 所述第一装置包括一虚拟机器,所述虚拟机器包括载入和解译所述计算机程 序的装置,在所述载入和解译装置已经装入所述计算机程序后并且所述计算机程 序正在运行时,所述载入和解译装置进一步适合于依据预定安全条件载入并解译 所述至少一条程序指令;所述执行装置根据所述载入程序指令利用所述修改性态 来执行所述已载入和解译的计算机程序。
17: 一种包括与第二装置进行交易的第一装置的终端机,所述第一和第二装 置中至少一个装置为集成电路卡,其特征在于: 所述第二装置包括提供至少一条能够至少修改所述第一装置上所述计算机 程序执行时间性态的程序指令的装置;所述终端机包括: 所述第一装置包括一虚拟机器,所述虚拟机器包括载入和解译所述计算机程 序的装置,在所述载入和解译装置已经装入所述计算机程序后并且所述计算机程 序正在运行时,所述载入和解译装置进一步适合于依据预定安全条件载入并解译 所述至少一条程序指令;所述执行装置根据所述载入程序指令利用所述修改性态 来执行所述已载入和解译的计算机程序。
18: 一种包括与第二装置进行交易的第一装置的自含便携式智能卡,其特征 在于: 所述第二装置包括提供至少一条能够至少修改所述第一装置上所述计算机 程序执行时间性态的程序指令的装置,所述智能卡包括: 所述第一装置包括一虚拟机器,所述虚拟机器包括载入和解译所述计算机程 序的装置,在所述载入和解译装置已经装入所述计算机程序后并且所述计算机程 序正在运行时,所述载入和解译装置依据预定安全条件载入并解译所述至少一条 程序指令;所述执行装置根据所述载入程序指令利用所述修改性态来执行所述已 载入和解译的计算机程序。
19: 如权利要求16所述的系统或如权利要求17所述的终端机或如权利要求 18所述的智能卡,其特征在于:所述安全条件由一函数所提供。
20: 如权利要求19所述的系统或终端机或智能卡,其特征在于:所述至少一 程序指令为第一程序指令,所述第一装置包括能够至少修改所述计算机程序执行 时间性态的第二程序指令,所述第一程序指令包括对所述第二程序指令的引用; 以及 所述载入和解译装置对所述引用作出响直,载入所述第二程序指令,所述执 行装置按照所述第二程序指令所确定的修改后性态来执行所述计算机程序。
21: 如权利要求20所述的系统或终端机或智能卡,其特征在于:所述计算机 程序和所述第一和第二程序指令以记号和相应直接插入数据的流方式撰写,每一 记号为从一组专用字节代码中选出的专用字节代码。
22: 如权利要求21所述的系统或终端机或智能卡,所述虚拟机器把所述第一 和第二程序指令的所述记号和所述直接插入数据的流引导到所述计算机程序的 记号流中。
23: 如权利要求21或22所述的系统或终端机或智能卡,其特征在于:至少 所述计算机程序的记号流以及至少所述第二程序指令各自以模块传送,每个模块 为包括相关的记号流以及执行所述模块所需的相应直接插入数据。
24: 如权利要求23所述的系统或终端机或智能卡,其特征在于:所述模块还 包括执行所述模块所需的存储器指示。
25: 如权利要求23或24所述的系统或终端机或智能卡,其特征在于:所述 计算机程序的模块还包括至少一个可修改的插座的互斥表,所述至少一个插座限 定所述虚拟机器在所述计算机程序模块的记号流和直接插入数据中输入所述第 一程序指令的位置。
26: 如权利要求25所述的系统或终端机或智能卡,其特征在于:所述计算机 程序模块中所述至少一个可修改的插座包括执行向量至缺省性态。
27: 如权利要求26所述的系统或终端机或智能卡,其特征在于:如果所述预 定安全条件不允许所述至少一程序指令载入时,所述执行装置以所述缺省性态来 执行所述计算机程序。
28: 如权利要求23或27所述的系统或终端机或智能卡,其特征在于:所述 虚拟机器包括可读/写逻辑地址空间,所述模块包括其执行所需的可读/写逻辑地 址空间量指示; 所述虚拟机器还包括依据所述指示在载入所述计算机程序模块时分配可读/ 写逻辑地址空间量的装置,所述的已分配可读/写逻辑地址空间具有已限定和保护 的边界;以及 在所述计算机程序模块结束时解除分配所述可读/写逻辑地址空间量的装 置。
29: 如权利要求23或28所述的系统或终端机或智能卡,进一步包括可读/ 写逻辑地址空间,所述空间包括至少一个数据库,所述数据库包括多条记录,所 述模块包括执行所述模块所必须的非初始化可读/写逻辑地址空间量的指示; 所述载入装置依据所述指示分配非初始化逻辑地址空间的所需量;以及 存取所述数据库中记录的装置,所述数据库中的记录仅可通过所述模块存 取,所述存取装置在所述数据库目前记录上提供一视窗并且把所述记录复制到可 由所述应用程序寻址的一部分非初始化可读/写逻辑地址空间中。
30: 如权利要求16或27所述的系统或终端机或智能卡,其特征在于:所述 安全条件为包括至少验证所述第二装置上数据与程序指令的起原和完整性的装 置。
31: 一种在第一装置与第二装置之间执行交易的交易系统,所述系统包括: 解译施加到其上的一组专用字节代码记号的虚拟机器; 所述虚拟机器包括虚拟处理单元和可读/写逻辑地址空间; 至少一个第一应用程序包括用于执行时所需的可读/写逻辑地址空间量的指 示,所述至少一个第一应用程序以从所述一组记号中选出的记号和相应直接插入 数据的流的方式撰写; 所述虚拟机器还包括: 载入所述至少一个第一应用程序的载入器; 依据所述指示,特别为所述至少一个第一应用程序分配第一可读/写逻辑地址 空间量的装置,所述的已分配可读/写逻辑地址空间具有已限定和保护的边界。
32: 一种包括与第二装置进行交易的第一装置的终端机,所述第一装置包 括:解译施加到其上的一组专用字节代码记号的虚拟机器; 所述虚拟机器包括虚拟处理单元和可读/写逻辑地址空间; 至少一个第一应用程序包括用于执行时所需的可读/写逻辑地址空间量的指 示,所述至少一个第一应用程序以从所述一组记号中选出的记号流和相应直接插 入数据方式撰写; 所述虚拟机器还包括: 载入所述至少一个第一应用程序的载入器; 依据所述指示,特别为所述至少一个第一应用程序分配第一可读/写逻辑地址 空间量的装置,所述的已分配可读/写逻辑地址空间具有已限定和保护的边界。
33: 一种包括与第二装置进行交易的第一装置的自含便携式智能卡,所述第 一装置包括:解译施加到其上的一组专用字节代码记号的虚拟机器; 所述虚拟机器包括虚拟处理单元和可读/写逻辑地址空间; 至少一个第一应用程序包括用于执行时所需的可读/写逻辑地址空间量的指 示,所述至少一个第一应用程序以从所述一组记号中选出的记号和相应直接插入 数据的流的方式撰写; 所述虚拟机器还包括: 载入所述至少一个第一应用程序的载入器; 依据所述指示,特别为所述至少一个第一应用程序分配第一可读/写逻辑地址 空间量的装置,所述的已分配可读/写逻辑地址空间具有已限定和保护的边界。
34: 如权利要求31所述的系统或如权利要求32所述的终端机或如权利要求 33所述的智能卡,其特征在于进一步包括在所述至少一个程序结束时明显解除分 配所述第一读/写逻辑地址空间量的装置。
35: 如权利要求31至34中任何一项所述的系统或终端机或智能卡,其特征 在于:所述第一和第二装置中至少有一个是ICC。
36: 如权利要求31至35中任何一项所述的系统或终端机或智能卡,其特征 在于:所述第一应用程序还包括能够被输出到其它应用程序上的具有至少一个函 数的第一互斥表,进一步包括把所述至少一个函数可提供给其他程序使用的装 置。
37: 如权利要求31至36中任何一项所述的系统或终端机或智能卡,其特征 在于:所述第一应用程序为第一模块,所述其他应用程序为其他模块,每一模块 至少包括从所述一组记号中选出的记号流、相应的直接插入数据、被输出的至少 一个函数的第一互斥表和模块执行时所需的可读/写逻辑地址空间量的指示。
38: 如权利要求37所述的系统或终端机,其特征在于:所述第一模块包括至 少识别一个第二模块的第二互斥表,从中将输入至少一个函数,所述载入器在载 入所述第一模块时依据所述第二表载入所述至少第二模块。
39: 如权利要求38所述的系统或终端机或智能卡,其特征在于:如果所述被 输入的至少一个第二模块未被成功载入,那么终止所述第一模块。
40: 如权利要求37至39中任何一项所述的系统或终端机或智能卡,其特征 在于:所述分配装置在载入所述第一模块时分配第一可读/写逻辑地址空间量,从 第一地址开始仅给单个可扩充缓冲器中所述第一模块分配第二或进一步的可读/ 写逻辑地址空间量;和 在由所述第一模块释放所述第二可读/写逻辑地址空间量时,所述解除分配装 置解除分配的所述第二可读/写逻辑地址空间量以及所有超出所述第一地址的进 一步的分配。
41: 如权利要求40所述的系统或终端机或智能卡,其特征在于:所述解除分 配装置在所述第一模块结束时解除分配所述第二可读/写逻辑地址空间量和所有 超出所述第一地址的进一步的分配。
42: 如权利要求37至41中任何一项所述的系统或终端机或智能卡,其特征 在于:所述可读/写逻辑地址空间包括至少一个数据库,所述数据库包括至少一条 记录,所述模块包括所述模块执行所需的非初始化可读/写逻辑地址空间量的指 示,所述数据库中的记录仅可通过所述模块访问; 所述载入器依据所述指示分配非初始化逻辑地址/空间量的所需量;和 访问所述数据库中记录的装置,所述访问装置在所述数据库当前记录上提供 一视窗并把所述记录复制到可由所述应用程序寻址的一部分所述非初始化可读/ 写逻辑地址空间中。
43: 如权利要求34至42中任何一项所述的系统或终端机或智能卡,其特征 在于:所述解除分配装置在所述第一模块结束时删除已分配的任何可读/写逻辑地 址空间量。
44: 一种在第一装置与第二装置之间执行交易的交易系统,所述第一和第二 装置中至少有一个为集成电路卡,所述系统包括:一解译施加到其上的一组专用 字节代码记号的虚拟机器; 所述虚拟机器包括一虚拟处理单元和可读/写逻辑地址空间; 至少一个数据库包括至少一条记录和由所述虚拟机器执行的至少一个计算 机程序,所述计算机程序为以选自所述一组记号的记号流方式撰写的模块,包括 所述模块执行所需的非初始化可读/写逻辑地址空间量的指示; 载入所述模块并依据所述指示分配非初始化逻辑地址空间所需量的载入 器;和 访问所述数据库中记录的装置,所述数据库中记录仅可通过所述模块访问, 所述访问装置在所述数据库当前记录上提供一视窗并将所述记录复制到可由所 述应用程序寻址的一部分所述非初始化可读/写逻辑地址空间中。
45: 一种包括与第二装置执行交易的第一装置的终端机,所述第一和第二装 置中至少有一个为集成电路卡,所述第一装置包括:一解译施加到其上的一组专 用字节代码记号的虚拟机器; 所述虚拟机器包括一虚拟处理单元和可读/写逻辑地址空间; 至少一个数据库包括至少一条记录和由所述虚拟机器执行的至少一个计算 机程序,所述计算机程序为以选自所述一组记号的记号流方式撰写的模块,包括 所述模块执行所需的非初始化可读/写逻辑地址空间量的指示; 载入所述模块并依据所述指示分配非初始化逻辑地址空间所需量的载入 器;和 访问所述数据库中记录的装置,所述数据库中记录仅可通过所述模块访问, 所述访问装置在所述数据库当前记录上提供一视窗并将所述记录复制到可由所 述应用程序寻址的一部分所述非初始化可读/写逻辑地址空间中。
46: 一种包括与第二装置执行交易的第一装置的自含便携式智能卡, 所述第一装置包括: 一解译施加到其上的一组专用字节代码记号的虚拟机器; 所述虚拟机器包括一虚拟处理单元和可读/写逻辑地址空间; 至少一个数据库包括至少一条记录和由所述虚拟机器执行的至少一个计算 机程序,所述计算机程序为以选自所述一组记号的记号流方式撰写的模块,包括 所述模块执行所需的非初始化可读/写逻辑地址空间量的指示; 载入所述模块并依据所述指示分配非初始化逻辑地址空间所需量的载入 器;和 访问所述数据库中记录的装置,所述数据库中记录仅可通过所述模块访问, 所述访问装置在所述数据库当前记录上提供一视窗并将所述记录复制到可由所 述应用程序寻址的一部分所述非初始化可读/写逻辑地址空间中。
47: 如权利要求44所述的系统或如权利要求45所述的终端机或如权利要求 46所述的智能卡,其特征在于:所述数据库以所述模块的第一次载入举例说明 的。
48: 如权利要求1至47中任何一项所述的系统或终端机或智能卡,其特征在 于:所述虚拟机器为堆栈机器。
49: 如权利要求48所述的系统或终端机或智能卡,其特征在于:所述虚拟机 器至少为两堆栈机器,其中第一堆栈为数据堆栈而第二堆栈为返回堆栈。
50: 如权利要求1至49中任何一项所述的系统或终端机或智能卡,其特征在 于:所述虚拟机器包括局部变量帧存储器,帧指针寄存器,用于储存指向存储器 中帧起始的帧指针和指向存储器中帧结束的帧结束指针。
51: 如权利要求49或50所述的系统或终端机或智能卡,其特征在于:所述 数据堆栈和返回堆栈不是在存储器中由所述计算机程序直接选址的,而是仅可通 过由记号限定和由所述虚拟机器解译的堆栈操作存取的。
52: 如前述任何一项权利要求所述的系统或终端机,其特征在于:所述第一 装置为一手持装置。
53: 如权利要求52所述的系统或终端机,其特征在于:所述手持装置包括一 集成电路卡(ICC)。
54: 如权利要求1至53中任何一项所述的系统或终端机,其特征在于:所述 第二装置包括一ICC。
55: 如权利要求1至54中任何一项所述的系统,其特征在于:所述第一装置 为一终端机。
56: 如权利要求1至55中任何一项所述的系统或终端机或智能卡,其特征在 于:所述第一和第二装置均包括集成电路卡(ICC)。
57: 如权利要求1至56中任何一项所述的系统或终端机或智能卡,其特征在 于:所述交易包括至少执行一次下列序列: a.建立所述第一与第二装置之间的通信链路; b.选择包括所述计算机程序和限定所述交易的一组相关数据的应用程序; c.执行所述应用程序;和 d.终止所述交易。
58: 如权利要求1至57中任何一项所述的系统或终端机或智能卡,其特征在 于:所述交易为金融交易和所述系统为金融交易管理系统。
59: 一种集成电路卡,其特征在于所述集成电路卡包括能够修改如权利要求 1至58中任何一项所述的系统中或者如权利要求2至58中任何一项所述的终端 机中或者如权利要求3至58中任何一项所述的智能卡中程序运行性态的程序指 令。
60: 一种在第一装置与一第二装置之间进行交易的方法,所述第一和第二装 置中至少有一个为集成电路卡;所述方法包括在所述第二装置上提供至少一条程 序指令,至少能够修改所述第一装置上计算机程序的执行时间性态; 载入和解译所述计算机程序, 当所述计算机程序正在执行时,依据预定的安全条件,载入和解译所述至少 一条程序指令;和 根据所述已载入和解译的程序指令,以所述修改性态来执行所述被载入和解 译的计算机程序。
61: 一种在第一装置与第二装置之间进行交易的方法,所述第一和第二装置 中至少有一个为集成电路卡,所述方法包括: 解译至少一个应用程序,所述程序是以选自一组记号的字节代码记号和相应 直接插入数据的流的方式撰写的; 载入所述至少一个应用程序; 依据包含在执行所需的可读/写逻辑地址空间量的所述应用程序中的指示,分 配第一可读/写逻辑空间量,特别是所述至少一个应用程序的;以及 限定和保护所述已分配可读/写逻辑地址空间的边界。
62: 如权利要求61所述的方法,其特征在于进一步包括: 在所述至少一个第一应用程序终止时明显地解除分配的第一可读/写逻辑地 址空间量。
63: 一种在第一装置与第二装置之间进行交易系统的方法,所述第一和第二 装置中至少有一个为集成电路卡,所述方法包括:解译模块中的记号,所述记号 以选自一组记号中的记号流的方式撰写; 依据所述模块执行所需的所述模块中非初始化可读/写逻辑地址空间量的指 示,分配非初始化逻辑地址/空间量; 通过在所述数据库当前记录上提供一视窗来访问数据库中记录,数据库中的 记录仅可通过所述模块访问;把所述记录复制到可由所述模块选址的一部分所述 非初始化可读/写逻辑地址空间中。
64: 一种在第一装置与第二装置之间进行交易的方法,所述第一和第二装置 中至少有一个为集成电路卡,所述方法包括: 提供一个便携式虚拟机器,所述机器包括一虚拟微处理器和至少用于一个输 入/输出装置中的驱动器; 利用所述便携式虚拟机器来解译所述第一装置上的计算机程序;以及 根据所述已解译程序来执行所述程序。

说明书


可编程智能装置用的便携式安全交易系统

    本发明涉及一种包括诸如终端机的可编程智能装置和集成电路卡的系统以及这种卡和终端机的操作方法,终端机包括自动柜员机、个人电脑、付费电视装置、销售点终端机、健保卡或类似装置。本发明特别适用于进行金融交易。

                              技术背景

    已知各种类型的终端机可进行交易,如金融交易,它涵盖有价证券的转移或兑换或商业性质证券的交易,诸如利用健保卡的交易或用一般的数据存取,例如GSM移动电话的SLM卡。终端机,如销售点(POS)装置、自动柜员机(ATM)或GSM移动电话是已知。实际产品的范围从采用简单8位微处理器,如美国Intel公司供应的Intel 8031/8051或集成电路卡(ICC)的小型手持装置到32位计算机运行操作系统,如由美国微软公司提供的UNNIXTM或视窗NT。某些机器与个人用户卡互相作用,此卡可以是磁条卡、智能卡或集成电路卡,其中储存了用户与终端机之间开始进行通信前所需地指定用户识别和确认信息。用户将卡放置于与终端机相关的卡读出器中,执行终端机中的常驻程序并检查该卡,核对用户信息,确认其有效性,如果需要可提示用户输入密码或专用号码,如PIN(个人识别数字)。在确认后,程序正常地允许用户选择想要进行的服务,例如,提取现金、检查目前收支差额。该终端机可独立式或者通过本地方式或电信网络与大型计算机连接。这种终端机一般一天24小时服务,其运行必须最小维护和具有高度安全性。

    这种终端机代表在硬件上的重大投资,通常不需要频繁地替换。当提供新服务时必须更新在这种终端机上运行的软件和程序且更新必须安全地进行。一般地,终端机操作机构,如银行要求每一更新有保证。如此更新可由手动或经专用或公用通信网路遥控进行,如美国专利编号5,434,999所示。如此已知方案要求终端机的类型与模式对于新开发要已知,由于必须为一类终端机具体建立每一终端机的软件,因此价格昂贵。再者,能够从所有可能的提供相似服务的机构,例如所有银行或信贷机构提供服务,终端机必须能够处理所有机构的所有程序。由于个人与商业人士的高度移动性,在一个国家提供的所有服务在每台终端机都应当能够提供是有利的。这就导致每一终端机不必要大的处理容量和存储器规模。再者,这些程序中的每个程序必须按需要更新。一种解决方法是每一终端机可以使用小型工作站,可接至电信系统。如此的系统将能够进行脱线处理以及可切换到异常交易的在线处理或常驻程序的自动更新。例如为了维持可经公众电话网路而受袭击的开放系统的安全性,要求对工作站进行复杂的确认和实行必要的加密方案。随着规模和复杂度的增加,维护安全的问题还增加。

    甚至利用此系统可能有版本控制的问题,不是同一机构的所有服务用户都具有适合于最新版本服务的卡。当多国家机构在不同时间于不同国家引入或更新服务时会发生这种情况。在WO 96/18979中已经提出仅对该区段用户的个人集成电路卡而更新终端机。把表示子程序的程序指令储存于卡上并可输出至解释的终端机。采用终端机中的解释器允许同一卡用于任何包括解释器的终端机,使在终端机上的交易与主微处理器无关。然而,没有一种安全控制方法被叙述用来消除可能的危险子程序。

    上述类型的终端机还有一处理器,包括某些形式的存储器,通常为运行程序的某些随机存取存储器(RAM),存储仅需读出数据(包括终端机操作系统的程序)的某些只读存储器(ROM),以及非易失性读/写存储器,存储可改变的一般数据。用户个人数据应被保持专用,因此应该使用户不可能访问其他人的数据,无论是偶然还是故意地。再者,终端机的各种可写存储器不应随着时间而产生碎片。存储器碎片可能导致相邻存储器块大小减少以致某些程序不能运行。为了避免此问题,一些程序语言,诸如JavaTM使用无用单元收集。无用单元收集是一种试图识别存储器中不再需要的数据并解除对它分配的子程序。它是目前已通知的选项,比起用-程序来明显地解除分配其自身存储的数据。无用单元收集是管理存储器的更可靠方式。明显存储器分配和解除分配有些被保持为公共高级编程语言诸如C或C++中编程误差的最大单一来源。

    无用单元收集有数个缺点。首先,无用单元收集是一种操作系统功能而不是应用程序特有的功能。所以,无用单元收集不保证每一应用的数据在应用结束时被解除分配,而是相反地,这样的数据可能出现一段时间直到没有存取触发无用单元收集。在金融交易中需要一种减小寻址私人用户数据可能性的更安全方法。第二,它会增加操作系统所要求的存储器空间的大小。在集成电路卡和一些终端机存储器上受到限制,无用单元收集的使用可能有一严重缺点。如上所述,终端机是很少被替换的,以致各种终端机具有不同处理器能力和存储器大小,可同时在系统中正常操作。较早的终端机在其能力上通常受到严格限制。虽然最老的类型可能已被替换掉,提供更细致和复杂服务的需求意味着,较老的终端机以后或许不再经常被替换,它们中有一些的容量不再滞后。因此,对能够在多种处理器上工作的紧凑型操作系统的需要将可能依照要求保留,最后,无用单元收集一旦不利用显式解除分配便不会释放存储器。在释放时由于存储器堆积,这还能够增加所需的存储器量。

    运行时间存储器管理的一种安全方法如美国专利编号5,434,999所述。例如,依据该已知方法,终端机中的解释器进行任何处理存储器地址指令的系统检查,以验证请求存取的存储器区域是否被认可。该系统的缺点是每个指令必须检查,以此方式处理非常慢。程序运行时间检查是浪费性态。

    需要一种提供可编程终端机的系统,允许应用程序员产生在不同种类的终端机上便携的和中立的软件,即,与终端机中使用的处理器无关,不需要对终端机的每一类型或制造进行类型认可。终端机常驻操作系统和应用程序最好是紧凑、迅速执行和符合安全要求的。再者,如果应用程序容易更新,至少每一用户可得到期望的服务,最好与终端机地理位置无关。

    本发明的目的是提供一种交易用的安全交易管理系统和操作这一系统的方法。

    本发明的进一步目的是提供交易用的安全终端机和集成电路卡以及操作这些装置的方法。

    本发明的进一步目的是提供一种在能够在小型手持装置,如集成电路卡上执行交易中使用的装置。

    本发明的进一步目的是提供一种能够利用终端机或集成电路卡作为更新信息的源对终端机或集成电路卡进行更新的交易系统。

    本发明的进一步目的是提供一种具有高度安全性和良好运行速度的交易管理系统和操作这一系统的方法。

    发明概要

    本发明涉及一种在第一装置与第二装置间执行交易的交易管理系统,第一与第二装置适合于彼此通信,第一与第二装置中至少有一个是集成电路卡,该系统包括:至少一输入/输出装置;便携式虚拟机器,用以解释第一装置上的计算机程序,该虚拟机器包括一虚拟微处理器与用于该至少一输入/输出装置的驱动器;以及根据所述解释程序执行所述程序的执行装置。较佳地,如果便携式虚拟机器是堆栈机器,照此带来操作速度与紧凑性。

    本发明还提供一种包括与第二装置进行交易的第一装置的终端机;第一与第二装置中至少有一个是集成电路卡,终端机包括:一便携式虚拟机器,解释第一装置上的计算机程序,所述便携式虚拟机器包括一虚拟微处理器和用于至少一输入/输出装置的驱动器,以及根据所述解释程序执行所述程序的执行装置。

    本发明还提供一种包括与第二装置进行交易的第一装置的自含便携式智能卡,该智能卡包括:一便携式虚拟机器,它包括一虚拟微处理器和用于至少一输人/输出装置的驱动器。

    本发明还提供一种交易管理系统,包括:第一装置和第二装置,第一与第二装置适合于彼此通信且第一与第二装置中至少有一个是集成电路卡;所述第二装置包括提供至少一条至少能修改第一装置上计算机程序的执行时间性态的程序指令的装置;所述第一装置包括一虚拟机器,该虚拟机器包括载入和解释所述计算机程序的装置,在所述载入和解释装置已载入所述计算机程序后并且所述计算机程序正在运行时,所述载入和解释装置进一步适合于依据预定安全条件载入和解释所述至少一条程序指令;和根据所述已载入和解释的程序指令以所述修改后性态执行所述已载入和解释程序的执行装置。

    此外,本发明还提供一种包括与第二装置进行交易的第一装置的终端机,所述第一与第二装置中至少有一个是集成电路卡,所述第二装置包括提供至少一条至少能修改第一装置上计算机程序的执行时间性态的程序指令的装置;所述终端机包括:所述第一装置,所述第一装置包括一虚拟机器,该虚拟机器包括载入和解释所述计算机程序的装置,在所述载入和解释装置已载入所述计算机程序后并且所述计算机程序正在运行时,所述载入和解释装置进一步适合于依据预定安全条件载入和解释所述至少一条程序指令;和根据所述已载入和解释的程序指令以所述修改后性态执行所述已载入和解释程序的执行装置。

    本发明还提供一种包括与第二装置进行交易的第一装置的自含便携式智能卡,所述第二装置包括提供至少一条至少能修改第一装置上计算机程序的执行时间性态的程序指令的装置,所述智能卡包括:所述第一装置,所述第一装置包括一虚拟机器,该虚拟机器包括载入和解释所述计算机程序的装置,在所述载入和解释装置已载入所述计算机程序后并且所述计算机程序正在运行时,所述载入和解释装置进一步适合于依据预定安全条件载入和解释所述至少一条程序指令;和响应于所述已载入和解释的程序指令以所述修改后性态执行所述已载入和解释程序的执行装置。

    本发明还提供一种在第一装置与第二装置间执行交易的交易系统,所述系统包括:解释施加于此的一组专用字节代码记号的虚拟机器;所述虚拟机器包括一虚拟处理单元与可读/写逻辑地址空间;至少一个第一应用程序包括其执行所需的可读/写逻辑地址空间量的指示,该至少一个第一应用程序是以选自一组记号的记号和相应直接插入数据的流的方式撰写;所述虚拟机器还包括:载入所述至少一个第一应用程序的载入器;和依据所述指示分配第一可读/写逻辑地址空间量,特别是针对所述至少一个第一应用程序的装置,所述分配的可读/写逻辑地址空间具有限定和保护边界。根据本发明的第一装置可以是接至国际互连网并运行浏览器的个人计算机,由浏览器接收的每个模块的要求必须包括其存储器要求指示,改善浏览器的安全性以及限制可能受到包含在输入模块中的任何病毒的侵害。

    本发明还提供一种包括与第二装置进行交易的第一装置的终端机,所述第一装置包括:解释施加于此的一组专用字节代码记号的虚拟机器;所述虚拟机器包括一虚拟处理单元与可读/写逻辑地址空间;至少一个第一应用程序包括其执行所需的可读/写逻辑地址空间量的指示和能够被输出到其它应用程序上至少具有一个函数的第一互斥表,该至少一个第一应用程序是以选自一组记号的记号和相应直接插入数据的流的方式撰写;所述虚拟机器还包括:载入所述至少一个第一应用程序的载入器;和依据所述指示分配第一可读/写逻辑地址空间量,特别是针对所述至少一个第一应用程序的装置,所述分配的可读/写逻辑地址空间具有限定和保护边界。

    本发明还提供一种包括与第二装置进行交易的第一装置的自含便携智能卡,所述第一装置包括:解释施加于此的一组专用字节代码记号的虚拟机器;所述虚拟机器包括一虚拟处理单元与可读/写逻辑地址空间;至少一个第一应用程序包括其执行所需的可读/写逻辑地址空间量的指示,该至少一个第一应用程序是以选自一组记号的记号和相应直接插入数据的流的方式撰写;所述虚拟机器还包括:载入所述至少一个第一应用程序的载入器;和依据所述指示分配第一可读/写逻辑地址空间量,特别是针对所述至少一个第一应用程序的装置,所述分配的可读/写逻辑地址空间具有限定和保护边界。

    本发明还提供一种在第一装置与第二装置间执行交易的交易系统,第一与第二装置中至少一个是集成电路卡,该系统包括:解释施加于此的一组专用字节代码记号的虚拟机器;所述虚拟机器包括一虚拟处理单元与可读/写逻辑地址空间;至少一个数据库包括至少一条记录和由所述虚拟机器执行的至少一个计算机程序,所述计算机程序为一以选自一组记号的记号流方式撰写的模块并包括执行所述模块所需的非初始化可读/写逻辑地址空间量的指示;载入所述模块和依据所述指示分配非初始化逻辑地址空间所需量的载入器;和访问所述数据库中记录的装置,数据库中的记录仅可通过所述模块访问,所述访问装置在数据库目前记录上提供一视窗并把该记录复制到由所述应用程序可寻址的一部分非初始可读/写逻辑地址空间中。

    此外,本发明还提供一种包括与第二装置进行交易的第一装置的终端机,第一与第二装置中至少一个是集成电路卡,所述第一装置包括:解释施加于此的一组专用字节代码记号的虚拟机器;所述虚拟机器包括一虚拟处理单元与可读/写逻辑地址空间;至少一个数据库包括至少一条记录和至少一个由所述虚拟机器执行的计算机程序,所述计算机程序为一以选自一组记号的记号流方式撰写的模块并包括执行所述模块所需的非初始化可读/写逻辑地址空间量的指示;载入所述模块和依据所述指示分配非初始化逻辑地址空间所需量的载入器;和访问所述数据库中记录的装置,数据库中的记录仅可通过所述模块访问,所述访问装置在数据库目前记录上提供一视窗并把该记录复制到由所述应用程序可寻址的一部分非初始可读/写逻辑地址空间中。

    本发明还提供一种包括与第二装置进行交易的第一装置的自含便携智能卡,所述第一装置包括:解释施加于此的一组专用字节代码记号的虚拟机器;所述虚拟机器包括一虚拟处理单元与可读/写逻辑地址空间;至少一个数据库包括至少一条记录和至少一个由所述虚拟机器执行的计算机程序,所述计算机程序为一以选自一组记号的记号流方式撰写的模块并包括执行所述模块所需的非初始化可读/写逻辑地址空间量的指示;载入所述模块和依据所述指示分配非初始化逻辑地址空间所需量的载入器;和访问所述数据库中记录的装置,数据库中的记录仅可通过所述模块访问,所述访问装置在数据库目前记录上提供一视窗并把该记录复制到由所述应用程序可寻址的一部分非初始可读/写逻辑地址空间中。

    本发明还提供一种在第一装置与第二装置间进行交易的方法,第一装置与第二装置中至少有一个是集成电路卡;所述方法包括:在第二装置上提供至少一条程序指令,至少能修改第一装置上计算机程序的执行时间性态;载入和解释该计算机程序,当该计算机程序正在运行时依据预定安全条件载入和解释该至少一程序指令;以及响应于被所述已载入和解释程序指令以修改后的性态执行该被载入与解释的计算机程序。

    本发明还提供一种在第一装置与第二装置间进行交易的方法,第一装置与第二装置中至少一个是集成电路卡;所述方法包括:解释以选自一组记号的字节代码记号和相应直接插入数据的流的方式撰写的至少一个应用程序;载入该至少一个应用程序;依据包含在所述应用程序中的程序执行所需的可读/写逻辑地址空间量的指示,具体为该至少一应用程序分配第一可读/写逻辑地址空间量,限定和保护所述被分配可读/写逻辑地址空间的边界。本方法将解释器和存储器的分配与任选明显解除分配结合使用。这提供了灵活性与便携性的混合同时提供在编译阶段在应用程序已完全通过检查后的运行时间保证。这降低了输入的应用程序中由病毒引起的侵害。

    本发明还包括一种在第一装置与一第二装置间进行交易系统的方法,第一与第二装置中至少有一个是集成电路卡;所述方法包括:解释模块中以选自一组记号的记号流方式撰写的记号;依据该模块中执行时所需的非初始可读/写逻辑地址空间量的指示分配非初始逻辑地址/空间量;提供在数据库当前记录上提供一视窗访问数据库中的记录,数据库中的记录仅可通过该模块访问;和把所述记录复制到由该模块可寻址的一部分非初始可读/写逻辑地址空间中。

    本发明还包括一种在第一装置与第二装置间进行交易系统的方法,第一与第二装置中至少一种是集成电路卡;所述方法包括:提供一便携式虚拟机器,它包括一虚拟微处理器和用于至少一输入/输出装置的驱动器;利用便携式虚拟机器解释第一装置上的计算机程序;和响应于所述已解释的程序执行所述程序。

    根据本发明,提供一种安全交易管理系统,较佳地包括一便携式虚拟微处理器。每一模块最好拥有一组保证不同于其他任何虚拟地址空间的虚拟地址空间。此外,便携式虚拟微处理器最好保护,对共享资源,如各种堆栈或数据库的存取。较佳地,最小保护是检查读出和写入的数据空间存取边界和绝对禁止写至代码空间的存储器。再者,检查最好是针对数据的下溢与上溢和返回堆栈。较佳地,模块仅可存取其他某个模块直接输出的数据。较佳地,决不可存取未输出的数据(虚拟微处理器不泄漏),通过模块提供的函数除外。一般意义上模块最好不输出数据;模块最好仅输出函数。较佳地,逻辑边界禁止数据空间泄漏。换句话说,模块所拥有的所有数据最好是完全地专用。在编译时间和运行时间上最好都强制执行这一限制,由于模块具有分开的地址空间,这意味着某些模块中某些数据的地址在其自有模块外完全无意义。较佳地,模块仅输出一组句柄,触发特定性态的开或关。较佳地,性态好的模块将能无故障运行,而性态不好的模块将被例外情况所中止,这些例外情况是在违规操作时由便携式虚拟微处理器直接产生的。

    从属权利要求限定本发明的各个实施例。现在将参考以下附图说明本发明及其实施例和优点。

    附图简要说明

    图1是依照本发明的终端机的图解表示。

    图2是依照本发明的集成电路卡的图解表示。

    图3是开发与执行本发明模块的过程的示意流程图。

    图4是依照本发明的便携式虚拟微处理器在终端机上执行时的图解表示。

    图5是依照本发明的便携式虚拟微处理器的图解表示。

    图6是依照本发明将模块载入存储器的图解表示。

    图7是依照本发明获得访问数据库记录的方法的图解表示。

    图8依照本发明的插头与插座程序的图解表示。

    图9是本发明模块载入程序的流程图。

    图10是本发明模块执行程序的流程图。

    图11是本发明插座插入程序的流程图。

    图12是依照本发明卡模块载入程序的流程图。

    本发明在附录中给出记号代码和标准例外情况。

    示范实施例的描述

    以下将参考特定附图和某些实施例来描述本发明,然而,本发明不限于这些实施例。附图仅是图示而非限制。本发明将参考金融交易进行描述,然而本发明不限于此。再者,本发明将主要参考终端机进行描述,但是本发明还包括在任何合适装置上提供依照本发明的便携式虚拟微处理器,例如,个人计算机(PC)、集成电路卡(ICC)或ICC与接口的组合,正如这里引作参考的WO 94/10657中所述。

    本发明背后的一般链接技术概念是便携能力与交易系统中数据和运行时间保证的安全性的结合,倘若编译时间检查已经成功通过则运行时间保证与所提供的目标实施无关。这一概念可通过以下一个或多个特征来实现:利用虚拟机器作为解释器,在虚拟机器中包括一I/O装置的驱动器,以使应用程序有一个与I/O装置的公共接口,因此在广泛的不同环境中可携,应用程序中包括存储器用量的指示并依据该指示分配存储器,明显解除存储器的分配以及和提供一种把数据输入到应用程序和/或数据库中以及从应用程序和/或数据库中输出数据的安全方法。

    图1是依照本发明的终端机1的图解表示。通常,终端机1包括中央处理单元(CPU)2,它经双向通信总线3与存储器4和输入/输出(I/O)装置6连接。I/O装置6可以是输入数据的键盘和诸如显示单元(如液晶(LCD)或发光二极管(LED)显示器)的显示屏,显示交易的进展和/或显示消息或提示。I/O装置6可为卡读出器7,利用它在将ICC 5插入读出器7的接收槽中时可以读出ICC 5。实际的终端机可以变化很大,例如,它可以是销售点(POS)终端机,可包括从Intel 8051至PentiumTM的处理器。再者,终端机1不必全部置于一个位置,终端机的各个部分,如卡读出器7、诸如键盘的I/O装置和显示器以及处理器可置于不同地点并由电缆线、无线传输或相似装置连接或为局域网的一部分或由电信网路互连。

    图2是依照本发明的ICC 5的图解表示。然而本发明不限于此。ICC 5包括至少一输入/输出(I/O)端口10和一些永久储存器,例如,由经总线17接至I/O端口10的电可擦可编程只读存储器(EEPROM)15或由电池后备随机存取存储器(RAM)提供的非易失性存储器。I/O端口10可用于经由卡读出器7与终端机1通信。集成电路卡是插入一个或多个集成电路以执行至少存储器功能的卡。可选择地,ICC 5可为自含便携式智能卡并包括可读/写工作存储器,例如由RAM14提供易失性存储器和中央处理器12以及使ICC 5可象微处理器一样操作的所有必要电路,例如储存代码的只读存储器13,序列发生器16,与卡读出器7连接,接收电压源Vss与VDD、处理器12的复位和时钟CLK至该序列发生器16。依照本发明,ICC 5可用作银行卡、信用卡、借贷卡、电子货币、保健卡、SIM卡等。

    本发明提供一种集成电路控制的交易管理系统,试图在ICC 5与终端机1(与中央单元连接或不被连接)间交易,交易由至少执行一次下列顺序组成:

    1.建立ICC 5与终端机1间的通信链路;

    2.进行兼容性检查以确保ICC 5与终端机1是机械电子兼容的;

    3.选择一种应用,包括选择一个计算机程序和以特定的ICC 5与终端机1组合方式限定交易的相关数据集合;

    4.执行应用程序;

    5.交易的终止,其任选地包括中断ICC 5与终端机1间的通信链路,由此采用解释器执行应用程序,或是在ICC 5上或是在终端机上或是在二者上。交易是二个或多个装置间至少是数据的交换,依照本发明不指定是商业金融交易。此系统可从PCT/BE 95/00017得知。ICC 5可能仅是存储器的集成电路卡,即不包括处理器12,ICC 5进行由终端机1确定的交易。另一方面,ICC 5可为自含便携式智能卡,交易可由终端机1或者由ICC 5或由二者决定。依照本发明,ICC 5可包括增强终端机处理安全的程序代码。具体说,ICC 5可为一个或多个维护卡,用于对存储在终端机5中的应用程序进行更新。

    依照本发明,软件运行于终端机1中以及以“虚拟机器”的方式任选地运行于ICC 5中。本发明的虚拟机器(VM)直接利用了具有标准特性的理想或虚拟微处理器,以一般方式定义寻址模式、堆栈使用、寄存器使用、地址空间、I/O装置的寻址等。核心程序写入到终端机1或ICC 5中使用的每一特定CPU类型使各个处理器2、12模拟VM。本发明的一个特定方面,即VM的核心提供I/O装置的驱动器和所有低层中央处理单元逻辑和算术功能、流量控制,时间处理。在VM中提供I/O驱动器具有的优点是为本发明VM而写的任何程序可寻址标准虚拟I/O装置。在具体CPU上实施VM则为接至终端机1或ICC 5上的实际I/O装置提供了类似可寻址虚拟I/O装置的性态。本发明的VM非常紧凑并已在西门子(Siemens)SLCO44CR芯片上(INTEL 8051家族的衍生型)上成功实施,该芯片包含在ICC 5上。依照本发明的虚拟机器利用高度标准化,可用于多种多样的中央处理单元和I/O类型上,简化了程序可转移性、测试和验证。依据本申请,把这种VM描述为便携式VM 20。便携式VM 20包括一虚拟微处理器与I/O装置的驱动器。VM20提供逻辑与算术功能以及存储器和至少一I/O装置的寻址。依照本发明的便携式VM 20通过把终端机和/或卡程序处理为编译器的中间代码在不同终端机1与卡5上可提供程序可转移性。此代码由被称为记号的字节代码组成。终端机1或ICC 5通过对这一代码的解释或者通过诸如本机码编译的其它方式对其进行处理。虚拟机器解释记号最好由三种方法中的一种完成:即直接解释虚拟机器指令、将虚拟机器语言翻译成可直接执行的中间形式,或者将其及时编译成目标CPU的实际代码。后二种方法具有性态高、成本适中但复杂。记号以集合形式提供,可看作VM 20的机器指令集。

    本发明的应用程序体现为模块,它可以包括象可执行代码的记号表。依照本发明,有二种基本类型的模块:即可执行模块(当模块被载入时有一由VM 20直接调用的进入点)和程序库模块(通过提供可执行程序起给其它模块提供资源的作用,可输出模块可以通过模块之间调用而分别执行)。

    本发明的记号集首先包括VM 20的指令集,它提供一般处理语言所期望和有效执行程序所需的指令,其次包括提供通常称为“操作系统功能”的记号。在终端机1或卡5中,操作系统的功能包括诸如I/O驱动器(如显示器与键盘)的本发明特定功能,在终端机1与卡5中,系统功能还包括通过I/O端口的数据对象通信和传输的管理以及模块间的存取和存取控制机制。提供的记号最好针对VM的操作系统,堆栈的操作,插座的处理,如异常处理法,插座本身的控制,包括其存取权,I/O装置的存取,时间处理,语言和消息处理,I/O读出器处理(如ICC、磁条卡和调制解调器的处理),黑名单的管理,安全算法,终端机服务,数据库服务,数据对象的处理(如TLV的处理),模块的处理和可扩充存储器的处理。

    单字节记号称为原始记号;这些记号指诸如通常在任何指令集中看到的原始指令。多字节记号称为二次记号,被用作使用频度低的服务。本申请的附录中提供了VM 20的整个记号。如图3中所示意的,应用程序被撰写在个人电脑(PC)主开发系统70上,经过诸如Forth、C、Pascal等合适的高级语言的调试和类型核准。然后,在记号编译器71上将程序的原代码编译成记号流。该记号流可分别与程序所需的其他数据(相应直接插入数据)和标题组合,并封装在模块传递文件中,建立一模块72,最好采用标准化模块传递格式。如果模块含有可执行记号,以可执行程序格式传递。本发明的一个特别方面是可执行模块不仅包括记号流而且还包括所有相应直接插入数据(封装)。本发明的另一个不同特别方面是依照本发明的模块包括VM 20应当分配多少可读写存储器供模块执行之用的指不。

    通过任何合适装置,如在ICC 5中通过电信网路把模块72传递至终端机1。模块被卸载后,它被储存于一“模块储存库”中。当需要其功能时,终端机1或卡5采用记号载入器/解释器73来处理终端机CPU2上的执行记号。此过程由执行与每一记号有关的功能组成。记号载入器/解释器72由本发明的VM 20提供。

    可以把终端机1上的VM相关软件划分成四大类:

    核心,其包括I/O驱动器的与终端机相关的设施和本说明书中为支援VM 20所需的所有功能。与VM 20有关的其他各个软件是以与机器无关的记号撰写的。

    ·终端机常驻服务(TRS)至少是一种象应用管理器那样的在VM 20上运行的模块,包括所有非应用的功能,支援这些功能的文件库,模块载入功能和限定终端机性态的主回路。特殊记号(例如DIOCTL)允许把I/O装置的与终端机相关的方面定义直接插入功能。

    终端机选择服务(TSS)包括诸如付款服务功能的应用程序和支援这些功能的文件库。TSS仅包括与终端机无关的记号,常驻在终端机1上。TRS主程序回路在特定交易需要时将选择和调用TSS功能。

    ·卡选择服务(CSS)包括支援终端机交易的功能,诸如付款服务功能,用作TSS应用的一部分。CSS驻留在ICC 5上,需要时被卸载到终端机1上。对于有二个ICC读出器8(例如,一个用于正常交易,一个用于维护)的终端机1,可以有二个不相关的CSS组(CSS1与CSS2)。

    本发明终端机1上的所有软件,在核心上,被组织为一组分离的模块。模块的基本特性在于它是已通过记号编译器71并已按照传递至目标环境(如终端机1或ICC 5)的单个包装而封装的定义和程序的集合。主终端机程序(TRS)、每个应用程序、每个程序库以及每个CSS卸载便是模块的例子。较佳地,所有模块使用标准格式。在本发明系统中核心将给这些模块提供各种高级服务的VM 20定义为:

    ·通用CPU和指令集,由记号表示;

    ·公用装置的通用I/O支援,提供一般I/O支援可以添加的附加装置;

    ·数据库管理功能;

    ·数据对象传输管理;包括格式转换和其他功能;

    ·记号模块的管理,包括在存储器中对它们的维护(需要时进行更新)和在需要时对它们的执行。在本发明较佳实施例中,模块的执行在所有时间都是在VM 20控制下进行的。因此,模块未曾取得主处理器的控制,相对于VM 20而言是被动的。VM 20最好总是以监督模式工作,只能执行以其记号集的方式定义的指令。模块都不可以按照用户模式工作,即假设取得VM 20的控制。因此,在VM 20利用内存映射的执行中,只能建立一个内存映射,即该监督映射。

    模块不可以容纳VM 20所规定的操作系统。这是有保证的,因为模块仅包括VM记号集中的记号,这些记号不允许访问存储核心的代码空间。如果记号与位于限定集合外的VM 20相遇,异常信号被抛出(ILLOP)。

    正如图4所示意的,终端机1包括终端机特定操作系统8,负责载入VM 20的TRS模块(下文中描述为载入程序)。VM 20的代码储存于终端机只读非易失性存储器11中。在载入TRS前,终端机1的终端易失性存储器19是空的,没有有关交易的数据,终端读/写非易失性存储器18包括以模块储存库中模块72的形式由VM 20执行的应用程序,非易失性存储器数据库包括用户特定数据和诸如插头档案库的档案库,下文中将对此进行描述。如果VM 20还在ICC 5上实施,如上所述的相同原理应用于ICC 5的只读非易失性存储器13、易失性存储器14和读/写非易失性存储器15。

    由于VM 20是虚拟机器,它象虚拟存储器那样对所有形式的终端机或ICC存储器11,1 8,19,13,14,15进行寻址,即正如从VM 20中看到的,在逻辑地址空间中对它们全部进行寻址。在VM 20的实际执行中,通过内存映射或类似方法把这些逻辑地址空间映射到终端机1或ICC 5的内存中的实际地址空间中。在下文中,将参考易失性、读/写非易失性和只读非易失性存储器为VM 20的一部分。应当明白,这是指逻辑寻址存储器空间,除非对终端机1或ICC 5上VM 20的执行中的实际地址有特别说明。易失性存储器经不住程序载入或断电和/或重新开机。较佳地,为了安全缘故,不要给易失性存储器切断电源。非易失性存储器经得住程序载入或断电和/或重新开机。

    虚拟机器的描述

    图5示出本发明的VM 20的图解。VM 20最好是堆栈机器并具有数据堆栈指针(储存在数据堆栈指针寄存器32中),指向单芯片存储器中下压数据堆栈27。所有操作是在这一堆栈27上进行的。数据堆栈27用于保留程序参数和表达式求值的暂时结果。数据被压入数据堆栈27或从数据堆栈弹出。VM 20还包括返回堆栈28。VM 20可以使用返回堆栈28来包括返回地址,也可用于暂时储存。这种多堆栈结构从Forth编程语言(ANSI X3·215-1994)得知。已经针对便携能力、代码密度、安全、容易编译以及与其他程序语言一起使用,对这一结构作了进一步修改成。例如,包括可以提供高级程序语言(如C语言)中使用的局部变量帧。因此,依照本发明的记号编译器71不仅可以用Forth语言而且可以用C语言和其他程序语言编译。

    依照本发明,仅有一个与VM 20相关的数据和返回堆栈27、28。数据与返回堆栈27,28不是为每一处理线程建立的。依照本发明,应用程序可以仅从返回堆栈28检索,它们直接放在当前程序内,在退出程序前必须去除在当前程序期间置于返回堆栈28上的数据。任选地,VM 20包括一安全管理器,用以提供运行时间完整性,监测返回堆栈上每一活动和检查在当前程序期间去除的所有数据。除了置于那里直接用以暂时储存的数据外,VM 20可保持返回堆栈28上的异常执行状态信息,局部变量帧、回路控制参数和数据库上下文。

    依照本发明,VM 20可包括多数堆栈。例如,不是仅采用返回堆栈28,而是任选地提供另外的堆栈29,如异常堆栈和帧堆栈。采用异常堆栈来储存在异常处理期间的执行状态。采用帧堆栈来维持局部变量信息,以及类似C语言的活动记录。如上所述,异常和帧堆栈29可在返回堆栈28上实现。

    数据、返回堆栈27、28和诸如异常堆栈的其他堆栈29不是在任何应用程序可直接存取的存储器空间中。数据或返回堆栈27、28不能直接寻址,它们只能通过堆栈操作存取。为了安全缘故,对实际实行中如何存储数据无任何限制,所以,有恶意的人无法假设数据是如何被实际储存的。

    VM 20包括一虚拟中央处理器单元22,它包括一虚拟算术逻辑单元23。VM 20对虚拟或逻辑空间24进行寻址,VM20将其当作随机存取存储器(RAM),通常作为易失性存储器19的一部分执行,例如终端机1或卡5内的随机存取存储器中。逻辑数据空间24仅可用于数据储存的存取。VM 20把模块的记号流储存于代码存储器26中,它被VM 20视为只读存储器(ROM)。只有VM 20能读出记号。代码存储器26既不可存取应用程序也不可存取任何记号。

    VM 20可包括虚拟寄存器30。VM 20寄存器30可包括记号指针寄存器31,(它有一个指向下一执行记号的指针)、数据堆栈指针寄存器32(它有一个指向数据堆栈27当前顶端(TOS)位置的指针)、返回堆栈指针寄存器33(它有一个指向返回堆栈当前顶端位置的指针)、帧指针寄存器34(它有一个指向数据空间24中的帧起点的指针)、帧结束指针寄存器35(它有一个指向数据空间24中的帧尾的指针)。由记号集不提供对寄存器31至36的直接存取,仅通过寄存器存取记号对寄存器31至36的直接存取。

    最后地,虚拟I/O装置25通过虚拟总线系统21与CPU22连接,虚拟总线系统21还与堆栈27-29、算术逻辑单元23、寄存器30、代码存储器26和数据空间24连接。

    本发明的VM 20最好定义字节寻址、二进制补码、32位机器,有32位寄存器和堆栈元件,然而本发明是不限于此。寄存器/堆栈大小称为VM 20的单元大小,单元是堆栈上由VM寄存器31至36在堆栈上处理的基本单元。VM 20使用的单元大小认为对本发明没有实质影响。

    模块的所有程序运行必须遵守下列规则。

    ·程序可以不假设保证把上述任何一类的数据保持在返回堆栈28上,所以,可以仅使用显然为给定类别指定的检索机制,因为安全管理器可以删除任何这些数据。

    把这些类别中一类数据传送至VM 20的程序在退出传送数据的过程前必须采取适当的动作,恢复VM 20的数据储存,否则VM 20将解除分配内存的相关部分。

    ·程序必须假设通过把这些类别中一类数据传送至VM 20使得以前置于返回堆栈28上的任何数据不可存取。

    ·程序必须假设通过执行给返回堆栈28赋值的代码使得传送至VM 20的这些类别中一类数据不可存取,直至已经已经去除这些值时为止,因为返回堆栈仅由指定记号程序存取。

    依照本发明,VM 20的操作系统定义一个可提供给每个模块的单一地址空间24。该地址空间24将仅供数据储存的存取,称为“数据空间”24。

    数据空间24被划分成三个逻辑区和一个任选逻辑区,每个逻辑区分别相邻:

    1.初始化数据空间41,它包括在编译时指定的和在启动VM核心时以及接着在载入含有初始化数据的模块时设定的初始值;

    2.非初始化数据空间42,它包括在程序编译期间分配的变量和状态缓冲器。此数据空间42被VM 20初始化至零;

    3.帧存储器46,它是由帧记号管理的;

    4.任选的可扩充存储器45,它包括在程序执行期间动态地分配的一个或多个缓冲器。

    另有二个数据区,它们是非直接可寻址的:

    5.扩充存储器43典型地是大容量存储器,被用于包含数据对象与易失性数据库;

    6.非易失性存储器44被用于包含由VM 20保证在模块载入或切断电源和重新启动后继续存在(在终端机硬体的限制内)的数据,包括模块储存库和非易失性数据库。它可在电池备用随机存取存储器、磁盘或其他永久储存器中实行。非易失性存储器44是读/写永久储存器18的一部份。

    为了增加数据的安全、扩充与非易失性存储器43、44的存取仅通过非初始数据空间42中以缓冲器形式提供“窗口”和所选数据的记号。因此,程序员仅可询问记录而不能知道存取数据的确切位置。较佳地,没有任何文件,也没有允许程序员定位个人文件或数据库的树结构。

    在模块使用的每一数据空间24中,存储器是由相关寻址和仅在运行时分配的。此意思即地址仅在载入模块时在每一模块中才有意义。由于不采用绝对寻址,所以,模块不可能获取至另一模块数据的存取,除非下文所述的安全模块存取机制。

    帧机制允许VM 20满足诸如C语言的语言要求,准许在运行时定义局部变量。帧保持在数据堆栈27上传送的过程参数和“局部”变量(临时的数据存储,在释放该帧时,通常在程序执行结束时将被自动释放)。在一帧中帧起始与结束指针由VM 20自动地维持。帧指针寄存器34指向帧的逻辑基地址和帧尾指针35指向数据空间24中帧的逻辑终地址。利用帧存取记号可从帧中取出参数。

    VM 20任选地提供一可扩充存储器45的动态分配缓冲池,当作VM 20管理的单个可扩充缓冲器,其出现在程序的非初始数据空间42外。程序可请求分配一定量的可扩充存储器45并使指针返回到该存储器45的基地址。随后,程序可从给定地址上释放存储器45,例如,在程序终止时可以释放超出该地址的所有分配。

    如果模块以单一线程执行则是较佳的,然而本发明不限于此。此意思为,如果模块调用第二模块,第二模块终止,在VM 20返回至第一模块和继续处理前解除第二模块所有资源的分配。图6示出由VM 20所见到的逻辑存储器的图解表示。如图6中所示略图,带有初始存储器41、非初始存储器42和帧存储器46以及记号代码空间26的第一模块(左边)在地址1处开始已被载入可读/写存储器第一模块也调用并已分配部分可扩充缓冲区45。当第二模块(右边)被第一模块调用(例如,输入功能fgh,在互斥表中它处于模块1可输入功能的首部),那么从地址2开始按照需要分配包括初始存储器41’、非初始存储器42’和帧存储器46’的数据空间24‘。模块2的记号由VM 20直接从模块储存库读出,这是本发明允许的选项。如果从模块2调用,VM 20在内存中分配的第二模块可扩充存储器45’高于第一模块可扩充存储器45’。当完成第二模块,在地址4上解除所有存储器的分配(“橡皮筋效应”)。在解除分配时最好删除所有暂时储存的数据。假如需要,那么可以把更多的可扩充存储器45调用返回至第一模块。假如再次调用第二模块,将分配一个不同于第一次调用时的可扩充存储器45’的起始位置。

    除可扩充存储器管理记号EXTEND、CEXTEND和RELEASE以及异常处理记号THROW和QTHROW外要求所有记号对可扩充存储器指针无任何净影响。如果记号分配给可扩充存储器45,还必须释放它,包括单元对准的任何效应。可扩充存储器45的依次分配在一模块中最好是邻接的,然而在模块间不必是邻接的,除非利用IMCALL或DOSOCKET记号的模块间调用将保持邻接。在完成模块的执行时将出现动态分配的可扩充存储器45的自动释放,限制了程序失误对完全释放存储器的影响。此外,如果出现THROW异常,可以把动态分配的可扩充存储器45的分配恢复至其控制CATCH异常时的条件。

    用户变量是以单元衡量大小的变量,其中VM 20保持客户程序的上下文信息。VM 20预先分配了用户变量的储存器。可以提供有限数目的变量,例如,十六个变量(称为0至15)。支援多任务的VM 20执行可以给每一任务提供一组用户变量。

    VM 20经记号CATCH、THROW和QTHROW提供单一异常处理机制。这些记号是从Lisp异常处理机制导出的,出现于如CATCH和THROW的ANS Forth中。这种机制的目的是在软件的不同层次上在程序控制下提供异常的局部处理。此概念即,程序把函数执行指针传送至记号CATCH,它将执行此函数和返回一代码,表示在其执行期间出现的什么异常(如果有的话)。如果在送至CATCH供执行的函数中出现THROW,那么CATCH记录与执行程序相关的信息,足够恢复其当前执行状态应。这包括(但不限于)数据与返回堆栈深度、帧指针以及在某些情况中的可扩充存储器指针。收集的代表执行状态的信息称为“异常帧”,异常帧被保持在异常堆栈上。按照CATCH,程序可检查可能已返回的任何异常代码,并选定对其进行本地处理或者将其THROW至较高一层的处理。VM 20提供一个缺省的最外层,其上将捕捉异常。该最外层将在已经没有内层CATCH建立时被启动。缺省的异常处理器异常中断任何当前终端交易以及试图重新载入TRS模块和重新进入TRS主回路。如果出现这种条件,VM 20发出ANS Forth异常-10(除零)。VM 20可发出ANS Forth支持的其他一般异常。

    对于处理装置和输入/输出(I/O)服务,给每一装置(包括VM 20把较低层次操作隐藏在装置特定功能之后的那些装置)分配一装置类型(用于对结果代码分类)和一唯一装置编号。装置编号是任意的;然而,可仅用单个记号作为装置编号-1至15(4位)的参考号,所以,这些号分配给最常用的装置,如键盘、ICC读出器、磁条卡读出器、显示器、打印机、电源管理装置或售货机。一般I/O设施是由把装置编号作为输入参数的函数提供的。

    依照本发明的终端机1最好包括至少三个主要非易失性数据库:指定应用的交易记录库,一种或多种语言的消息数据库以及模块数据库。VM 20尽量保护数据库,因为它们包有专用信息。限制对数据库的存取。VM 20提供一种处理数据库的机制(VM 20作为“服务器”),该机制隐蔽应用软件(应用软件作为“客户”)的执行细节。不允许从运行于VM 20上的模块直接访问数据库。服务的实施具有下列特性,将参考图7说明这些特征:

    ·在任何给定时间,客户即以模块运行的程序已经访问当前所选的数据库(DBCURRENT)和在所有限定数据库上共享的当前所选的记录数(DBRECNUM)。

    ·通过一数据库参数块(DPB)51在客户与服务器之间传送有关每一数据库的信息,服务器可进行读出与写入。在处于客户数据空间24的意义上,客户“拥有”DPB 51;但是,不允许客户直接访问它。而是,仅可以采用数据库服务记号访问数据。DPB 51有一种标准结构,它包括至少一个DPB链、数据库指针、数据库类型和记录大小指示以及下一个可利用记录数的字段。在DPB 51中必须预置指定数据库的所有信息。客户软件对DPB 51可以不作任何接着的直接访问,必须不作出在已经载入定义DPB 51的模块供执行值直接保持在DPB 51中的假设。数据库参数块51以指向模块初始化数据区段中链接表的指针(DPB链)形式被传送至记号载入器/解释器。此字段必须复位到表中下一DPB 51初始化数据中的地址;或者为零假如该DPB 51是表中最后一个或是仅有的DPB 51。对于存在于客户初始化数据空间中的编译数据库,DB指针必须复位到初始化数据中的“原始”地址。对于由服务器控制数据库的存储,字段必须预置到零。DB型以代码形式提供数据库细节。至少有三种数据库:

    “易失性”数据库,模块负载之间或者数据库驻留的终端机1断电时无需保存其内容。

    “非易失性”数据库,模块负载之间或者数据库驻留的终端机1断电时需要保存其内容。如果定义非易失性数据库的模块被更换,那么数据库在旧模块被卸载时消失。

    “编译数据库”是由记号编译器71按照照固定长度记录构建在初始化数据的邻接区中。从编译数据库可以添加或删除记录,在运行时间可以不对数据库进行初始化,否则将支持完全读写能力。

    对于编译数据库,下一可供使用的记录数字字段必须设定一加上数据库中最后分配的记录数。对于其他任何数据库,此字段被设为零。

    ·通过服务器把当前记录上的视窗地址(一记录缓冲器53)提供给每个客户数据库的客户。对于某些数据库操作,客户可把字符串和键缓冲器52的地址传送至服务器。对于由客户模块已经告知服务器的每一数据库,通过VM 20提供记录缓冲器53。这一缓冲器53从对准地址开始。与特定数据库有关的记录缓冲器53上下文在一条记录选择后保持可提供使用直至客户从该数据库选择另一条记录为止。除了这些记录缓冲器53、编译数据库和由特定数据库函数在数据堆栈27上传送的参数外,在客户与服务器之间不共享其他任何数据空间54。程序可以不假设数据库中的记录在内存中是邻接。

    ·由其中定义DPB的模块的载入过程具体说明数据库。当应用被终端常驻服务终止时,当涉及这些数据库的所有服务器分配的数据储存被释放时,由应用模块安装的易失性数据库不用由服务器具体说明并且对服务器是透明的。

    ·当限定非易失性数据库的模块被替换时,服务器删除它们。如果模块是当被替换时被载入的,例如在TRS模块的情况中,当模块被卸载时服务器必须删除模块的非易失性数据库。

    在模块载入时由VM 20采取的行动何时具体说明数据库取决于DPB 51中DP类型或DB指针的值以及数据库是易失性还是非易失性。如果数据库是非易失性型的,采用DPB地址并结合模块识别代码(模块ID)来识别属于数据库的任何现有数据。如果存在现有数据,下一个可利用的记录数恢复到其以前值。否则,服务器(VM 20)具体说明新的非易失性储存空间和将下一个可利用记录数设定为零。在二种情况中,为数据库中的当前记录提供一缓冲器53。如果DB指针为零和DP类型不为编译类型,那么服务器具体说明或可利用数据库所需的储存器可供利用,将储存器全部初始化为零,给数据库的“当前记录”提供一缓冲器53,以及将下一可利用记录数(DBAVAIL)设定为零。如果DB指针不为零和DP类型是编译类型,那么服务器建立内部结构,以利用在DB指针处已经传送原始地址的客户数据结构,以及将下一可利用记录数(DBAVAIL)设定为在DPB 51下一可利用记录数字段中传送的值上。服务器维持实际数据库记录55、数据库控制块56中地址位置与记录间的关系以及模块当前正在存取上下文信息块57中那个数据库的记录。

    现在将参照图6描述本发明的安全模块处理程序。在图6中示出了逻辑读/写存储器的区域。可由左侧模块(第一模块)存取的存储器区域有一条虚线。第一模块不能存取的存储器区域有一条实线的界线。可由一个以上模块存取的存储器区域以点划线示出。VM 20保护数据库DB1与DB2以及数据库储存库和模块储存库中的模块,以使它们不被任何模块存取。当第一模块被载入时,存储器42中的非初始化数据可由第一模块存取但是VM 20不允许此模块外的任何区域被模块直接存取。对寄存器、堆栈或帧存储器46的存取仅可通过相关记号进行。数据库只能经上述窗口程序存取。具体说,第一模块不可访问记号所在的它自己的程序存储器26,不访问任何其他模块。这对于保护存储器以防病毒是十分重要的。依照本发明,把存储器分配给限定和保护的第一模块。这是根据包含在模块中的被分配存储器量的指示由存储器分配限定的。它是受保护的,因为无其他模块可存取所分配空间,不给模块以外的任何程序提供其他载入机制。由于运行模块的较佳方法是单线程的,在其它任何模块变成有效前分配在可扩充缓冲器中的任何存储器可以解除分配。解除分配的存储器最好删除。

    第一模块的互斥输入表处于其第一模块不能直接存取的首部中。VM 20读取首部和调用输入表中所述的第二模块(第二模块的功能fgh)。VM 20载入第二模块和给非初始化数据42’,帧存储器46’和初始化数据41’分配内存。第一模块不能存取第二模块的任何部分,反之亦然。在第二模块的首部中,功能fgh已被置于能够输出功能的互斥表中。这可以使功能fgh供其他模块利用。VM 20搜寻第二模块代码存储器空间26’中的功能fgh,执行记号流与相应的直接插入数据(由字符串TITTITT表示)。在这个例子中,此段代码需要存取到数据库DB2。本发明的数据库由模块“拥有”,即数据库仅由模块存取,第一次载入模块时对其作了具体说明。从代码空间26’读出的数据库存取记号由VM 20执行,它在载入时分配第二模块的非初始化数据空间42’中缓冲器53’。功能fgh需要存取DB2的第三记录。然后,VM 20把所参考的记录传送到第二模块中的窗口53’,由此输出至第一模块的非初始化空间42。利用相同的数据库窗口过程,第一模块从其自有的数据库DB1也可得到一记录,将其传送至非初始化数据空间42中的缓冲器53.第一模块现在可以在两个程序的结果上操作。

    VM 20最好采用基本编码规则(Basic Encoding Rules)或标记、长度、值(对于本申请BER-TLV缩短为TLV)处理数据对象,正如ISO/IEC 8825(1990)中所述。TLV数据对象由二或三个连续字段组成:一个标记字段规定其分类、类型和号码,一个长度字段规定数据的大小,如果长度不为零,一个值字段包括数据。因为ICC响应在大小上通常限制于255字节或更小,依照本发明,TLV目标存在最大规模。标记字段最好为一或二字节,长度字段最好是一或二字节,因此值字段的最大规模最好是252字节(如此长的字段需要二个长度字节,如下所述)。标记字段的第一字节被分解为三个字段。位7与8规定目标的分类。位6确定值字段是否包括“原始”数据或它是否是由其它TLV编码字段组成的“结构”目标。结构目标也称为模板。在碰到它们时它们会引起其值字段对TLV序列作语法解析。位1至5规定目标的数目,或者如果设定所有这些位,它们指示附加标记字节跟随。如果还有另一字节跟随,附加标记字节设定其第八位。采用所有的位,最高达到二字节确定标记名。长度字段由一至三连续字节(通常为二个)组成。如果第一字节的位8是0,则位1至7指示值字段的大小。第一字节的位8是1,则位1至7指示随后的字节的数目。随后的字节(如果有的话)指示值字段的大小并且最高字节最先出现。值字段可由“原始”数据组成或与附加TLV代码序列一起“构建”。如果设定标记字段中的第一字节的位6,那么值字段包括附加TLV序列。可以采用几种不同格式对原始目标进行编码:前段为零或后段所有位设定为1的二十进制半字节、二进制数或字节序列,字母/数字的字符序列或ASCⅡ字节、或非限定格式。在采用每一种格式时可以对其进行不同处理。ICC 5还可使用数据对象表(DOL)来请求指定标记名称的值。卡5传送由标记和长度字段表组成的数据对象表,终端机1返回相应的值字段,无界定符号。

    采用的每个TLV必须由终端机或应用程序定义,以建立其数据类型和名称。由于终端机程序与应用程序是分别开发的,本发明的VM 20使用链接结构(平衡二进制树)允许从整体标记名称表快速添加或去除标记名称。这需要为限定TLV模块中初始化数据空间41中的每个TLV编译下列结构:

    “链接”,给树元素提供链路的具有“左”(高阶的二个字节)和“右”(低阶的二个字节)分量的单元。

    “链接左”,从这个TLV的存取参数到其标记在数值上小于这条记录标记的TLV记录存取参数的16位带符号位移。零值表示这个TLV与其标记在数值上小于这个的标记的TLV不链接。

    “链接右”从这个TLV的存取参数到其标记在数值上大于这条记录标记的TLV记录存取参数的16位带符号位移。零值表示这个TLV与其标记在数值上大于这个的标记的TLV不链接。

    “标记”,其大端(big-endian)数值为TLV标记的双字节字符串。

    “类型”,规定控制信息的单字节。

    “保留”,必须由编译器71初始化为零的字节。

    “数据”,保持VM特定信息(包括访问这个TLV的长度和值字段)的单元。该字段必须由编译器71初始化为零。系统还必须为每个TLV维持一状态字节。它可以是上述结构中的保留字节。如果已经给TLV分配一值,结果在已经采用记号TLVPARSE或TLVSTORE进行处理的序列中,将设定该字节的低阶位。维持所分配状态的目的是识别包含有效数据(它可能为零)的TLV值以及使它们区别于从未设定和因此是无效的TLV值。VM核心通过指针表维持到初始化数据空间41(包括如上所述的它们的实际定义)来管理TLV标记的整体表。当模块被载入时,其TLV定义被增加到该表中,作为其初始化的一部分;当模块被卸载时,由VM 20自动地从表中去除其TLV定义。如果模块包括已经存在的TLV定义,会抛出异常。上述“链接”字段的地址作为TLV参考的“存取参数”而返回。在VM 20已经具体说明TLV定义后,程序员不应直接存取这些字段,也不作任何有关其内容的假设。

    把对源代码中TLV定义的参考编译为对以上限定的定义结构的直接参考或者数值标记值。在某些二进制TLV定义中,规定各个位或一组位具有特定意义。它们被称为“TLV位”。可以把对TLV位的参考编译为指向TLV值字段中的位的一个文字。位0是第一字节最低位,位7是同一字节的最高位,位8是第二字节最低位,依此类推。

    通过由VM 20维持的252字节暂时存储区以数据库窗口的形式把分配给TLV定义的数据暴露给应用程序(见图7)。准许应用程序改变该暂时存储区的内容。如果改变被保留,暂时存储区中的地址和长度必须送回到TLVSTORE记号。当接着执行任何TLV记号时,暂时存储区中的地址和内容可能变成无效。

    作为插入读出器7中卡5的安全管理的一部分,需要对已知丢失或失效的卡5进行检查。把这种卡5的名单称为黑名单或热卡表。黑名单或热卡表的管理是由大热卡表管理特有的一组专用功能提供的。典型的名单表可包括10,000个主帐号(PAN)(每个帐号最多为10字节)或20位二十进制(BCD)数字。PAN项目以压缩数值(cn)格式存储,右边填充十六进制FH。由于PAN最多是十九位BCD数字,表中的项目总是要填充至少一个FH。当对热卡表进行搜寻时,表项目中的FH被认为是通配符或者“不介意”数字,但是,PAN中用作输入的任何FH不是通配符。通配符仅出现在项目的右侧。如果存在一个同项目中第一FH相同的表项目,可以认为在热卡表中将找到PAN。

    安全管理的另一部份是给加密和解码数据提供加密服务。可以采用任何合适的加密方法。具体地给VM 20提供三种加密算法:模数乘积和模数取幂(它们应用于RSA算法中)以及安全杂凑算法SHA-1,但是本发明不限于此。模数乘积对二个不带符号的值x与y进行乘积,这里利用模数z简化该乘积,公式是:

                  结果=mod(x*y,z)

    输入值(x,y,z)全都具有相同长度。它们由字节字符串表示,可以为任何8位的倍数,包括1024位。其值必须按“大端”字节次序。

    安全杂凑算法(SHA-1)算法被标准化为FIPS 180-1。SHA-1采用任意长度的输入消息和产生一个20字节的杂凑值。模数取幂将不带符号的值x自乘不带符号次方y,这里利用模数z简化该乘积,公式是:

          结果=mod(x^y,z)

    输入值x和模数z由字节字符串表示,可以为8位的任何倍数,包括1024位。其值必须按“大端”字节次序。

    服务,因此软件,甚至I/O装置可根据市场需求随时间改变。当需要作重要改变时,可以通过手动或经电信网路以遥控方式对终端机1中的软件进行更新。然而,对于与用户有关的服务,最好采用使少数或特定用户对由终端机1提供的服务进行更新的动态且安全的方法。根据本发明的“插头与插座”软件装置提供一种构成终端程序和应用的不同模块在线结构的柔性与安全方式。如图8所示,在本发明的交易系统中,可以定义许多程序(称为“插座”60),通过应用程序员(因为他处于获取者控制下和支付系统监督下,因此是安全)可以将它们插入到应用61,62中,在交易处理期间起增加辅助增强代码(称为“插头”66)的席位支架作用。被插入插座60中的所有辅助代码必须以VM 20的记号集的方式撰写。插座60最好置于现行终端机应用61,62中不同合适地点,甚至在终端机程序本身中。它们习常称为库函数,如果支付系统预知需要改变库函数操作方式,甚至会出现在库函数中。由VM 20将插座60初始化为缺省性态。如果终端程序不再采取进一步行动,当插座60被执行时,它们的缺省性态将是不作为(即无操作)。

    插头66包括可执行代码,以终端机1支持的记号书写,在由插座60限定的点处可以将其插入,以增强缺省终端逻辑。插头66可以已经存在于终端机1的插头库63中,从ICC 5调用,例如,ICC 5中的插座/插头标识符67和终端机1中的逻辑。插座/插头标识符67包括待插入插头与插座二者的参考,这里插头不在ICC 5上而是在库63中。插头66还可来自输入装置65(如ICC 5或接至终端机1的主机系统),但是只能得到支付系统的成员同意,例如发行人、获取者和零售批发商。

    在交易终结时,插座60恢复到其原始应用缺省性态。根据本发明,ICC 5最好不包括整个应用而仅包括插头66,由于它们需要较少存储器增强了现行终端机应用。

    插座60保持执行指针,也称为程序指针,允许建立一在执行时可以改变其性态的程序。插座60可以被看成(和被实施)为通过DOSOCKET记号存取的过程的阵列,它采用插座号码作为内联字节,或者通过IDOSOCKET记号存取的过程的阵列,它从数据堆栈27取得插座号码。

    插座60能够重建终端机程序或应用,以提供改型或增强型的交易处理流程。另一方面,ICC 5中的插座可以允许从终端机1对ICC 5升级。插座60提供了几个不同来源(获取者,发行者等)的软件模块与程序之间的接口。由于获取者和发行者具有契约关系,他们可以同意在终端机中使用由获取者程序提供的特定插座60,以致发行者可以延伸程序性态,例如提供忠实功能(空里、联票等)。

    模块可指定当插座60被载入以执行时插座60自动重构,或者客户程序可以采用程序化的方式在运行时把新程序分配给插座。只要安全条件准许,可以给应用中的插座60分配缺省性态,然后可以由下一模块用新程序重新插入插座,提供特定性态。为了避免不定情形,如果面向使用的特定插座60的所有程序不具有数据堆栈效应(下文中所述的插座为零除外),这是最佳的。这确保了程序连续性,不管执行面向哪个版本的程序。所有插座60的缺省动作在修改前至少是不操作的动作。

    作为上述CSS的一部分,获取者通过ICC 5上的代码可以允许交易加强。如果如此,他们可利用插座60来实施。文件库或可执行模块包括来自ICC 5的最近插头66的新插座60的定义。在这种情况下,模块应当定义插座60,然后使用SETSOCKET记号给它分配缺省性态(通常为零性态)。如果存取控制允许它,那么,ICC 5可以稍后下载插头66,包括定义新性态的记号,然后使用SETSOCKE记号把它储存到该同一插座60中,替换缺省性态。

    修正性态是方便的和灵活的,并会给恶意的人修改有利于他们的性态提供机会。如果他们可以修改插座的性态或者是在卡得到成功认证前置于程序流程中,那么对于来自ICC 5的插头66需要特别小心。为了安全起见,根据本发明,终端机软件能够指定插座控制程序,该程序控制是否能够修改各个插座60。因此,例如,从ICC 5下载的代码的执行可以由获取者严格控制,以致不可以从ICC 5插入插座直至在卡上已经执行所有验证程序为止,如电子签名。

    根据本发明,插座安全性包括指定将应用于下一试图插入插座60(SETPLUGCONTROL记号)的插座控制程序。不管现在可否修改插座60,对于给定插座号码,必须把程序PLUGCONTROL写入返回中。当在模块载入时接着对模块的插座表进行处理时,或者当以程序化方式插入插座60时,VM 20首先执行用户撰写的PLUGCONTROL程序,以确定是否真的能够插入插座60,如果不能的话,保持插座60的现行性态。

    在载入另一模块以供执行前希望限定对任何插座60存取的模块可以用所选PLUGCONTROL功能作为一参数,在载入该模块前可执行由插入插座(插座零)上SETPLUGCONTROL记号定义的程序。当载入以供其执行的下一模块和其它任何模块使其插座表被处理时,被用户限定的PLUGCONTROL程序拒绝存取的插座60将保持其现行性态。这种情况不认为是差错。在执行进一步代码前希望限定对任何插座60存取的代码可以用所选PLUGCONTROL程序作为参数,在程序流程中的适当点处执行由SETPLUGCONTROL记号定义程序。对插头60的可编程请求能够确定该请求是否被对SETSOCKET的调用所接受或拒绝。或是通过模块载入过程或是通过程序化命令动态地修改其性态的任何插座60被恢复到其载入最新可执行模块以供执行时的性态,作为封装在模块执行记号(EXECUTEMDULE)定义的程序中的终止程序的一部分。

    作为获取者特定功能的一个例子,假定基本交易代码包括短语27 SOCKETLOYALTY,它定义LOYALTY并提供以后执行。获取者的交易程序代码进一步定义代码,只有在发行者与获取者相同以及交易量超过某一最低量时该代码为该插座设定准许标志。在交易期间有一条从ICC 5中以任意代码读出的命令。ICC代码的一部分能够定义REWARD程序,对用户飞行英里进行更新,然后试图执行短语PLUG REWARD INTO LOYALTY。这个短语将REWARD的执行与LOYALTY的执行相连接。如果LOYALTY插座准许标志是根据上述逻辑设定的,那么将发生SETSOCKET;否则,LOYALTY将保持其缺省性态,如不操作。然后,当应用代码稍后执行其LOYALTY功能时,仅跟据获取者定义的规则将允许ICC定义的REWARD。

    通常,运行于终端机1上的VM 20具有有限个数的插座60,例如64个插座,编号0至63。采用其最基本的形式,框架终端程序几乎完全由插座60以及从插座到插座的基本程序流组成。然后,利用交易处理程序,由在应用选择时间或是从终端机1或是从ICC 5载入的其他模块插入插座60。在应用选择前在框架程序中出现的插座60由TRS分配缺省空性态。如果给定插座60是由一个以上模块利用程序插入的,那么,最后操作会简单地代替较早的任何操作。

    模块的载入、处理与执行

    为在VM 20(包括按记号模块编译的终端常驻服务)上运行而撰写的代码可以假设:通电后,支持VM 20的特定终端机核心软件已经进行任何必要的特定终端机通电的初始化,通过下文中将描述的模块载入过程已经开始执行终端常驻服务(TRS)的主要处理回路。如果退出TRS的主要处理回路,控制返回到软件的特定终端机层,负责重新载入TRS和重新进入其主要回路。每当退出TRS时便释放所有VM资源,但非易失性数据库中的数据例外。资源的释放是在终端机断电时、TRS退出时或TRS被终端机的操作系统(如果有)重新启动时发生。由于TRS主要回路是最新进入的,如果已经获得TRS模块的更新版本,那么,在TRS退出时将释放所有TRS资源,包括其非易失性数据库中的数据。

    在终端机1或ICC 5上运行的软件是由VM 20以一种或多种模块的形式管理的,这里每个模块可包括下列任何种类的信息:

    ·记号化代码

    ·初始化数据

    ·非初始化数据分配

    ·数据库定义

    ·TLV定义

    ·插座表

    ·模块的相互依赖关系

    每一模块最好以模块传递格式(MDF)传送至终端机1。VM 20维护已经被传递并安装在终端机1上的模块的读/写非易失性存储器18中的非易失性储存库。储存库中的每个模块将由模块标识符或模块ID来识别。在模块储存库中登记后,模块信息通过由VM 20维护的非易失性模块数据库提供使用并被储存在非易失性存储器18中。根据本发明,VM 20保护储存库中的模块免于被其它任何模块修改,因为没有任何记号可作这样的访问。再者,当存在具有相同模块标识符的模块可供执行时VM 20可以提供给定模块的新版本被置于储存库中。

    在模块处理中在概念上存在二个阶段:首先,将模块“载入”,意思是指可以对其进行存取及对其数据、数据库等,可具体说明,其次,如果模块是可执行模块,那么VM 20从其入口点开始对其记号进行处理。参考图9所示的流程图将描述执行程序。

    首先,在步骤100中,对资源进行标示和保存。在模块执行前,VM 20标示出其状态和保存所需的任何资源,以致以后可以恢复这一状态。状态包括:

    ·可扩充存储器指针、帧指针和帧尾指针的的位置。

    ·整个当前插座表的内容。

    ·TLV标记名称表中登记的TLV。

    ·为了管理模块的启动和执行VM执行需要的其他内部数据。

    在步骤102中载入下一个模块。把执行模块的模块ID传送至“载入模块”子程序,下文将对其进行说明。如果模块载入没有步骤104中确定的差错,它可以执行,程序行进至步骤108。如果在步骤104中确定有差错,放弃模块的执行,在步骤105中释放模块执行所需的全部资源。这需要VM 20进行下列动作:

    必须释放载入模块所需的所有易失性存储器和需要被载入的任何模块并清零。这包括(但是不限于此):

    ·所有模块的初始化和非初始化数据所需的空间。

    任何内部TLV缓冲器所需的空间和这些模块定义的管理数据结构。

    ·任何内部缓冲器所需的空间和由这些模块定义的数据库所需的管理数据结构。

    ·为了标记查看,由VM维护的TLV名称表必须在模块执行前立即恢复其状态。

    ·由VM维护的插座表的内容必须在模块执行前立刻恢复其状态。

    ·帧指针、帧尾指针和可扩充存储器指针的内容在模块执行前立刻恢复其值。

    在模块成功载入后,在步骤106中确定模块是可执行模块还是文件库模块。如果是后者,不发生模块的执行,象在步骤105中所述的一样,在步骤110中VM20释放所有资源。如果模块是可执行的,确定指定模块的入口点的字段。

    VM 20通过调用被入口点字段中指定的记号启动模块。然后,在步骤108中又执行每个记号。在步骤110释放所有资源后,利用“返回(RETURN)”记号模块终止执行。

    参考图10中所示的流程图将描述载入模块所需的过程,即“载入模块”子程序。如果在模块载入期间检测到差错,这导致“载入模块”子程序立刻返回到“假”。一般差错是指诸如“超出存储器”的差错,这里,当发现重复TLV标记时,没有足够资源给初始化数据、非初始化数据,数据库或TLV提供空间。初始化数据必须在对数据库进行前建立,如此的TLV片段是初始化数据片段的一部分。在步骤120中,确定模块是否已经载入存储器中。如果是已经载入,那么不再第二次载入,“载入模块”即刻成功,返回“真”。接着,在步骤122中,确定模块是否在储存库中。如果不是,可以不被载入,所以“载入模块”子程序失败,返回“假”。在步骤124中,确定模块的非初始化数据区41需要多少数据字节并保留所需量。由VM 20将该区域41全部设定为零。同样,在步骤126中,保留模块初始化数据区42的数据字节的所需量。然后,把初始化数据复制到该区域中。在步骤18中,由VM 20把待载入模块中限定的TLV增加到TLV查看所使用的内部名称表中。TLV数据结构的根目录是被储存。接着,在步骤130中,由VM 20具体说明待载入模块中限定的数据库。步骤128和130可以按任何次序执行。在步骤132中,选择当前模块的已输入模块。在步骤134中,通过已输入模块的表,再循环地载入每个模块。如果由于任何原因不能载入已输入模块,正如在步骤136中确定的,输入的模块被视为载入已经失败,因为它不能访问输入模块的服务。在这种情况下,“载入模块”返回“假”。在步骤138中,确定是否有另外的模块输入。如果是,程序返回至步骤132。在步骤138确定后,最新输入的模块已经被递归地载入,当前模块已经无差错地分配、载入和具体说明了其资源,所以,在步骤139中“载入模块”插入其表中的插座60中,然后返回“真”,表示模块被成功地载入。VM 20必须忽略任何试图插入插座零。如果必须插入插座零,那么这可以利用SETSOCKET记号来实现。

    参考图11将说明在步骤140中插入插座60的程序。在步骤140中,具体说明载入模块中每个插座的缺省特性。在步骤141中,确定是否有插头。如果没有,那么在步骤149中执行模块。如果有,在步骤142中选择第一插头。在步骤143中,确定是否设定相关插座的安全标志。如果没有,在步骤146中插入插座。如果有,执行该插座所规定的安全功能。如果安全评价是肯定的,在步骤146中插入插座。在步骤148中,确定插头是否为最后插头。如果不是,选择下一个插头作评价。如果安全检查是否定的,在步骤147中确定插头是否为最后插头。如果在步骤147或步骤148中确定插头是最后插头,对于还未插入的所有插座以缺省特性执行模块,对于已经插入的插座以插入特性执行模块。通过这种方式已经实现特性的安全改进。

    对于由LOADCARDMODULE记号从ICC 5载入的模块的处理必须不同于对于利用EXECUTEMODULE记号从终端机1中储存库载入的模块的处理。图12示出LOADCARDMODULE的流程图。在卡模块执行前,在步骤150中VM 20标示其状态和保存所需的任何资源,以致该状态以后能够被恢复。状态包括:

    ·可扩充存储器指针、帧指针和帧尾指针的位置。

    ·整个当前插座表的内容。

    ·登记在TLV标记名称表中的TLV。

    VM执行需要的以管理卡模块启动的其他内部数据。

    模块是在步骤152中利用参考图9说明的“载入模块”子程序载入的;不同之处在于模块是在ICC 5上,而不是在储存库中,不是已经被载入。

    如果在步骤154中确定模块没有成功载入,那么所有资源在步骤155中被返回到他们在执行LOADCARDMODULE记号前的状态。这需要:

    载入模块所需的所有易失性存储器,必须释放需要载入的任何模块并清零。这将包括(但是不限于此):

    ·所有模块的初始化和非初始化数据所需的空间。

    ·任何内部TLV缓冲器所需的空间和由这些模块限定的管理数据结构。

    ·任何内部缓冲器所需的空间和由这些模块限定数据库所需的管理数据结构。

    ·由VM维护的用以标记查看的TLV名称表必须立即恢复至模块执行前的状态。

    ·由VM维护的插座表的内容必须立刻恢复至模块执行前的状态。

    ·帧指针、帧尾指针和可扩充存储器指针的内容立刻被恢复至模块执行前它们的值。

    如果卡模块被成功地载入,在“标示和保存资源”的步骤150中所保存的状态在步骤156中被简单地放弃。因此,卡模块已经被移植到运行系统上。为了成为用的,卡模块必须插入插座,否则无法执行卡模块中出现的任何代码。接下来,在步骤158中确定模块是否为可执行模块,如果是,按照图9中步骤106至步骤108所述执行。

    上述的本发明的特定实施例仅仅试图进行说明,根据本发明的原理可以作出许多其它改进和变化。所有这些实施例及其改进和变化被认为是在以下权利要求书中所限定的本发明范围内。

    附录

    1.记号定义

    1.1概述

    EPI代码记号是具有附加帧指针的两个堆栈虚拟机器的指令集合。记号还可以处理为一种编译器的中间语言。程序翻译器的某些实施实际上可以把EPI代码记号编译为机器代码。

    EPI代码记号为字节记号,最多准许有256记号。单字节前缀记号容许把记号的范围扩充到理论最大值,最多为65536个记号,前缀认为是每256记号的限定页。事实上,限定了有限范围的前缀记号。在十六进制中每个记号的值表示为2个数字的十六进制代码,带有其相应的名称。

    没有前缀的记号(单字节记号)被称为原始记号,而带有前缀的记号(二字节记号)被称为二次记号。

    下表中未定义的任何原始记号或二次记号的执行将导致ILLOP异常。

    1.1.1 EPI代码记号的Forth功能

    本节给出用作EPI代码记号的Forth字的字母索引表。从左至右的每一行包括:

    ·定义名称,用大写,单一空格粗体字母;

    ·如果不是英文的自然语言发音;

    ·可应用的特定指示符:

    A ANS Forth字(包括所有任选字集)

    C编译器指令;在定义中必须使用的。

    G通用Forth字(常用的,例如Forth关注群,然而不在ANS Forth中)。

    H主(编译器)字,它可以或不可以给目标贡献记号。

    ·等效的EPI代码记号 字发音代码EPI代码记号 -减A SUB !储存A STORE #数字符号A NMBR #>数字符号大于A NMBRGT    #S    数字符号S    A    NMBRS    *    星号    A    MUL    /    斜线    A    DIV    :    冒号    A,H    PROC    ;    分号    A,C,H    ENDPROC    ?DO    问号do    A,C,H    RQDO<+addr>    ?DUP    问号dupe    A    QDUP    ?THROW    G    QTHROW    @    取出    A    FETCH    [‘]    方括号-撇    A,C,H    LITC<+addr>    [CHAR]    方括号-字符    A,C,H    PLIT<n>    +    加    A    ADD    +!    加-储存    A    INCR    +LOOP    加-回路    A,C    RPLUSLOOP<+addr>    <    小于    A    CMPLT    <#    小于-数字-符号    A    LTNMBR    <>    不等于    A    CMPNE    =    等于    A    CMPEQ    >    大于    A    CMPGT    >BODY    至-文体    A,H    WLIT<+addr>    >NUMBER    至-数字    A    TONUMBER    >R    至-r    A,C    TOR    0<    零-小于    A    SETLT    0<>    零-不等于    A    SETNE    0=    零-等于    A    SETEQ    0>    零-大于    A    SETGT    1-    1-减    A    SSUBLIT 1    1+    1-加    A    SADDLIT 1    2!    2-储存    A    VSTORE    2*    2-星号    A    SHL    2/    2-斜线    A    SHR    2@    2-取出    A    VFETCH    2>R    2-至-r    A,C    TWOTOR    2DROP    2-降落    A    TWODROP    2DUP    2-复制    A    TWODUP    2OVER    2-超过    A    TWOOVER    2R@    2-r-取出    A,C    TWORFETCH    2R>    2-r-自    A,C    TWORFROM    2ROT    2-常规    A    TWOROT    2SWAP    2-交换    A    TWOSWAP    2VARIABLE    2-变量    A,H    LITU<+addr>    ABS    abs    A    ABS    AGAIN    A,C,H    BRA<+addr>    AND    A    AND    BASE    A    USERVAR 1    BUFFER:    缓冲器-冒号    G,H    LITU<+addr>    C!    c-储存    A    BSTORE    C@    c-取出    A    BFETCHU    C+!    c-加-储存    G    BINCR    CATCH    A    CATCH    CELL    G    FOUR    CELL+    单元-加    A    SADDLIT 4    CELLS    A    SMULLIT 4    CHAR    字符    A    PLIT<n>    CHAR+    字符-加    A    SADDLIT 1    CHARS    字符    A    NOOP    COMPARE    A    BCMP    CONSTANT    A,H    LIT<X>    D+    d-加    A    VADD    DEPTH    A    DEPTH    DNEGATE    d-负    A    VNEGATE    DO    A,C,H    RDO    DROP    A    DROP    DUP    A    DUP    ELSE    A,C,H    BRA<+addr>    ENDCASE    结束-情况    A,C,H    DROP    ENDOF    结束    A,C,H    BRA<+addr>    EXECUTE    A    ICALL    EXIT    A,C    RETURN    FILL    A    BFILL    GET_MSECS    G    GETMS    HOLD    A    HOLD    I    A,C    RI    IF    A,C,H    BZ<+addr>    INVERT    A    INVERT    J    A,C    RJ    LEAVE    A,C    RLEAVE<+addr>    LITERAL    A,C,H    LIT<n>    LOCALS    局部-线条    A,C,H    <method><addr>    LOOP    A,C,H    RLOOP<+addr>    LSHIFT    l-移动    A    SHLN    M*    m-星号    A    MMUL    M/MOD    m-斜线-模数    G    MSLMOD    MAX    A    MAX    MIN    A    MIN    MOD    A    MOD    MOVE    A    BMOVE    MS    A    MS    NEGATE    A    NEGATE    NIP    A    NIP    NOT    SETEQ    OF    A,C,H    ROF<+addr>    OR    A    OR    OVER    A    OVER    PICK    A    PICK    PLUG    H    LITC<+addr>    RECURSE    A,H    CALL    REPEAT    A,C,H    BRA<+addr>    -ROT    减-常规    G    ROTB    R@    r-取出    A,C    RFETCH    R>    r-从    A,C    RFROM    ROT    A    ROT    RSHIFT    r-移动    A    SHRNU    SIGN    A    SIGN    SOCKET    H    DOSOCKET<+addr>    SWAP    A    SWAP    THROW    A    THROW    TIME&DATE    时间和日期    A    GETTIME    -TRAILING    减-尾    A    MINUSTRAILING    TUCK    A    TUCK    U<    u-小于    A    CMPLTU    U<=    u-小于-或-等于    G    CMPLEU    U>    u-大于    A    CMPGTU    U>=    u-大于-或-等于    G    CMPGEU    UM*    u-m-星号    A    MMULU    UM/MOD    u-m-斜线-模数    A    MSIMODU    UMOD    u-模数    G    MODU    UNTIL    A,C,H    BZ<+addr>    USER    G    USERVAR<n>    VALUE    A,H    LITD<+addr>    <method>    VARIABLE    A,H    LITU<n>    WHILE    A,C,H    BZ<+addr>    WITHIN    A    WITHIN    XOR    A    XOR

    1.2约定

    1.2.1数字格式

    大于一个字节的数字在记号程序中以“大端”二进制补码格式发送,最高字节首先。在EPI代码程序中,数字总是应当被正确格式的操作符存取,以容许程序以最适合于所用结构的形式储存数字。

    在堆栈上维持多个精确数据类型,最高位的单元在最上面。在存储器中,维持这些数据类型,在多单元类型中最高位的单元位于最低地址的单元上。

    1.2.2控制结构偏移

    控制结构是由控制记号(BRA、RLOOP等),接着由带符号的四字节、二字节或单字节偏移形成的。已经取出偏移后,把跟在控制记号后的偏移增加到记号指针(TP)上。因此,如果分支记号在addr,目的地址是addr+2+offset(对于1字节偏移(SBRA)),addr+3+offset(对于2字节偏移(BRA))和addr+5+offset(对于4字节偏移(EBRA))。

    取四字节偏移的记号仅可供支持32位线性地址代码空间的虚拟机器实施的特定终端机代码使用。

    1.2.3地址

    用户定义的程序是由EPI代码程序中其地址限定的。如果对记号进行翻译或者为大型处理器编译是本机码,那么,记号空间地址将不对应于代码的实际地址。

    1.3数据类型

    大部分记号对数量操作,由记号确定的数据大小以及带符号或不带符号解释,但是,在帧存储中访问存储器的指令能够得到前缀记号确定的数据类型替换。表1中所示的一组字节代码是为这样的前缀记号保留的,但是,当前仅采用SBYTE和UBYTE。

    利用字节算符或者带有增量前缀的算符从存储器中取出需要小于一个单元(1字节)的数据类型。如果隐含或指定带符号的数据类型,那么,数据可以用符号扩展到单元宽度。如果隐含或指定不带符号的数据类型,那么,数据为零扩展的。                                           表1数据类型前缀    前缀    缩写    说明    大小    SBYTE    SB    带符号字节    1字节    UBYTE    UB    不带符号字节    1字节    SLONG    SL    带符号长    4字节    ULONG    UL    不带符号长    4字节    SVLONG    SV    带符号超长    8字节    UVLONG    UV    不带符号超长    8字节

    1.4算术

    溢出返回结果所指定的大小的加法和减法操作将返回结果模数〔在该大小中可容纳的最大不带符号值〕+1。

    其目的储存器小于传送值大小的储存操作将把值截短到目的存储宽度后存储。

    除法操作是对称;即不管符号,舍入总是朝着零。

    1.5原始记号

    为了方便起见,将记号分为几个逻辑组,下面将在不同章节中示出。所有记号的值是十六进制。

    利用表1中给出的缩写明显地列出可应用于记号的数据类型前缀,其前缀加上不在前缀表中的任何原始记号是无效的,这种记号的执行将引起ILLOP异常的被抛出。记号的缺省类型是斜体字,总是首先列出。缺省数据类型前缀是冗余字符,如上所述,如果被用于对记号加前缀是无效的。

    1.5.1操作集

    00 NOOP

       (-)

        不采取动作

    04 BFETCHS

       (addr-num)

        从给定地址中取出8位字节,符号延伸它。

    08 LIT

       (-X)

        返回跟在直接插入(in-line)后作为数据的单元。

    09 LITC

       (-addr)

        返回跟在直接插入后作为文字的单元,文字是代码图象中的地址。文字的值可以由程序载入器重新置于该代码图象中。

    0A LITD

       (-addr)

         返回跟在直接插入后作为文字的单元,文字是初始化数据空间中的地址。文字的值可以由程序载入器重新置于代码图象中。

    0B LITU

       (-addr)

        返回跟在直接插入后作为文字的单元,文字是非初始化数据空间中的地址。文字的值可以由程序载入器重新置于代码图象中。

    0C PLIT

       (-u)

        返回跟在直接插入后的字节。字节被加零扩展至32位。

    0D NLIT

       (-num)

        返回跟在直接插入后的字节,被加零扩展至32位,然后取负。

    0E HLIT

       (-M)

        返回跟在直接插入后的2字节值。值被零扩展至32位。

    10 HLITC

       (-addr)

        返回把跟在直接插入后的不带符号2字节值加到代码图象的基址上而产生的地址。值被零扩展至32位。

    11 SLITD

       (-a-addr)

    返回把跟在直接插入后的被解释为单元中正偏移的地址不带符号的字节加到初始化数据的基地址上而产生的地址。字节被零扩展至32位并乘上4得到字节的偏移。

    12 HLITD

       (-addr)

        返回把跟在直接插入后的2字节值加到初始化数据的基地址上而产生的地址。值被符号扩展至32位。

    13 SLITU

       (-addr)

    返回把跟在直接插入后的被解释为单元中正偏移的地址的不带符号2字节值加到非初始化数据的基地址上而产生的地址。字节被零扩展至32位并乘上4得到字节的偏移。

    14      HLITU

        (-addr)

    返回把跟在直接插入后的2字节值,加到非初始化数据的基地址而产生的地址。值被符号扩展至32位。

    15 ADDLIT

       (x1-x2)

    把跟在直接插入后的单元中的数据加到x1,得到x2。

    16 SADDLIT

       (x1-x2)

    把来自带符号的1字节直接插入值加到x1,得到x2。

    19 SUBLIT

       (x1-x2)

    从x1中减去跟在直接插入后的单元中的数据,得到x2。

    1A SSUBLIT

      (x1-x2-t)

    从x1中减去带符号的1字节直接插入值,得到x2。

    1C VSUBLIT

       (d-d-lit)

    从双数字d中减去带符号的8字节直接插入值。

    1D SMULLIT

       (num-num*lit)

    num乘以直接插入后的带符号的1字节文字。

    1E SDIVLIT

       (num-num/lit)

    num除以直接插入后的带符号的1字节文字。

    21 DIVU

       (u1u-u3)

    u1除以u2(不带符号),得到u3。

    3A SHRU

       (u-u>>1)

    u向右逻辑位移一位,插入一零位。N.B.SETxx算符进行与零的比较,根据比较结果设定标志。42 SETGE   (num-flag)如果num≥0(带符号)返回“真”45 SETLE (num-flag)如果num≤0(带符号),返回“真”48 CMPGEU   (u1u2-flag)比较不带符号值u1与u2,如果u1≥u2,返回“真”4C CMPGE   (num1 num2-flag)比较带符号值num1与num2,如果num1≥num2,返回“真”4F CMPLE   (num1 num2-flag)比较带符号值num1与num2,如果num1≤num2,返回“真”下列记号提供对帧储存的存取50…53 PFRFETCH2…PFRFETCH5

    (-num)短格式等效于SFRFETCH n(q.v.),这里n是2…5。可能的数据类型替换值包括:SL,SB,UB。54…5F TFRFETCH12…TFRFETCH1

    (-num)短格式等效于SFRFETCH n(q.v.),这里n是-12,…,-1。可能的数据类型替换值包括:SL,SB,UB。60…63 PFRSTORE2…PFBSTORE5

    (num-)短格式等效于SFRSTORE n(q.v.),这里n是2…5。可能的数据类型替换值包括:SL,SB。64…6F TFRSTORF12…TFRSTORE1

        (num-)

    短格式等效于SFRSTORE n(q.v.),这里n是-12,…,-1。

    可能的数据类型替换值包括:SL,SB。

    70 SFRFETCH

       (-num)

    从帧指针在带符号的直接插入1字节偏移处取出值(缺省为单元)num。偏移被解释为缺省数据类型的单元指数(即将其乘以4得字节寻址偏移),和字节大小数据替换值的字节指数。注意:SFRFETCH 0与SFRFETCH 1将内部帧管理数据(没有任何意义)返回到调用程序,这么做并不构成对帧中的有效参考。因此,参数在SFRFETCH2开始和临时变量在SFRFETCH-1开始,因为存储器中的帧堆栈向下增长。可能的数据类型替换值包括:SL,SB,UB。

    71 SFRSTORE

       (num-)

    从帧指针在带符号的直接插入1字节偏移处储存自变量中的值(由缺省,单元)num。偏移作为直接插入值提供,该值被处理为缺省数据类型的单元指数(即将其乘以4得字节寻址偏移),和作为字节大小数据替换值的字节指数。更详细的细节见SFRFETCH。

    可能的数据类型替换值包括:SL,SB。

    72 FRFETCH

       (-num)

    从帧指针的带符号偏移处取出值rum。偏移是通过2字节直接插入值提供的。更详细的细节见SFRFETCH。

    可能的数据类型替换值包括:SL,SB,UB。

    73 FRSTORE

       (num-)

    从帧指针的带符号偏移处储存自变量中的值num。偏移是通过2字节直接插入值提供的。详细情况见SFRSTORE。

    可能的数据类型替换值包括:SL,SB。

    74 SFRADDR

       (-addr)

    从帧指针的带符号偏移处返回到帧中地址。偏移是通过1字节直接插入值提供的,将其乘以4得到缺省数据类型的字节偏移,直接被用作字节大小数据替换值的字节指数。

    可能的数据类型替换值包括:SL,SB。

    75 FRADDR

       (-addr)

    从帧指针的带符号单元偏移处返回到帧中地址。偏移是通过2字节直接插入值提供的,将其乘以4得到缺省数据类型的字节偏移,直接被用作字节大小数据替换值的字节指数。

    对于给Forth标准数字转换功能提供支持的记号,记号名称中的NMBR发音为“数字”。记号LTNMBR、NMBRS和TONUMBER采用用户变量BASE作为转换的数字基。

    8C UNDER

       (x1x2-x1x1x2)

    在堆栈上复制第二项。

    9C ZERO

       (-O)

    在堆栈上留下值0。

    9D ONE

       (-1)

    在堆栈上留下值1。

    9E MINUSONE

       (-1)

    在堆栈上留下值-1。

    A0 INDEX

       (addr1 num-addr2)

    将num乘以4并加上addr1,得到addr2。

    A2 EDOCREATE

       (-a-addr)

    返回到数据空间中的地址,其偏移在这一记号后立即跟在直接插入单元中,进行子程序返回。通过调用对应于它的过程,这一记号被用于识别数据区,准许创建与位置无关的数据表格。

    A3 EDOCLASS

       (-a-addr)

    分支到代码空间地址,其偏移被保持在随后直接插入的单元中,在压入到数据堆栈上后,通过把随后直接插入下一单元中的不带符号偏移(即在代码偏移后)增加到初始化数据空间的基地址上而产生的地址。该记号被用于识别程序存储器中的数据结构和对其处理的子程序的转换控制,提供了简单分级机制的基础。

    A4 DOCREATE

       (-a-addr)

    返回到数据空间中的地址,其偏移在这一记号后立即跟在直接插入2字节值中,进行子程序返回。通过调用对应于它的程序,这一记号被用于识别数据区,准许创建与位置无关的数据表格。

    A5 DOCLASS

       (-a-addr)

    分支到代码空间地址,其偏移被保持在随后直接插入的单元中,在压入到数据堆栈上后,通过把随后直接插入下一2字节中的不带符号偏移(即在代码偏移后)增加到初始化数据空间的基地址上而产生的地址。该记号被用于识别程序存储器中的数据结构和对其处理的子程序的转换控制,提供了简单分级机制的基础。

    A6 ECALL

       (-)

    在直接插入单元前,利用该单元作为进入代码空间中的带符号字节偏移,调用该过程。

    A7 SCALL

       (-)

    在直接插入1字节前,利用该字节作为进入代码空间中的带符号字节偏移,调用该过程。

    A8 CALL

       (-)

    在直接插入2字节偏移前,利用该值作为进入代码空间中的带符号字节偏移,调用该过程。

    AB SMAKEFRAME

        (xparams…x1-)

    在二个不带符号的1字节文字前,首先包括params,形成过程参数的单元数,其次包括temps,临时变量的单元数。分配params+temps+2单元,然后将当前帧指针设定为指向新的帧。该记号允许过程参数和临时变量由FRFETCH和FRSTORE访问。

    准许虚拟机器在返回堆栈上建造帧,所以,帧的使用受到通常应用于返回堆栈用途的规则限制。由SMAKEFRAME把过程参数从数据堆栈转移到帧中,以使它们可以由FRFETCH与FRSTORE访问。

    如果不能建造所需大小的帧,将抛弃FRAME_STACK_ERROR。

    AC MAKEFRAME

    (xparams…x1…)

    在二个不带符号2字节文字前,首先包括params,形成过程参数的单元数,其次包括temps,临时变量的单元数。更详细的情况见SMAKEFRAME。

    AD RELFRAME

       (-)

    使帧指针恢复到其以前值并释放当前帧。

    1.5.2分支集

    这些记号包括常用堆栈机器分支算符,加Forth字DO?DO LOOP+LOOPLEAVE I和J的运行时间。

    AF EBRA

       (-)

    总分支。四字节直接插入偏移。

    B0 EBZ

       (num-)

    如果num=0则分支。四字节直接插入偏移。

    B1 EBNZ

       (num-)

    如果num≠0则分支。四字节直接插入偏移。

    B2 SBRA

       (-)

    短分支。带符号位直接插入偏移。

    B3 SBZ

       (num-)

    如果num=0则短分支。带符号字节直接插入的偏移。

    B4 SBNZ

       (num-)

    S  如果num≠0则短分支。带符号字节直接插入偏移。

    B5 BRA

       (-)

    无条件分支。带符号2字节直接插入偏移。

    B7 BNZ

       (num-)

    如果num≠0则分支。带符号2字节直接插入的偏移。

    1.5.3数据类型和代码页替换值

    该组允许突破8位记号的限制。注意:它们的堆栈动作依赖于以下的记号。把成对的记号称为二次记号。

    数据类型的扩展记号占据记号C0至CF。在这一范围中不使用的记号被保留,以供未来在需要附加数据类型前缀时使用。

    C1 SBYTE

       (-)

    带符号字节。

    C2 UBYTE

       (-)

    不带符号字节。

    C5 SLONG

       (-)

    带符号长格式,32位。

    C6 ULONG

        (-)

    不带符号长格式,32位。

    1.5.4插座处理记号

    D2 DOSOCKET

        (-)

    在直接插入字节(0…63)前,它指定所需的功能数字。堆栈功能是由附着到插座上的函数限定的。

    D3 IDOSOCKET

        (u-)

    执行由u指定其插座号码(0…63)的插座函数。较低层的堆栈功能是由附着到插座上的函数限定的。如果u是大于63,将会抛出ANS Forth异常24(无效数值自变量)。

    1.5.5控制集

    E6 IMCALL

        (-)

    从模块执行功能,其模块号码(0-255)在直接插入的下一字节中给出,其功能号码(0-255)在随后直接插入的字节中给出。堆栈功能视被调用函数而定。

    E7 CLASSPROC

        (-)

    在载入期间,CLASSPROC标示出至等级处理代码的入口。用于编译辅助并可作为NOOP实施。

    F9 SYSFUNC

         (-)

    页扩展记号被处理为二次记号的第一字节。调用由随后直接插入字节指定的程序。支持的二次记号集定义于第1.7节中。堆栈作用由指定例程限定。

    1.6插座

    前8个二次插座记号保留给插座管理功能,下面将描述所定义的管理功能。其余插座(D2 08至D2 3F)供应用使用。

    F9 91 SETSOCKET

        (xpu-flag)

    设定执行指针xp至插座功能u的句柄,这将引起xp通过DOSOCKET〈u〉的后续执行而执行。在设定执行指针前,运行由SETPLUGCONTROL安装的程序以确定是否可以用该新xp插入插座。“标志”是由该程序返回的值。如果“标志”是“假”SETSOCKET将仅设定指针,否则就放弃指针。如果u是大于63,将会抛出异常-24(无效数值自变量)。

    D2 00 SETPLUGCONTROL

          (xp-)

    储存用户所写过程的执行指针xp,该过程将由SETSOCKET运行以确定是否能够插头插座。

    该过程的动作(这里为说明目的将其称为PLUGCONTROL)必须为:

         (u-flag)

    这里u是插座号码,如果能够插入插座“标志”返回“假”,如果不能插入则返回“真”。此外,u值超出0-63范围以外,PLUGCONTROL过程必然引发异常-24(无效数值自变量)。

    PLUGCONTROL的缺省动作是由VM安装,对于所有u值返回“假”,从而能够插入所有插座。

    D2 03 OSCALLBACK

          (dev fn num1num2-ior)

    调用带有参数的操作系统程序:对于具有包含在阵列num2中的num132位参数的功能fn,dev选择所需的I/O装置,返回ior,它与设备相关。注意:num2在堆栈顶部。在C使用中,num1与num2分别对应于arvc与argv。

    注意:该插座与设备相关,提供它以致于利用EPI代码所写的终端机特定程序(TRS)能够具有与终端机相关的输入/输出。如果被指定的功能不被支持,则抛出异常-21(不被支持的操作)。

    D2 04 EPICALLBACK

          (dev fn num1num2-ior)

    EPI代码程序的插座,它可以被下层操作系统调用。四个参数是作如下用途的32位值:对于具有包含在阵列num2中的num132位参数的功能fn,dev选择所需的I/O装置,返回ior,其意思是与装备相关。在C使用中,num1与num2分别对应于arvc与argv。

    注意该插座与设备相关,提供它以致于利用EPI代码所写的终端机特定程序(TRS)能够为操作系统提供回调程序。如果指定的功能不被支持,则抛出异常-21(不被支持的操作)。

    1.7系统功能输入/输出集

    该集定义通过SYSFUNC记号可提供使用的功能,它该记号的动作是给下层操作系统程序提供广义接口。

    1.7.1装置存取

    每个装置分配一个唯一设备号码。状态ior代码与装置有关,ior代码总是为0,表示成功的例外。

    F900 DKEY

         (dev-echar)

    从输入装置dev读出字符。

    F901 DKEYTEST

         (dev-flag)

    如果字符准备从输入装置dev读出,返回“真”。

    F902 DEMIT

         (char dev)

    把char发送到输出装置dev。

    F903 BEEP

         (u dev-)

    请求输出装置dev产生声音并持续u毫秒。该功能可暂停处理一段指定时间。

    F904 DREAD

         (addrlen dev-ior)

    从输入装置dev读出字符串,返回到与装置相关的ior。返回的该字符串仅包括从键盘装置读出的字符的较低阶字节。

    F905 DWRITE

         (addr len dev-ior)

    把字符串写到输出装置dev中,返回到与装置相关的ior。

    F906 DSTATUS

         (dev-ior)

    返回到与装置dev相关的资源的状态ior,在通常情况中,“准备”与“可服务”是由0指示的,“未准备”是由其它任何值指示的。特定装置可以返回到非零值,对于装置而言它具有重要意义。如果装置已经通过以前执行的“OUTPUT”记号所选择,那么DSTATUS应当返回到“未准备”直至完成传送至OUTPUT功能的执性态止。

    F907 DIOCTL

         (dev fn num a-addr-ior)

    执行通道dev的IOCTL功能fn,在a-addr的阵列中具有num单元大小自变量。

    F908 OUTPUT

        (xp dev-ior)

    执行其执行指针由)xp给出的过程,输出被引导至装置dev。从“OUTPUT”返回时,当前输出装置(见GETOP)不受影响。如果程序是可执行,ior作为零返回。源于xp执行的所有异常被虚拟机器抓获,引起立即终止“OUTPUT”。

    F909 DWRITESTRING

        (dev-)

    该记号位于在一串字符前,被储存在记号流中,作为计数字节,其后跟随计数那么多的字节后。DWRITESTRING记号把字符写到所选装置dev中。在最后字符后紧接着继续执行。

    P90A GETOP

         (-dev)

    返回到由SETOP最后所选的装置dev或者在传送至“OUTPUT”功能的执行期间。用于寻找面向设备的I/O操作的缺省装置。此功能允许方便地实施与当前装置有关的功能。

    P90B SETOP

         (dev-)

    用于为面向设备的I/O操作设定由GETOP返回的缺省装置dev。此功能允许方便地实施与当前装置有关的功能。

    F90C FORMFEED

         (dev-)

    在装置dev上执行与装置有关的“新形式”动作,如“清屏”(终端显示)或“抛页”(打印机)。

    F90D CR

         (dev-)

    在装置dev上执行与装置有关的“新行”动作。

    F90E SETXY

         (num1num2dev-)

    利用num1作x座标,num2作y座标,在装置dev上执行与装置有关的“设定绝对位置”动作。

    1.7.2时间处理

    标准Forth字

    1.7.3语言与消息处理

    本组中的记号提供一种处理语言和消息选择与显示的机制。

    F920 CHOOSELANG

         (addr-flag)

    选择其ISO639语言代码由addr处2个字符给出的语言。如果“标志”是“真”,那么语言被找到,现在为当前语言。否则,调用程序应当选择另一种语言。至少一种语言(终端机的本机语言)总是可以利用的。

    F921 CODEPAGE

         (num-flag)

    根据ISO8859(0=公用字符集,1=拉丁1,等)尝试对选择常驻代码页num页Code进行编号。已经选择了代码页。“标志”是“真”。

    F922 LOADPAG

         (addr-flag)

    在终端机的addr处安装代码页(该页通常能在卡中找到)。标志表示该页装载成功。当从ICC已经载入新的消息表时可以完成页的安装,这需要代码页,终端机上不能提供。

    F923 INITMESSAGES

         (-)

    这一功能删除私人发行者消息,编号从C0至FF(十六进制)和由LOADMESSAGES安装的任何消息。在每一用户区段后可调用此功能。

    F924 LOADMESSAGES

         (c-addr-)

    在瞬时消息数据库中的适当位置上安装消息表。c-addr给出消息表定义的位置,包括供消息使用的页代码、依据ISO639的两个字母语言代码和待安装的消息。

    F925 GETMESSAGE

         (num-c-addr len)

    返回消息num的字符串参数。从字符串的长度len中去除尾部空间。

    F927 UPDATEMESSAGES

         (addr len-)

    把消息表安装到常驻语言表中。如果已经存在具有相同代码的语言,它将被替换;否则,将增加新的语言。如果没有足够空间提供给新的语言,那么由代码22(TOO_MANY_LANGUAGES)发布THROW。

    addr给出包含消息表定义的TLV的位置,包括供消息使用的页代码、依据ISO639的二个字母语言代码和待安装的消息。

    F928 MESSAGESIZE

         (-len)

    返回到此终端的消息的标准长度。

    F929 TYPEMESSAGE

         (addr len-)

    在终端机的消息行上显示所给出的字符串。

    1.7.4 ICC代码处理

    本组中的记号提供一种处理集成电路卡读出器的机制。

    F930 INITCARD

         (num-ior)

    选择ICC读出器num,这里num是0或1。

    F931 CARD

         (c-addr1 len1 c-addr2len2-c-addr2 len3)

    把缓冲器c-addr1 len1中的数据送至卡,在c-addr2len2接收数据。返回的len3给出所接收字符串的实际长度。

    缓冲器c-addr1 len1必须包括:

    4字节标准ISO标题(分类、指令、P1、P2)

    任选数据(“长度”字节跟在“长度“后,这里“长度“可以0-255)。

    缓冲器c-addr2len2必须提供来自卡的答案的适当空间加上二个状态字节,包括SW1与SW2。

    误差处理是在CARD中进行的。

    F932 CARDON

         (c-addr len1-c-addr len2 ior)

    给ICC供电并执行卡复位功能。c-addr len1把缓冲器提供到将放置“对复位答复”中;len2是返回字符串的实际长度。

    F933 CARDOFF

         (-)

    切断ICC电源。在完成所有交易时执行。

    F934 CARDABSENT

         (-flag)

    如果读出器中不存在ICC,返回“真”,否则返回“假”。

    1.7.5磁条处理

    本组中的记号提供一种处理磁条装置的机制。

    F938 FROMMAG

         (c-addr len1 num-c-addr len2 ior)

    读出一个或多个ISO磁条。通过用户“取消”键或通过超时能够中断操作。num是磁条轨道读出的ISO标识符,c-addr是字符串的目的地址,len1是其最大长度(ISO的至少78字节、ISO2的41字节和ISO3的108,或者读出多个磁条的长度总和)。返回时,len2给出字符串读出的实际长度。

    F939 TOMAG

         (c-addrlen num ior)

    写入一个ISO磁条。数据在缓冲器c-addrlen中,将被写入至磁条num(1-3)。操作可以通过用户“取消”键或超时来中断。

    1.7.6调制解调器处理

    本组中的记号提供一种处理调制解调器装置的机制。

    F940 MODEMCALL

         (num1 num2 num3 num4 num5 c-addr len-ior)

    利用内部终端调制解调器来呼叫号码。

    num1与num2指示使用的输入与输出行的速度(从75至19200波特)。支持的实际速度由设施限定。

    num3指示一致校验(0=无,1=奇,2=偶)。

    num4指示使用的位的数目(7或8)。

    num5指示用于传输的停止位的数目(1或2位)

    c-addrlen是字符串,包括呼叫的电话号码。可包括“,”用以拨号音等待。如果该符串的第一个字符是“P”,采用脉冲拨号代替缺省的音频拨号。

    F941 MODEMHANGUP

         (-ior)

    此功能用于结束当前调制解调器对话。

    F942 TOMODEM

         (c-addrlen-ior)

    在已建立调制解调器对话时在c-addr len上发送字符串。

    F943 FROMMODEM

         (c-addrlen1-c-addr len2-ior)

    从调制解调器接收字符串。c-addr是字符串的目的地址,len1是其最大长度。返回时,len2给出读出字符串的实际长度。如果在指定周期中没有接收到字符,那么产生超时。

    F944 MODEMBREAK

         (-ior)

    此功能在所连接的调制解调器对话上传送断开。

    1.7.7黑名单管理

    本组中的记号提供一种处理黑名单文件的机制。

    F948 INITBLACKLIST

         (-)

    此功能把黑名单表初始化为空白状态。

    F949 BLACKLISTINSERT

         (c-addr len-flag)

    此功能在表中c-addr len处插入一个项目,它以存储排序维持。

    在对黑名单表更新时必须使用此功能。

    如果插入成功(在现行表中未找到项目和表不满),返回的“标志”是“假”。

    F94A INBLACKLIST

         (c-addr1 len1-c-addr2 len2 flag)

    此功试图找寻表中的关键字c-addr1 len1。

    如果关键字被发现,c-addr2 len2包括搜寻的结果(包括来自所需项目的其余字节和可能的一些其他信息字节)。

    如果找到该数字,返回的“标志”是“假”。

    F94B BLACKLISTDELETE

         (c-addrlen-flag)

    此功能删除表中的项目,这里c-addr len是删除项目的关键字,它可达到18字节长。

    如果删除成功(找到项目),返回的“标志”是“假”。

    1.7.8安全算法的支持

    本组中的记号提供对初始化和利用安全服务的支持。

    F950 INITSECALGO

         (c-addr len num-flag)

    c-addr是初始化缓冲器的地址,len是它的长度。尽管通常应当将关键字传送进行初始化,每种算法的输入参数可能不同。如果初始化成功发生,“标志”是“假”。

    F95l SECALGO

         (c-addr1 len c-addr2 num-flag)

    这里c-addr1是计算用的输入数据缓冲器,len是它的长度。c-addr2是存储结果用的输出缓冲器。

    如果计算成功,“标志”是“假”。

    终端机服务。

    1.7.9终端机服务

    F958  POWERLESS

         (-flag)

    如果有足够电力来完成当前交易,返回“假”。

    1.7.10数据库服务

    下列记号提供一种处理数据库的机制。

    F961 DBMAKECURRENT

         (a-addr-)

    使处于a-addr的数据库成为当前数据库。

    F962 DBSIZE

         (-len)

    返回记录缓冲器的大小,在当前数据库的当前记录是提供窗口。

    F963 DBFETCHCELL

         (num1-num2)

    从当前数据库的当前记录中单元对齐字节偏移num1处的单元返回32位值num2。

    F964 DBFETCHBYTE

         (num-char)

    从当前数据库的当前记录中字节偏移num处返回1字节值char。

    F965 DBFETCHSTRING

         (num len-addr len)

    在当前数据库的当前记录中在偏移num1处用长度len返回字节序列的字符串addr和len。

    F966 DBSTORECELL

         (num1 num2-)

    在当前数据库的当前记录中在单元对齐字节偏移num2处把32位值num1存储到单元中,对数据库记录进行更新。

    F967 DBSTOREBYTE

         (char rnum-)

    在当前数据库的当前记录中在偏移num处把1字节值char存储到字节中,对数据库记录进行更新。

    F968 DBSTORESTRING

         (addr len1 num len2-)

    在当前数据库的当前记录中在偏移num的addr处存储字节序列的最长len2字节,对数据库记录进行更新。如果len1小于len2,则把数据库记录缓冲器中的终点用空格填充到len2。

    F969 DBINITIALIZE

    (-)

    将当前数据库全部初始化为零,把数据库的“当前”和“可使用”记录数(见DBRECNUM与DBAVAIL)设定为0。

    F96A DBRECNUM

    (-u)

    返回当前记录数。

    F96B DBCAPACITY

    (-u)

    返回当前数据库能够保持的记录的总数。

    F96C DBAVAIL

    (-num)

    返回当前文件中下一个可利用记录的记录数。

    F96D DBADDREC

    (-)

    在由DBAVAIL给出的记录数上在当前数据库的结尾处增加一记录。

    F96F DBSELECT

    (num-)

    在当前所选数据库中选择记录num。

    F970 DBMATCHBYKEY

    (addr len-flag)

    搜寻当前数据库,针对由addr与len所指定的字符串在关键字段上匹配。对于这一结构,len可以短于关键字段的限定长度,利用其余字符与空格(ASCⅡ20h)字符比较。如果匹配成功,匹配记录变成当前的,“标志”是“假”。

    该记号仅与已排序数据库一起使用。

    F971 DBADDBYKEY

    (addr len-fiag)

    搜寻当前数据库,针对由addr与len所指定的字符串,在关键字段上匹配。对于这一结构,len可以短于关键字段的限定长度,利用其余字符与空格(ASCⅡ20h)字符比较。如果匹配成功,匹配记录变成当前的,“标志”是“真”。如果匹配不成功,在数据库中的正确位置上插入一新记录,“标志”是“假”。对该新记录进行初始化,其关键字段除外,关键字段将包含给定关键字。

    该记号仅与已排序数据库一起使用。

    F972 DBDELBYKEY

    (addr len-fiag)

    搜寻当前数据库,针对由addr与len所指定的字符串,在关键字段上匹配。对于这一结构,len可以短于关键字段的限定长度,利用其余字符与空格(ASCⅡ20h)字符比较。如果匹配成功,删除匹配记录,“标志”为“假”。通过采取适当动作,对预初始化数据库中的记录物理重新定位或重新链接,删除动作可堵住实体设备中的任何潜在“漏洞”。

    该记号仅与已排序数据库一起使用。

    F973 DBSAVECONTEXT

    (-)

    引发服务器把当前上下文信息压入堆栈,包括当前数据库、当前记录数和任何有关信息。给予服务器使用VM的返回堆栈保存上下文信息的权利,因此,客户软件必须遵守返回堆栈使用的一般规则。

    F974 DBRESTORECONTEXT

    (-)

    引发服务器恢复最新保存的上下文信息(见DBSAVECONTEXT)。给予服务器使用VM的返回堆栈保存上下文信息的权利,因此,客户软件必须遵守返回堆栈使用的一般规则。

    1.8 TLV管理

    本节中所述的记号提供TLV管理和存取功能。

    1.8.1字符串处理支持

    F978 PLUSSTRING

    (c-addr1 lenl c-addr2 len2-c-addr2 len3)

    在c-addr2处字符串的末尾的len2字节上,存储在c-addr1处的len1字节字符串。返回到目的字符串(c-addr2)的开始处和二个长度(len3)之和。在目的字符串的末端必须有空间,以保持两个字符串。

    F979 CPLUSSTRING

    (char c-addr len-c-addr len+1)

    在c-addr处字符串的末端储存len字节的字符char。返回到目的字符串(c-addr)的开始和产生字符串的长度(len+1)。在目的字符串的末端必须有空间,以保持两个字符串。

    F97A MINUSTAILING

    (c-addr len1-c-addr len2)

    如果len1大于零,len2等于len1减去在由c-addrlen1指定的字符串的末端空格(ASCⅡ20h)数。如果len1为零或整个字符串由空格组成,那么len2为零。

    F97B MINUSZEROS

    (c-addr len1-c-addr len2)

    如果len1大于零,len2等于len1减去在由c-addr len1指定的字符串的末端零(ASCⅡ0h)数小。如果len1为零或整个字符串由空字符组成,那么len2为零。

    F97C STORECOUNT

    (char c-addr-)

    把数字char存储到c-addr处的字节。如果char大于255则产生STRING_TOO_LARGE抛出代码。

    1.8.2 TLV缓冲器存取

    F980 TLV

    (num-c-addr len fmt)

    返回到TLV的访问参数,它的Tag是num。这可产生UNDEFINED_TLV抛出代码。

    F9 81 TLVFETCH

    (c-addr1 len1 fmt-num|c-addr2 len2)

    根据内部TLV缓冲器的“TYPE”字段返回到其内容,“TYPE”字段是fmt的低八位。类型代码0和2返回到堆栈上数字,而其他返回到字符串指针。由类型代码3字段返回的地址是临时的,必须即刻转移到更永久位置。字符串返回的len2与最后储存在缓冲器中的相同。

    F982 TLVSTORE

    (num c-addr2 len2 fmt|c-addr1 len1 c-addr2 len2 fmt-)

    根据其“类型”字段设定内部TLV缓冲器的内容,类型字段是fmt的低八位,类型代码0和2取堆栈上的数,而其他取字符串指针。这一动作将设此TLV的定语法分析状态位。

    F983 TLVBITFETCH

    (c-addr-fiag)

    返回到掩蔽内部TLV缓冲器内容的结果,其内容被c-addr处的序列所引用,针对此位置的值字段。这可以产生UNDEFINED_TLV抛出代码。如果以掩码定义的所有位位于内部缓冲器上,那么“标志”将返回到“真”。否则,将返回到“假”。仅对二个位置中较短的一个所覆盖的字节进行检查。

    F984 TLVBITSTORE

    (flag c-addr-)

    基于其位置上的值字段,设定c-addr处序列所引用的内部TLV缓冲器的内容。如果“标志”是“假(0)”,则断开那里所定义的所有位。否则,将它们全部接通。

    1.8.3TLV处理

    F985 PARSETLV

    (c-addr len-)

    对于TLV序列,对c-addr处的len字节进行处理。这可以产生UNDEFINED_TLV抛出代码。碰到的每一标记字段将长度字段字节从其值字段置于其内部缓冲器中并设定其语法分析状态位。当碰到所构成的标记字段时,在针对TLV序列进行值字段的语法分析前,清除已经被定义为与它有关的所有内部TLV缓冲器。如果在未曾被定义为与它有关的构成模板中碰到TLV,将不产生异常。

    F986 PLUSDOL

    (c-addr1 len c-addr2 len2-c-addr2 len3-)

    对于“标记”字段和“长度”字段,对c-addr1处的len1字节进行处理。这可以产生UNDEFINED_TLV抛出代码。在c-addr2处输出字符串的末端len2字节处,对碰到的每一标记字段将“长度”字段字节从其内部缓冲器置于值字段中。返回到目的字符串(c-addr2)的开始和二个长度(len3)之和。在输出字符串的末端必须有空间以保持两个字符串。

    F987 PLUSTLV

    (c-addrlen1 num-c-addrlen2)

    把其“标记”是num的TLV序列加至c-addr1处的输出字符串的末端len1字节处。这可以产生UNDEFINED_TLV抛出代码。根据TLV规则,基于其内部缓冲器中数据对标记、长度和值字段进行格式化。返回到目的字符串(c-addr)的开始和二个长度之和(len2)。在输出字符串的末端必须有空间以保持两个字符串。

    F989 TLVSTATUS

    (fmt-num char)

    对TLV存取参数fmt的状态进行解码。返回的num是格式指示符0,返回的char中的字符具有下列意义,这里0位是最低位:    0    0=非语法分析,1=语法分析    1-7    保留给将来使用

    1.8.4 TLV序列存取

    F98A STOREBCD

    (uc-addr len-)

    数u作为二-十进制序列存储到c-addr处len字节的字符串中。对数字进行格式化,在输出字符串中每个数字代表4位半字节。如果需要的话将前面的半字节填充0。如果len不具是足够长度保持所有数字,数的最高位部分将被舍去。

    F98B FETCHBCD

    (c-addr len-u)

    从c-addr处的二-十进制序列中取出len字节的数u。对数字进行格式化,在输入字符串中每个数字代表4位半字节。如果任何半字节不是有效的BCD数字,那么抛出DIGIT_TOO_LARGE异常。

    F98C STOREBN

    (uc-addr len-)

    数字u作为二进制数存储到c-addr处的len字节的字符串中。首先存储数字的最高位字节。如果需要的话,前面的字节将填充0。如果len不具是足够长度保持所有数字,数的最高位部分将被舍去。

    F98D FETCHBN

    (c-addr len-u)

    从c-addr处的字符串中取出len字节的数字u,作为二进制数。首先取出数的最高位字节。如果在该位置上数据超过四字节,那么将丢失最高位字节。

    F98E STORECN

    (c-addr1 len1 c-addr2 len2-)

    把c-addr1处len1字节的数作为压缩数存储到c-addr2处的len2字节字符串中。对此数进行格式化,在输出字符串中每个字符代表4位半字节。如果需要的话,后面的半字节将填充F。如果len2长度不足以保持所有字符(len2<[len1+1]/2),数字将被截断。如果输入字符串中的字符不是数字,那么将产生DIGIT_TOO_LARGE抛出代码。

    F98F FETCHCN

    (c-addr1 len1-c-addr2 len2)

    取出len2字节字符串至c-addr2处的临时位置,它代表c-addr1处len1字节字符串中的“压缩数字”。对数字进行格式化,输出字符串的每个字符代表输入字符串中的4位半字节。当碰到具有所有位组的半字节或字符串的末端时将终止输出字符串。如果输入字符串中的半字节不是数字将产生DIGIT_TOO_LARGE抛出代码。输出字符串必须立刻移至更永久位置。

    F990 TLVFETCHNAME

    (c-addr1-c-addr2 num)

    对于“标记”字段,进行c-addr1处TLV序列的语法分析。返回地址c-addr2,它是过去的标记字段和标记字段的num。

    F991 TLVFETCHLENGTH

    (c-addr1-c-addr2 len)

    对于“长度”字段,进行c-addr1处TLV序列的语法分析。返回地址c-addr2,它是过去的长度字段和包含在此字段中的len。

    1.9模块处理

    下列的记号提供给EPI代码模块在虚拟机器中的存储和执行。

    F9A0 EXECUTEMODULE

    (c-addr len-flag)

    利用c-addr len指定的AID从模块目录中载入模块。如果发生差错,抛出异常CANNOT_LOAD_MODULE。如果未找到模块,则“标志”是“真”,如果载入成功则为“假”。

    F9A1 INITMODULEBUFFER

    (-)

    准备新模块的获取。

    F9A2 MODULEBUFFERAPPEND

    (c-addr len-)

    把c-addr和len限定的缓冲器的内容添加到模块获取缓冲器中。如果还未准备模块缓冲器,或者如果超出模块缓冲器处理容量,则抛出异常CANNOT_AAD_TO_MODULE。

    F9A3 REGISTERMODULE

    (c-addr len-)

    在由c-addr len指定的给定EPI代码AID下,把模块缓冲器寄存在模块目录中。自动释放与管理模块缓冲器相关的资源。

    F9A4 RELEASEMODULEBUFFER

    (-)

    释放内部模块缓冲器所使用的资源。模块的不成熟的载入必须由应用程序来终止,不把模块寄存在模块目录中,则需要这样。

    F9A5 DELETEMODULE

    (c-addr len-flag)

    从模块目录中删除其AID由c-addr len指定的模块。如果操作成功“标志”为零。

    F9A6 MODULEINFO

    (c-addr1 len1-c-addr2 len2 flag)

    返回到模块上的“公用”信息,该模块是在c-addr1 len1指定的AID下寄存在模块目录中。如果操作成功“标志”是零,c-addr1处的数据是有效的。由这一记号返回的缓冲器的结构是由模块标题信息限定的。这一功能仅返回通过EPF_ENTRY的EPF_VER项目。

    F9A7 LOADCARDMODULE

    (a-addr-)

    在a-addr载入模块。a-addr是从卡传递到内部储存器中的EPI代码模块标题的地址。如果模块违反卡模块载入的任何前置条件,抛出异常BAD_CARD_MODULE。

    F9A8 MODULESCHANGED

    (-u)

    返回值u,表示模块是否已被改变。位0至7定义自从该记号的最后执行以来在模块目录中已经寄存了哪个模块类别。例如,利用初始AID字节是F4寄存的模块将位4设定为返回状态。位8至31被保留供未来扩增。

    1.10可扩充存储器处理

    下列记号提供对虚拟机器提供和管理的数据空间中线性存储器的可扩充“橡皮筋”缓冲器的存取。

    F9B0 EXTEND

    (len-a-addr)

    通过len单元扩展“橡皮筋”缓冲器,返回所分配缓冲器中第一单元的单元对准地址a-addr。ZERO EXTEND使指针返回到下一未分配的单元。如果没有足够存储器可供利用,则抛出OUT_OF_MEMORY异常。

    F9B1 BEXTEND

    (len-c-addr)

    通过len字节扩展“橡皮筋”缓冲器,返回所分配缓冲器中第一字节的地址c-addr。ZERO EXTEND使指针返回到下一未分配的字节。如果没有足够存储器可供利用,则抛出OUT_OF_MEMORY异常。

    F9B2 RELEASE

    (addr-)

    释放通过EXTEND或BEXTEND获取的存储,把“自由指针”设定到addr。如果addr是无效的(在启动橡皮筋缓冲器前,或者超出当前“自由指针”),在抛出ANS异常-9(无效的存储器地址)。

    进一步的记号:

    F9B0 DSCHECK

    (u-flag)

    检查至少u数据单元保留在数据堆栈上。如果是这种情况,返回“假”,否则返回“真”。

    F9B1    RSCHECK

    (u-flag)

    检查至少u数据单元保留在返回堆栈上。如果情况如此,返回“假”,否则返回“真”。

    1.11安全命令

    安全算法处理在某些终端机上可能占据几秒时间。本发明包括把目前单个SECALGO命令分解成开始部分和完成部分,以便于使用多任务设施。这处于研究当中,提出下列建议作为对SECALGO的另一种选择。

    F956    SECALGOBEGIN

    (c-addr1 len c-addr2 num-flag)

    这是利用类型num的算法进行计算的。c-addr1是计算用的输入数据缓冲器,len是其长度。c-addr2是存储结果用的输出缓冲器。这一功能返回一“标志”,表示“假”是能够成功开始的计算。

    F957 SECALGOEND

    (-ior)

    这一功能返回一ior,表示:0=计算成功完成;-1=计算仍然进行;1=计算失败。

    异常代码

    本节包括对于标准异常处理功能“抛出”的作为自变量使用的所有代码。

    下表示出EPIC核心中使用的ANS Forth代码。    #保留    #保留    -3堆栈溢出    -23地址对准异常    -4堆栈下溢    -24无效数值自变量    -5返回堆栈溢出    -25返回堆栈失衡    -6返回堆栈下溢    -26回路参数不可使用    -7执行期间嵌套回路太深    -27无效递归    -9无效存储器地址    -28用户中断    -10除零    -36无效文件位置    -11结果超出范围    -37文件I/O异常    -12自变量类型失配    -38非现行文件    -17图像数字输出字符串溢出    -39文件的意外结束    -20写至只读位置    -53异常堆栈溢出    -21不被支持的操作    -57异常送出或接收字符

可编程智能装置的便携式安全交易系统.pdf_第1页
第1页 / 共87页
可编程智能装置的便携式安全交易系统.pdf_第2页
第2页 / 共87页
可编程智能装置的便携式安全交易系统.pdf_第3页
第3页 / 共87页
点击查看更多>>
资源描述

《可编程智能装置的便携式安全交易系统.pdf》由会员分享,可在线阅读,更多相关《可编程智能装置的便携式安全交易系统.pdf(87页珍藏版)》请在专利查询网上搜索。

本发明提供一种在第一装置(1)与第二装置之间执行交易的交易管理系统,所述第一和第二装置适合于彼此通信,第一和第二装置中至少有一个为集成电路卡,所述系统包括:至少一个输入/输出装置(25);一便携式虚拟机器(20),用以解译第一装置上的计算机程序,所述虚拟机器包括一虚拟微处理器和用于至少一输入/输出装置(25)的驱动器;以及根据所述已解译程序执行所述程序的执行装置。本发明背后的一般链接技术概念是与交。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 核算装置


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1