处理消息摘要指令的制作方法

文档序号:7606186阅读:86来源:国知局
专利名称:处理消息摘要指令的制作方法
技术领域
本发明涉及计算机系统体系结构,尤其涉及扩充IBM z/体系结构并且能够被其他体系结构仿真的新指令的处理。
背景技术
在本发明之前,从20世纪60年代被称为IBM系统360的机器开始,到目前为止,通过许多非常有才能的工程师们的工作,IBM已创建了一种特殊的体系结构,因为它对于计算系统来说的基本性质,而被称为“大型机”,其操作原理通过描述可在指令的该“大型机”实现上执行的指令而规定该机器的体系结构,这些指令是由IBM的发明人们发明的,并且由于它们对改进由“大型机”所代表的计算机器的状况具有重大贡献,所以被采纳为重大贡献而被包括在多年所规定出的IBM的操作原理中。2000年12月出版的《z/体系结构操作原理》的第一版已成为标准的出版参考书SA22-7832-00。
本发明确定,如本文所描述的,进一步的新的指令将有助于本技术领域并能被包括进z/体系结构机器中,也能被较简单机器中的其他体系结构仿真。

发明内容
本发明提供一种如权利要求1所要求的方法。


根据下面结合附图所作的详细描述,本发明的优选实施例的特征对于本领域技术人员来说将是显而易见的,其中图1是RRE指令格式的计算中间消息摘要(KIMD)指令的表示;图2是RRE指令格式的计算最后消息摘要(KLMD)指令的表示;图3是示出图1的KIMD指令的功能码的表;图4是示出图2的KLMD指令的功能码的表;图5是对图1和2的KIMD和KLMD的通用寄存器分配的表示;图6示出SHA-1块摘要算法的符号;图7示出KIMD-Query的参数块的格式;图8示出KIMD-SHA-1的参数块的格式;图9示出KIMD-SHA-1操作;图10示出KLMD-Query的参数块的格式;图11示出KLMD-SHA-1的参数块的格式;图12示出KLMD-SHA-1满块操作;图13示出KIMD-SHA-1空块操作;图14示出KLMD-SHA-1部分块情况1操作;图15示出KLMD-SHA-1部分块情况2操作;图16示出KIMD和KLMD指令的执行优先级的表;图17示出本发明的密码协处理器;以及图18示出包含根据优选实施例的指令和数据的计算机存储器、以及用于或者在采用这些体系结构化指令的计算机系统上或者在仿真本发明的体系结构化指令时使用的读取、解码和执行这些指令的机制的一般化优选实施例。
具体实施例方式
在此讨论的消息摘要指令用于计算消息或数据文件的压缩表示。首先讨论计算中间消息摘要和计算最后消息摘要指令,接着讨论执行这些指令的优选计算机系统。作为选择,将讨论第二优选计算机系统,其仿真用于执行这些指令的另一计算机系统。
计算中间消息摘要(KIMD)图1是RRE指令格式的计算中间消息摘要(KIMD)指令的表示。计算最后消息摘要(KLMD)图2是RRE指令格式的计算最后消息摘要(KLMD)指令的表示;执行通用寄存器0中的功能码所指定的功能。
忽略该指令的位16-23和R1字段。
通用寄存器0的位位置57-63包含该功能码。图3和4分别示出了为计算中间消息摘要和计算最后消息摘要所分配的功能码。所有其它功能码未被分配。通用寄存器0的位56必须为0;否则,认可一规定异常(specification exception)。忽略通用寄存器0的所有其它位。通用寄存器1包含存储器中参数块最左侧字节的逻辑地址。在24位寻址模式中,通用寄存器1的位位置40-63的内容构成地址,并忽略位位置0-39的内容。在31位寻址模式中,通用寄存器1的位位置33-63的内容构成地址,并忽略位位置0-32的内容。在64位寻址模式中,通用寄存器1的位位置0-63的内容构成地址。
图3示出了用于计算中间消息摘要的功能码。
图4示出了用于计算最后消息摘要的功能码。
所有其他的功能码未被分配。
查询功能提供了表明其它功能的可用性的手段。对于查询功能,忽略通用寄存器R2和R2+1的内容。
对于所有其他的功能,按照功能码所指定的,使用参数块中的初始链接值对第二操作数进行处理,并用结果替换该链接值。对于计算最后消息摘要,该操作还使用参数块中的消息位长度。该操作继续进行,直到到达第二操作数位置的末尾,或者处理完CPU确定的字节数,不管哪一个首先发生。结果在条件码中指示出。
R2字段指定一对奇-偶通用寄存器,并且必须指定一偶数寄存器;否则,认可一规定异常。
第二操作数的最左侧字节的位置由通用寄存器R2的内容指定。第二操作数位置中的字节数在通用寄存器R2+1中指定。
作为操作的一部分,通用寄存器R2的地址随着第二操作数中被处理的字节数递增,而通用寄存器R2+1的长度随着相同的数递减。地址和长度的形成和更新取决于寻址模式。
在24位寻址模式中,通用寄存器R2的位位置40-63的内容构成第二操作数的地址,并忽略位位置0-39的内容;更新后地址的40-63位替换通用寄存器R2中的相应位,忽略来自更新后地址的位位置40的进位,并且将通用寄存器R2的位位置32-39的内容设为0。在31位寻址模式中,通用寄存器R_的位位置33-63的内容构成第二操作数的地址,而位位置0-32的内容被忽略;更新后地址的33-63位替换通用寄存器R2中的相应位,忽略来自更新后地址的位位置33的进位,并且将通用寄存器R2的位位置32的内容设为0。在64位寻址模式中,通用寄存器R2的位位置0-63的内容构成第二操作数的地址;更新后地址的0-63位替换通用寄存器R的内容,并忽略来自位位置0的进位。
在24位和31位两种寻址模式中,通用寄存器R2+1的位位置32-63的内容构成一个32位无符号二进制整数,该整数指定第二操作数中的字节数;且更新后的值替换通用寄存器R2+1的位位置32-63的内容。在64位寻址模式中,通用寄存器R2+1的位位置0-63的内容构成一个64位无符号二进制整数,该二进制整数指定第二操作数中的字节数;且更新后的值替换通用寄存器R2+1的内容。
在24位或31位寻址模式中,通用寄存器R2和R2+1的位位置0-31的内容一直保持不变。
图5示出刚才所描述的通用寄存器的内容。在访问寄存器模式中,访问寄存器1和R2分别指定包含参数块和第二操作数的地址空间。
就如同处理从第二操作数的左端开始逐块地一直进行到右边那样来获得结果。当处理完第二操作数中的所有源字节时(称为正常完成),或当处理完CPU确定的少于第二操作数长度的块数时(称为部分完成),该操作结束。该CPU确定的块数取决于型号,且可能是在每次执行指令时的一个不同的数。该CPU确定的块数通常为非0。在某些不寻常的情况下,该数有可能为0,且可将条件码3设置为无进展。但是,CPU防止这种无进展情况的无止境的重复发生。
当链接值字段与第二操作数的任何部分重叠时,链接值字段中的结果不可预知。
对于计算中间消息摘要来说,正常完成发生在通用寄存器R2+1中所指定的第二操作数中的字节数被处理完时。对于计算最后消息摘要来说,在通用寄存器R2+1中所指定的第二操作数中的所有字节被处理完时,执行填充操作,然后正常完成发生。
当由于正常完成而使操作结束时,设置条件码0并且R2+1中的结果值为0。在由于部分完成而使操作结束时,设置条件码3并且R2+1中的结果值为非0。
在第二操作数长度初始为0时,不访问第二操作数,不改变通用寄存器R2和R2+1,且设置条件码0。对于计算中间消息摘要来说,不访问参数块。但是,对于计算最后消息摘要来说,执行空块(L=0)情况填充操作,并将结果存储到参数块中。
如根据其他CPU和通道程序所观察的,对参数块和存储操作数的引用可以是多路访问引用,对这些存储器位置的访问不必是块并发的,并且这些访问或引用的次序是未定义的。
对于第二操作数的比在指令的单个执行中所处理的更大的部分,可报告访问异常;但是,对于超出第二操作数长度的位置不认可访问异常,对于超出正在处理的当前位置4K字节以上的位置也不认可访问异常。
功能描述中使用的符号图6的符号被用在计算中间消息摘要和计算最后消息摘要功能的随后描述中。安全散列算法的进一步描述可参见Secure Hash Standard,FederalInformation Processing Standards(联邦信息处理标准)出版物180-1,National Institute of Standards and Techonlogy(美国国家技术标准局),华盛顿特区,1995年4月17日。
KIMD-Query(KIMD功能码0)图5中示出了该指令所使用的操作数和地址的位置。
KIMD-Query参数块其格式在图7中示出。
128位状态字存储在该参数块中。该字段的位0-127分别对应于计算中间消息摘要指令的功能码0-127。当一个位为1时,将安装相应的功能;否则,不安装该功能。
在KIMD-Query功能的执行完成时,对条件码0进行设置;条件码3不适用于该功能。
KIMD-SHA-1(KIMD功能码1)图5中示出了该指令所使用的操作数和地址的位置。
用于KIMD-SHA-1功能的参数块其格式在图8中示出。
使用SHA-1块摘要算法利用该参数块中20字节链接值为操作数2中的64字节消息块生成20字节中间消息摘要。所生成的中间消息摘要,也称输出链接值(OCV),被存储在参数块的链接值字段中。KIMD-SHA-1操作在图9中示出。
KLMD-Query(KLMD功能码0)图5中示出了该指令所使用的操作数和地址的位置。
用于KLMD-Query功能的参数块其格式在图10中示出。
128位状态字存储在该参数块中。该字段的位0-127分别对应于计算最后消息摘要指令的功能码0-127。当一个位为1时,将安装相应的功能;否则,不安装该功能。
在KLMD-Query功能的执行完成时,对条件码0进行设置;条件码3不适用于该功能。
KLMD-SHA-1(KLMD功能码1)图5中示出了该指令所使用的操作数和地址的位置。
用于KLMD-SHA-1功能的参数块其格式在图11中示出。
使用SHA-1算法利用该参数块中链接值及消息位长度信息来生成操作数2中的消息(M)的消息摘要。
如果操作码2中的消息长度等于或大于64字节,那么使用SHA-1块摘要算法利用该参数块中的20字节链接值为每一个64字节消息块生成中间消息摘要,所生成的中间消息摘要,也称为输出链接值(OCV),其被存储在该参数块的链接值字段中。该操作如图12所示,并且其重复到剩余消息少于64字节为止。如果消息或剩余消息的长度是0字节,那么执行图13中的操作。
如果消息或剩余消息的长度处于1字节和55字节之间,包括1字节和55字节在内,那么执行图14中的操作;如果该长度处于56字节和63字节之间,包括56字节和63字节在内,那么执行图15中的操作;消息摘要,也称为输出链接值(OCV),其被存储在该参考块的链接值字段中。
KLMD功能中使用的附加符号以下附加符号使用在计算最后消息摘要功能的描述中。
KLMD功能图示的符号解释L 存储器中操作码2的字节长度。
p<n> n个填充字节;最左边字节是80十六进制;所有其他字节是00十六进制。
z<56> 56个0填充字节。
Mbl规定整个消息的位长度的8字节值。
q<64> 填充块,包括56个0字节和其后的8字节mbl。
KIMD和KLMD的特殊条件如果发生下列任何情况,则认可规定异常,且不采取任何其它动作
1.通用寄存器0的位56为非0。
2.通用寄存器0的位57-63指定一个未分配的或卸载的功能码。
3.R2字段指定一个奇数寄存器或通用寄存器0。
4.对于计算中间消息摘要来说,第二操作数长度不是指定功能的数据块大小的倍数(参见图3以确定用于计算中间消息摘要功能的数据块大小)。该规定异常条件不应用于查询功能,其也不应用于计算最后消息摘要。
结果条件码0正常完成1-2-3部分完成程序异常访问(读取,操作数2和消息位长度;读取和存储,链接值)操作(若没有安装消息安全帮助)规定编程注释1.通用寄存器0的位56保留用于将来的扩展,且应当设为0。
2.当设置条件码3时,通常更新通用寄存器R2和R2+1中各自的第二操作数地址与长度以及参数块中的链接值,以便程序可以简单分支回到该指令以继续操作。
对于不寻常的情形,CPU防止无进展情况下无止境的重复发生。这样,每当设置了条件码3,程序都能安全分支回到该指令,而不会进入无止境循环。
3.如果第二操作数的长度初始为非0,且设置条件码0,则以与对于条件码3同样的方式更新这些寄存器;此种情况下的链接值是这样的,即可以对附加的操作数进行处理,就如同它们是同一链中的部分。
4.设计计算中间消息摘要指令和计算最后消息摘要指令,以由安全服务应用程序编程接口(API)所用。这些API向程序提供具有计算几乎无限大小的消息的摘要的手段,这些几乎无限大小的消息包括那些太大而不能一次全部填充到存储器中的消息。这是通过允许该程序将该消息部分地传递给API来实现的。以下的编程注释在这些API方面进行描述。
5.在处理消息第一部分之前,程序必须为链接值字段设置初始值。对于SHA-1而言,以下列出了这些初始链接值H0=x’67452301’H1=x’EFCD AB89’H2=x’98BA DCFE’H3=x’10325476’H4=x’C3D2E1F0’6.当处理除了最后消息之外的消息部分时,该程序必须处理512位(64字节)的倍数的消息部分,并且使用计算中间消息摘要指令。
7.当处理最后消息部分时,该程序必须以位来计算原始消息的长度,并且将该64位值放置在参考块的消息位长度字段中,并使用计算最后消息摘要指令。
8.计算最后消息摘要指令不需要第二操作数是块大小的倍数。其首先处理完整块,并且在处理所有块之前设置条件码3。然后,在处理所有完整块之后,其执行包括第二操作数的剩余部分的填充操作。这可能需要SHA-1块摘要算法的一次或两次迭代。
9.计算最后消息摘要指令对长度上是8位的倍数的消息提供SHA-1填充。如果SHA-1被应用到不是8位的倍数的位串,那么该程序必须执行填充,并且使用计算中间消息摘要指令。
密码协处理器优选的实施例提供了密码协处理器,该密码协处理器可与本文所描述的指令一起使用,并执行密码消息,以及协助各种链式消息任务,所述链式消息任务可与适当指令一起用于链式和密码用途。
图17示出了本发明的密码协处理器,它直接附接于数据通路上,该数据通路为具有多个执行流水线的通用微处理器上的所有内部执行单元所公用。微处理器内部总线(1)对于所有其他附接于密码控制单元(2)的执行单元所公用,且该控制单元监视总线上它应执行的处理器指令。
密码控制单元提供密码协处理器,该密码协处理器直接附接于数据通路,该数据通路对于通用微处理器上的中央处理单元的所有内部执行单元公用,该通用微处理器为该中央处理单元提供了可用的硬件(在具有多个执行流水线的优选实施例中的E0...En,或它们的组合)。当在命令寄存器(3)中遇到密码指令时,控制单元(2)从可用的硬件中调用适当的算法。操作数数据经过输入FIFO寄存器(4)在同一内部微处理器总线上进行传递。当操作完成时,在状态寄存器(6)中设置一个标志,且结果可从输出FIFO寄存器(5)中读出。
本发明的所示出的优选实施例被设计成可扩展的,以便包括根据系统的性能目标的特定实现所需要的那样多的硬件引擎。到输入和输出寄存器(7)的数据通路在所有的引擎中是公用的。
本发明的密码功能的优选实施例在CPU上的执行单元硬件中实现,并且此实现能够降低调用和执行加密操作的等待时间并提高效率。
这种降低的等待时间大幅度提高了频繁进行很多加密操作的系统中通用处理器的能力,尤其是当仅涉及小量数据时。这允许这样一种实现,该实现能显著加速在进行安全在线事务中所涉及的过程。确保在线事务安全的最常用的方法包括一组3个算法。第一个算法在会话中仅使用一次,且可用硬件或软件来实现,而其它操作由该会话的每个事务所调用,并且使用本发明消除了调用外部硬件的等待时间的成本以及以软件来执行算法的时间上的成本。
在图18中,已概念性地示出如何在具有上述可以有效使用的微处理器的大型计算机中实现在一优选实施例中所实现的功能,这一点我们已在IBM内在长位移工具计算机体系结构化指令格式的商业实现中实验地证明了,这些指令由程序员,通常是现在的“C”程序员所使用。这些存储在存储介质中的指令格式可以在Z/体系结构IBM服务器中本机执行,或者可选地在执行其他体系结构的机器中执行。它们可以在现有及将来的IBM大型机服务器中和IBM的其它机器(例如p系列服务器和x系列服务器)上被仿真。它们可以在运行Linux的机器上执行,运行Linux的多种机器使用由IBM、Intel、AMD、Sun Microsystems和其它厂商制造的硬件。除在z/体系结构下的硬件上执行之外,也可以使用Linux执行,以及在使用Hercules、UMX、FXI或Platform Solutions进行仿真的机器上执行,在这些机器上一般以一种仿真模式执行。在仿真模式中对被仿真的特定指令解码,并以“C”子例程或驱动程序来构建子例程以实现该单个指令,或使用为特定硬件提供驱动程序的某种其它方法来实现,如本领域的技术人员在理解了优选实施例的描述后所能掌握的那样。各种软件和硬件仿真专利包括但不限于US5551013、US6009261、US5574873、US6308255、US6463582、和US5790825,它们示出了针对本领域技术人员可用的目标机器而实现对为不同机器体系结构化的指令格式的仿真的各种已知方法,以及以上引用的这些专利使用的商业软件技术。
在优选的实施例中,用于非超级标量指令的现有先前长位移指令格式由基址寄存器和12位无符号位移之和或基址寄存器、变址寄存器、及12位无符号位移之和构成操作数存储地址,而新的长位移指令格式由基址寄存器和20位有符号位移之和或基址寄存器、变址寄存器、及20位有符号位移之和构成操作数存储地址。
如图18所示,这些指令由处理器在硬件中执行,或由在具有不同的本机指令集的计算机上执行的软件对所述指令集的仿真来执行。
在图18中,#501示出了包含指令和数据的计算机存储器。本发明中所描述的长位移指令最初将存储在这台计算机中。#502示出用于从计算机存储器中读取指令的机制,并也可以包含对它已读取出的这些指令的本地缓冲。然后,将这些原始指令传送到指令解码器#503,在该指令解码器#503中确定所读取的指令类型。#504示出执行指令的机制。这可包括将数据从存储器#501加载到寄存器中,将数据从寄存器存回存储器中,或执行某种类型的算术或逻辑操作。这种要执行的操作的确切类型先前已由指令解码器确定。本发明中所描述的长位移指令将在此处执行。如果长位移指令正在计算机系统上本机执行,那么此图就按以上所述完成。然而,如果包含长位移指令的指令集体系结构正在另一台计算机上被仿真,则以上的过程将在主计算机#505上的软件中实现。在这种情况下,上述的机制通常将作为仿真器软件内的一个或多个软件子例程来实现。在这两种情况下,指令都被读取、解码和执行。
更具体地,这些体系结构化的指令可以用于这样的计算机体系结构中,该计算机体系结构具有现有的指令格式,这些格式具有用于构成操作数存储地址的12位无符号位移,也具有提供附加的位移位(优选为20位)的指令格式,其中这些位移位组成扩展的用于构成操作数存储地址的有符号位移。这些计算机体系结构化指令构成存储在计算机存储介质中的计算机软件,其用于产生利用该计算机软件的处理器的代码运行,且其包括由存储在计算机存储介质501中的编译器或仿真器/解释器所使用的指令码,其中该指令码的第一部分包括指定要被执行的操作的操作码,而第二部分指定参与的操作数。长位移指令允许使用长位移工具指令直接寻址附加地址。
如由图18示出的,这些指令在硬件中由处理器执行,或由在具有不同本机指令集的计算机上执行的软件仿真所述指令集来执行。
根据优选实施例的计算机体系结构,位移字段被定义为分两部分,最低有效部分是12位,称为DL,DL1用于操作数1或DL2用于操作数2,而最高有效部分是8位,称为DH,DH1用于操作数1或DH2用于操作数2。
此外,优选的计算机体系结构具有这样的指令格式,即操作码处于位位置0-7和位位置40-47,称为R1的目标寄存器处于位位置8-11,称为X2的变址寄存器处于位位置12-15,称为B2的基址寄存器处于位位置16-19,位移由两部分组成,称为DL2的第一部分处于位位置20-31,而称为DH2的第二部分处于位位置32-39。
该计算机体系结构具有这样的指令格式,即操作码处于位位置0-7和位位置40-47,称为R1的目标寄存器处于位位置8-11,称为R3的源寄存器处于位位置12-15,称为B2的基址寄存器处于位位置16-19,位移由两部分组成,称为DL2的第一部分处于位位置20-31,而称为DH2的第二部分处于位位置32-39。
此外,具有长位移工具的本发明计算机体系结构指令具有这样的指令格式,即操作码处于位位置0-7和位位置40-47,称为R1的目标寄存器处于位位置8-11,称为M3的掩码值处于位位置12-15,称为B2的基址寄存器处于位位置16-19,位移由两部分组成,称为DL2的第一部分处于位位置20-31,而称为DH2的第二部分处于位位置32-39。
如所示出的,本发明优选的具有其长位移工具的计算机体系结构具有这样的指令格式,即操作码处于位位置0-7和位位置40-47,称为I2的立即值处于位位置8-15,称为B2的基址寄存器处于位位置16-19,位移由两部分组成,称为DL1的第一部分处于位位置20-31,而称为DH1的第二部分处于位位置32-39。
当本发明的长位移工具计算机体系结构使用所创建的仅使用具有新的20位无符号位移的指令格式的新指令时,会有效地进行操作。
本发明的计算机体系结构的特定实施例利用现有的指令,这些指令具有仅有12位无符号位移的指令格式,并且现在被定义成新的指令格式,以便或者当位移的高8位(即字段DH)全为0时,具有现有的12位无符号位移值,或者当位移的高8位(即字段DH)为非0时,具有20位有符号值。
一种用于摘要计算环境的存储器的装置,所述装置包括用于通过指令来指定将要摘要的存储单元的装置;以及用于摘要该存储单元中的数据的装置。
权利要求
1.一种对计算环境的存储器进行摘要的方法,所述方法包括通过指令指定将要摘要的存储单元;以及对该存储单元中的数据进行摘要。
2.如权利要求1的方法,其中上述指定包括提供与上述存储单元相关的数据结构的位置信息。
3.如权利要求2的方法,其中上述位置信息包括上述数据结构的起始点。
4.如权利要求3的方法,其中上述位置信息进一步包括上述数据结构的条目的索引,所述条目对应于上述存储单元。
5.如权利要求1的方法,其中上述对数据进行摘要包括利用安全散列算法对上述存储单元中的数据进行散列,从而提供上述存储单元中数据的压缩表示。
6.如权利要求1的方法,其中上述存储单元包括存储段和存储区域中的一个,且其中所述数据结构包括段数据结构和区域数据结构中的一个。
7.如权利要求1的方法,其中上述对数据进行摘要由上述指令来执行。
8.如权利要求1的方法,其中上述数据结构包括多个条目,且其中上述对数据进行摘要进一步包括利用索引来获得与上述将要摘要的存储单元相关的条目。
9.如权利要求1的方法,其中上述存储单元包括存储段,所述存储段包括多个存储页。
10.如权利要求1的方法,其中上述存储单元包括存储区域,所述存储区域包括多个存储段,存储段包括多个存储页。
11.如权利要求1的方法,其中上述指定包括指定多个存储单元,且上述摘要包括对该多个存储单元进行摘要并将摘要数据存储在第二个较小的存储单元中。
12.如权利要求11的方法,其中上述对数据进行摘要包括用于对上述多个存储单元进行摘要的链接操作。
13.如权利要求12的方法,其中将被摘要的数据是消息,上述存储单元分为块,且上述对数据进行摘要包括处理完整的块,且在处理所有完整的块之后,填充上述指定存储器的剩余部分。
14.如权利要求1的方法,其中上述存储器包括虚拟存储器。
15.如权利要求1的方法,其中上述指令以硬件、固件和软件中的至少一种来实现。
16.如权利要求1的方法,其中上述指令由仿真该指令的体系结构的处理单元来执行,该指令的所述体系结构不同于该处理单元的体系结构。
17.一种用于对计算环境的存储器进行摘要的系统,所述系统包括用于执行任一前述方法权利要求的步骤的装置。
18.一种计算机程序产品,包括至少一个计算机可用介质,其具有用于执行任一前述方法权利要求的方法的计算机可读程序代码。
全文摘要
本发明公开了一种用于对计算环境的存储器进行摘要的方法,其中通过指令指定将要摘要的存储单元。然后,对该存储单元中的数据进行摘要。
文档编号H04L9/32GK1799024SQ200480012875
公开日2006年7月5日 申请日期2004年5月4日 优先权日2003年5月12日
发明者S·伦德瓦尔, R·史密斯, P·C-C·耶 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1