(19)中华人民共和国国家知识产权局

(12)发明专利

(10)【授权公告号】CN101911016B
(45)【授权公告日】20140514

(21)【申请号】200980101766.6
(22)【申请日】20090107
(30)【优先权数据】11/972,714_20080111_US
(73)【专利权人】 国际商业机器公司 ; 【地址】 美国纽约 ;
(72)【发明人】 D·格雷纳 ; T·斯莱格尔 ; C·小盖尼 ;
(74)【专利代理机构】北京市中咨律师事务所 11247【代理人】于静 ; 杨晓光 ;
(51)【Int.CI.】 G06F 9/32 (2006.01) ; G06F 9/30 (2006.01) ;
(56)【对比文件】IBM Corporation.IBM System/370 Principles of Operation.《IBM System/370 Principles of Operation》.IBM Corporation,1987,7-19.【审查员】詹芊芊

(54)【发明名称】计算机系统和操作计算机的方法
(57)【摘要】本发明涉及一种用于执行相对指令的方法、系统和程序产品,当执行所述执行相对指令时提取和执行相对地址处的目标指令,于是将处理返回至在所述执行相对指令之后的下一指令。通过将所述程序计数器的值与符号扩展即时字段相加来形成相对地址。可选地,在执行之前,通过对比特与目标指令的预定比特进行或操作的执行来修改所提取的目标指令。

【权利要求书】


1.一种操作计算机的方法,包括:

在程序计数器指定的地址处提取程序中的执行机器指令,所述执行机器指令是针对计算机架构而定义的,其中所述执行机器指令包括操作码字段和第一寄存器字段,由两个半字或三个半字组成;

响应于所述执行机器指令由三个半字组成,执行所述执行机器指令,其中,所述执行机器指令包括包括指定半字数量的有符号值的有符号即时字段,不指定目标指令的奇地址,所述执行所述执行机器指令包括:

从一位置获得由所述程序计数器指定的地址;

将由所述程序计数器指定的地址的半字寻址部分与所述有符号值算术相加,以确定第一目标指令的第一地址,其中第一地址指定存储器中从执行机器指令的位置偏移由有符号值指定的数量的半字的位置,该半字寻址部分用于寻址存储器的半字;

在所确定的第一地址处提取所述第一目标指令,所述第一目标指令包括目标指令比特8-15,所述第一目标指令包括一个半字、两个半字或三个半字中的任一个;

执行所述第一目标指令;

响应于所述执行机器指令由两个半字组成,执行所述执行机器指令,其中,所述执行机器指令进一步包括位移(D)字段和基础地址(B)字段,基础地址字段用于指定具有基础地址值的基础地址寄存器,其中执行机器指令被配置得响应于指定目标指令的奇地址而引起说明异常,所述执行所述执行机器指令包括:

将基础地址值算术相加到位移字段以生成第二目标指令的第二地址,其中第二地址指定一个半字存储器位置;

在所确定的地址处提取所述第二目标指令,所述第二目标指令包括目标指令比特8-15,所述第二目标指令包括一个半字、两个半字或三个半字中的任一个;

执行所述第二目标指令;以及

根据所述执行机器指令的大小增加所述程序计数器值;以及

在由增加的程序计数器值所指定的指令地址处继续所述程序的执行。

2.根据权利要求1所述的方法,其中所述程序计数器包括第一数量比特的程序状态字PSW的程序计数器值,其中所述有符号即时字段包括指定第二数量半字的有符号值,其中所述有符号即时字段包括第二数量比特的比较相对指令;其中所述第二数量小于所述第一数量,其中所述位置没有由所述比较相对指令明确标识。

3.根据权利要求1所述的方法,其中所述程序计数器包括第一数量比特的程序状态字PSW的程序计数器值,其中所述有符号即时字段包括指定第二数量半字的有符号值,其中所述有符号即时字段包括第二数量比特的比较相对指令,所述第二数量通过所述操作码指定,其中所述第一数量为64,其中所述位置没有由所述比较相对指令明确标识。

4.根据权利要求1所述的方法,其中,响应于所述第一寄存器字段大于0,获得所述目标指令,包括:

获得与所述第一寄存器字段关联的第一寄存器值的比特56至63;

执行所提取的目标指令的比特8-15与所获得的比特56至63的逻辑或操作,以形成结果,其中要执行的所述目标指令包括所述结果的值而非所提取的目标指令的比特8-15的值。

5.根据权利要求1所述的方法,其中即使当所述程序处于主要空间、次要空间或访问寄存器模式中的任一个时,所述目标指令也从主要空间提取。

6.根据权利要求2所述的方法,其中通过替代计算机架构的中央处理单元来提取和执行针对所述计算机架构而定义的所述执行机器指令,

其中所述方法还包括,解释所述执行机器指令以识别用于仿真所述执行机器指令的操作的预定软件例程;以及

其中执行所述执行机器指令包括,执行所述预定软件例程以实施用于执行所述执行机器指令的方法的步骤。

7.一种计算机系统,包括:

用于在程序计数器指定的地址处提取程序中的执行机器指令的装置,所述执行机器指令是针对计算机架构而定义的,其中所述执行机器指令包括操作码字段和第一寄存器字段,由两个半字或三个半字组成;

用于响应于所述执行机器指令由三个半字组成,执行所述执行机器指令的装置,其中,所述执行机器指令包括包括指定半字数量的有符号值的有符号即时字段,不指定目标指令的奇地址,所述执行所述执行机器指令的装置包括:

用于从一位置获得由所述程序计数器指定的地址的装置;

用于将由所述程序计数器指定的地址的半字寻址部分与所述有符号值算术相加,以确定第一目标指令的第一地址的装置,其中第一地址指定存储器中从执行机器指令的位置偏移由有符号值指定的数量的半字的位置,该半字寻址部分用于寻址存储器的半字;

用于在所确定的第一地址处提取所述第一目标指令的装置,所述第一目标指令包括目标指令比特8-15,所述第一目标指令包括一个半字、两个半字或三个半字中的任一个;

用于执行所述第一目标指令的装置;

用于响应于所述执行机器指令由两个半字组成,执行所述执行机器指令的装置,其中,所述执行机器指令进一步包括位移(D)字段和基础地址(B)字段,基础地址字段用于指定具有基础地址值的基础地址寄存器,其中执行机器指令被配置得响应于指定目标指令的奇地址而引起说明异常,所述执行所述执行机器指令的装置包括:

用于将基础地址值算术相加到位移字段以生成第二目标指令的第二地址的装置,其中第二地址指定一个半字存储器位置;

用于在所确定的地址处提取所述第二目标指令的装置,所述第二目标指令包括目标指令比特8-15,所述第二目标指令包括一个半字、两个半字或三个半字中的任一个;

用于执行所述第二目标指令的装置;以及

用于根据所述执行机器指令的大小增加所述程序计数器值的装置;以及

用于在由增加的程序计数器值所指定的指令地址处继续所述程序的执行的装置。

8.根据权利要求7所述的系统,其中所述程序计数器包括第一数量比特的程序状态字PSW的程序计数器值,其中所述有符号即时字段包括指定第二数量半字的有符号值,其中所述有符号即时字段包括第二数量比特的比较相对指令;其中所述第二数量小于所述第一数量,其中所述位置没有由所述比较相对指令明确标识。

9.根据权利要求7所述的系统,其中所述程序计数器包括第一数量比特的程序状态字PSW的程序计数器值,其中所述有符号即时字段包括指定第二数量半字的有符号值,其中所述有符号即时字段包括第二数量比特的比较相对指令,所述第二数量通过所述操作码指定,其中所述第一数量为64,其中所述位置没有由所述比较相对指令明确标识。

10.根据权利要求7所述的系统,其中,还包括用于响应于所述第一寄存器字段大于0,获得所述目标指令的装置,包括:

用于获得与所述第一寄存器字段关联的第一寄存器值的比特56至63的装置;

用于执行所提取的目标指令的比特8-15与所获得的比特56至63的逻辑或操作,以形成结果的装置,其中要执行的所述目标指令包括所述结果的值而非所提取的目标指令的比特8-15的值。

11.根据权利要求7所述的系统,其中即使当所述程序处于主要空间、次要空间或访问寄存器模式中的任一个时,所述目标指令也从主要空间提取。

12.根据权利要求8所述的系统,其中通过替代计算机架构的中央处理单元来提取和执行针对所述计算机架构而定义的所述执行机器指令,

其中所述系统还包括,用于解释所述执行机器指令以识别用于仿真所述执行机器指令的操作的预定软件例程的装置;以及

其中所述用于执行所述执行机器指令的装置包括,用于执行所述预定软件例程以实施用于执行所述执行机器指令的方法的步骤的装置。

【说明书】


计算机系统和操作计算机的方法

【0001】技术领域

【0002】本发明涉及一种计算机系统,更具体地,涉及计算机系统处理器指令功能性。

【0003】背景技术

【0004】商标:IBM 是美国纽约Armonk的国际商业机器公司的注册商标,S/390,Z900和Z990以及其他产品名称可以是国际商业机器公司或其他公司的注册商标或产品名称。

【0005】以在二十世纪六十年代已知的IBM 系统360的机器开始到现在,IBM已经开发出特定架构,其因为计算系统的本质属性而已知为“大型机”(mainframe),其操作原理通过描述指令来描述机器的架构,当该指令的“大型机”实施时可以执行该指令,由于对改进由“大型机”表示的计算机器的状态的显著贡献而由IBM发明人发明并采用该指令,正如许多年来描述的在IBM操作原理中得到的结论的显著贡献。2007年4月公布的IBM z/Architecture 操作原理第六版已经成为标准公布的参考SA22-7832-05,并结合至IBM z9 主机服务器。SA22-7832-05的公开、IBM Z/Architecture 操作原理的全部内容通过引用合并于此。

【0006】参考图1A,描述了现有技术中的主机计算机系统50的代表性组件。组件的其他配置也可以使用在计算机系统中,其在现有技术中是公知的。代表性主机计算机50包括一个或多个CPU 1,其与主存储器(计算机存储器2)以及到存储设备11和网络10的I/O接口进行通信,以用于与其他计算机或SAN等进行通信。CPU 1兼容于具有架构指令集和架构功能性的架构。CPU 1可以具有动态地址转换(DAT)3,以将程序地址(虚拟地址)改变为存储器的真实地址。DAT典型地包括转换后备缓冲器 (TLB)7,用于缓存转换从而之后对计算机存储器2的块的访问无需地址转换的延迟。典型地缓存9在计算机存储器2和处理器1之间使用。缓存9可以是分层级的,其具有对多于一个CPU可用的大缓存以及在该大缓存和每个CPU之间的较小的、较快的(较低层级)缓存。在一些实施例中,该较低层级的缓存被划分以提供用于指令提取和数据访问的各个低层级缓存。在一个实施例中,通过指令提取单元经由缓存9从存储器2提取指令。该指令在指令解码单元(6)进行解码并被派发(在一些实施例中使用其他指令)到指令执行单元8。典型地,使用几个执行单元8,例如算术执行单元、浮点执行单元和分支指令执行单元。该指令通过执行单元来执行,来自指令的访问操作数指定所需的寄存器和存储器。如果要从存储器2访问(加载或存储)操作数,则加载存储器单元5典型地在正在执行的指令的控制下处理该访问。可以在硬件电路、内部微码(固件)或两者的结合中执行指令。

【0007】在图1B中,提供了现有技术的仿真主机计算机系统21的实例,其仿真主机架构的主机计算机系统50。在仿真的主机计算机系统21中,主机处理器(CPU)2是仿真的主机处理器(或虚拟主机处理器),包括仿真处理器27,其具有与主机计算机50的处理器1的不同的原生指令集架构。仿真的主机计算机21具有仿真处理器27可访问的存储器22。在示例性实施例中,存储器27分为主机计算机存储器2部分和仿真例程23部分。根据主机计算机架构,对于仿真的主机计算机21的程序,主机计算机存储器2是可用的。仿真处理器27执行并非仿真的处理器1的架构的架构指令集的原生指令,所述原生指令是从仿真例程存储器23获得的,以及可通过采用在Sequence&Access/Decode例程(其可解码被访问的主机指令,以确定用于仿真所访问的主机指令的功能的原生指令执行例程)获得的一个或多个指令来访问来自主机计算机存储器2中的程序的、用于执行的主机指令。可以通过架构化的工具例程来仿真针对主机计算机系统50的架构而定义的其他工具,包括例如通用寄存器、控制寄存器、动态地址转换和I/O子系统支持和处理器缓存的功能。仿真例程还可使用仿真处理器27中可 用的功能(例如通用寄存器和虚拟地址动态转换)以改进仿真例程的性能。还可以提供专用硬件以及卸载引擎以帮助处理器27仿真主机计算机50的功能。

【0008】在大型机中,架构机器指令由程序员使用,通常现在“C”程序员经常利用编辑器应用。存储在存储器介质中的这些指令可在z/ArchitectureIBM服务器中,或者可选择地,在执行其他架构的机器中原生地执行。可在现有的和将来的IBM大型机服务器以及其他IBM的机器(例如,pSeries 服务器和xSeries 服务器)中仿真它们。可使用由IBM Intel AMDTM、太阳微系统和其它制造的硬件在各种机器中运行Linux的的机器中执行它们。除了在Z/Architecture 下执行该硬件,也可使用Linux以及使用由Hercules、UMX、FSI(基础软件公司)或平台解决方案公司(PSI)提供的仿真的机器,其中一般而言,以仿真模式来进行执行。在仿真模式中,仿真软件由原生处理器来执行以对仿真处理器的架构进行仿真。

【0009】原生处理器27典型地执行仿真软件23,包括固件或原生操作系统以执行仿真处理器的仿真。仿真软件23负责提取以及执行仿真处理器架构的指令。仿真软件23维持仿真程序计数器以跟踪指令边界。仿真软件23可以一次提取一个或多个仿真机器指令,并通过原生处理器27将所述一个或多个仿真机器指令转换为用于执行的相应的原生机器指令组。这些转换的指令可被缓存,从而可实现更快速的转换。然而,仿真软件必须维持仿真处理器架构的架构规则,以便确保对于仿真处理器而写入的操作系统和应用正确操作。此外,仿真软件必须提供由仿真处理器1架构识别的资源,该架构包括但不限于控制寄存器、通用寄存器、浮点寄存器、动态地址转换功能(包括分段表格和页面表格)、例如中断机制、上下文转换机器、时间日期(TOD)时钟和到I/O子系统的架构接口,从而指定运行在仿真处理器上的操作系统或应用程序可以运行在具有仿真软件的原生处理器上。

【0010】解码被仿真的特定指令,调用来执行各个指令的功能的子例程。在理解了优选实施例的描述后本领域技术人员将理解,例如,在“C”子例程、 或驱动器、或某些其他针对特定硬件提供驱动器的方法中实现对于仿真处理器1的功能进行仿真的仿真软件功能23。各种软件和硬件仿真专利包括但不限于Beausoleil等的题为“Multiprocessor for hardware emulation″的US5551013;以及Scalzi等的题为“Preprocessing of stored target routinesfor emulating incompatible instructions on a target processor”的US6009261;以及Davidian等的题为“Decoding guest instruction to directlyaccess emulation routines that emulate the guest instructions”的US55574873;以及Gorishek等的题为“Symmetrical multiprocessing busand chipset used for coprocessor support allowing nonnative code to run ina system”的US6308255;以及Lethin等的题为“Dynamic optimizing objectcode translator for architecture emulation and dynantic optimizing objectcode translation method”的US6463582;以及Eric Traut的题为“Methodfor emulating guest instructions on a host computer through dynanticrecompilation of host instructions”的US5790825以及许多其他专利例示各种已知方法来实现对设计来用于对于本领域技术人员是可用的目标机器的不同机器的指令格式的仿真,以及由上述人员使用的财务软件技术。

【0011】发明内容

【0012】现有技术提供了一种执行指令,当执行时,从存储器提取目标指令,并在进行下一指令之前执行该目标指令。现有技术的执行指令要求使用寄存器去保持与所述目标指令关联的地址,程序员不得不使用所述寄存器提供所述目标指令的地址。所述目标指令的地址是指令地址而非数据地址。通过使用相对地址的本发明解决了这些或其他缺陷,以便在相对于所述执行指令的程序计数器地址的正或负的位移处找到所述目标地址。

【0013】在实施例中,通过程序中的执行机器指令的程序计数器来指定地址,所述执行机器指令是针对计算机架构而定义的,其中所述执行机器指令包括操作码字段和第一寄存器字段和有符号即时字段,所述有符号即时字段包括指定半字数量的有符号值。当执行所述执行机器指令时,机器从一位 置获得由所述程序计数器指定的地址,并将由所述程序计数器指定的地址与所述有符号值算术相加,以确定目标指令的地址。在所确定的地址处提取所述目标指令,所述目标指令包括目标指令比特8-15,所述目标指令包括一个半字、两个半字或三个半字中的任一个。当提取并执行所述目标指令时,根据所述执行指令的大小来增加所述程序计数器值,并在由增加的程序值指定的指令地址处继续执行程序。

【0014】在实施例中,所述程序计数器包括第一数量比特的程序状态字(PSW)的程序计数器值,其中所述有符号即时字段包括指定第二数量半字的有符号值,其中所述有符号即时字段包括第二数量比特的比较相对指令;其中所述第二数量小于所述第一数量,其中所述位置没有由所述比较相对指令明确标识。

【0015】在实施例中,所述程序计数器包括第一数量比特的程序状态字(PSW)的程序计数器值,其中所述有符号即时字段包括指定第二数量半字的有符号值,其中所述有符号即时字段包括第二数量比特的所述比较相对指令;所述第二数量通过所述操作码指定,其中所述第一数量为取决于当前寻址模式的24、31或64,其中所述位置没有由所述比较相对指令明确标识。

【0016】在实施例中,响应于所述第一寄存器字段大于0,获得所述目标指令还包括获得与所述第一寄存器字段关联的第一寄存器值的比特56至63,并执行所提取的目标指令的比特8-15与所获得的比特56至63的逻辑或操作,以形成结果,其中要执行的所述目标指令包括所述结果的值而非所提取的目标指令的比特8-15的值。

【0017】在实施例中,即使当所述程序处于主要空间、次要空间或访问寄存器模式,也从主要空间提取所述目标指令。

【0018】本发明旨在提供与现有架构一致的新的指令功能,其解除了对诸如通用寄存器之类的架构资源的依赖,改善了采用该新指令的软件版本的功能性和性能。

【0019】附图说明

【0020】在总结说明书的权利要求中具体指出并清楚声明了本发明的主题。通过以下结合附图进行的详细描述可以显见本发明的前述和其他目的,特征和优势,图中:

【0021】图1A是示出现有技术的主机计算机系统的实例的图;

【0022】图1B是示出现有技术的仿真主机计算机系统的实例的图;

【0023】图1C是示出现有技术的计算机系统的实例的图;

【0024】图2是示出现有技术的计算机网络的实例的图;

【0025】图3是示出现有技术的计算机系统的元件的图;

【0026】图4A-4C示出现有技术的计算机系统的元件;

【0027】图5A-5F示出计算机系统的机器指令格式;

【0028】图6示出本发明的实施例的指令格式;

【0029】图7示出本发明的实施例的一个方面的流程;

【0030】图8示出本发明的实施例的另外的方面的流程。

【0031】具体实施方式

【0032】在实施例中,本发明可以通过软件(有时称为许可的内部代码、固件、微码、毫码(Milli-code)、微微码(Pico-code)等,任何一个将兼容本发明)来实施。参照图1A,实施本发明的软件程序代码典型地由也称为系统50的CPU(中央处理单元)1的处理器从长时存储介质(例如CD-ROM驱动器、盒带驱动器或硬盘驱动器)7来存取。软件程序代码可包括在与数据处理系统一起使用的任何各种已知介质上,例如盒带、硬盘驱动器或CD-ROM。该代码可以分布在这样的介质上,或从计算机存储器2或网络10上的一个计算机系统的存储器分发给用户,到其他计算机系统以由这样的其他系统的用户使用。

【0033】可替换地,程序代码可以包括在存储器2中,并由处理器1使用处理器总线来存取。这样的程序代码包括控制各种计算机组件以及一个或多个应用程序的功能和交互的操作系统。程序代码通常从密集存储介质11到高速存储器2进行分页,其中由处理器1处理是可用的。用于将软件程序代 码包括在存储器中或物理介质的技术和方法、和/或将软件代码经由网络进行分发的技术和方法是已知的,将不在这里进一步讨论。程序代码当在可见介质(包括但不限于电子存储器模块(RAM)、闪速存储器、压缩盘(CD)、DVD、磁带等)上创建并存储时,通常称之为“计算机程序产品”。计算机程序产品介质典型地通过优选在计算机系统中的处理电路可读以由该处理电路执行。

【0034】图1C例示了在其中实现本发明的代表性工作站或服务器硬件系统。图1C的系统100包括代表性的计算机系统101(例如个人计算机、工作站或服务器),包括可选外围设备。根据已知技术,工作站101包括一个或多个处理器106和采用来连接和支持处理器106和系统101的其他组件之间的通信的总线。总线将处理器连接到存储器105和长时存储器107,其例如可包括硬盘驱动器(例如包括磁介质、CD、DVD和闪速存储器中的任何一个)或盒带驱动器。系统101还可包括用户接口适配器,其经由总线将微处理器106连接至一个或多个接口设备,例如键盘104、鼠标103、打印机/扫描仪110和/或其他接口设备,其可以是任何接口设备,例如触摸屏、数字化输入板等。总线还将显示器设备102(例如LCD屏幕或监视器)经由显示器适配器连接至微处理器106。

【0035】系统101可通过能够与网络109通信的网络适配器与其他计算机或计算机的网络通信。实例性网络适配器是通信信道,令牌环、以太网或调制解调器。可选择地,工作站101可使用无线接口(例如CDPD(蜂窝数字分组数据))进行通信。工作站可与局域网(LAN)或广域网(WAN)中的这样的其他计算机关联,或者工作站可以是与另外的计算机中的客户/服务器配置中的客户等。所有这些配置以及适当的通信硬件和软件都是已知技术。

【0036】图2例示了其中可实现本发明的数据处理网络200。数据处理网络200可包括多个单独的网络(例如无线网络和有线网络),其每个可包括多个单独的工作站101、201、202、203和204。另外,本领域技术人员将理解,可以包括一个或多个LAN,其中LAN可包括多个与主机处理器耦接 的智能工作站。

【0037】仍然参考图2,网络还可包括大型机或大型服务器(例如网关计算机(客户服务器206)或应用服务器(远程服务器208,其可访问数据库以及也可由工作站205直接访问))。网关计算机206服务为进入每个网络207的点。当一个组网协议与另一连接个时需要网关。网关206可优选地通过通信链路耦接至另一网络(例如因特网207)。网关206还可以使用通信链路直接耦接至一个或多个工作站101、201、202、203和204。网关计算机可使用从IBM公司可获得的IBM eServerTM zSerics z9 Server来实施。

【0038】实施本发明的软件编程代码典型地由系统101的处理器106从长时存储介质107(例如CD-ROM驱动器或硬盘驱动器)存取。软件编程代码可包括在任何各种已知介质(例如盘、硬盘驱动器或CD-ROM)上以与数据处理系统一起使用。代码可分布在这样的介质上,或者可从网络上的一个计算机系统的存储器或存储设备分发给用户210、211,到其他计算机系统以由这样的其他系统的用户使用。

【0039】可选地,编程代码111可包括在存储器105中并由处理器106使用处理器总线存取。这样的编程代码包括控制各种计算机组件以及一个或多个应用程序112的功能和交互的操作系统。程序代码通常从密集存储介质107到高速存储器105进行分页,其中由处理器1处理是可用的。用于将软件程序代码包括在存储器中或物理介质的技术和方法、和/或将软件代码经由网络进行分发的技术和方法是已知的,将不在这里进一步讨论。程序代码当在可见介质(包括但不限于电子存储器模块(RAM)、闪速存储器、压缩盘(CD)、DVD、磁带等)上创建并存储时,通常称之为“计算机程序产品”。计算机程序产品介质典型地通过优选在计算机系统中的处理电路可读以由该处理电路执行。

【0040】最容易由处理器(通常比处理器的其他缓存更快更小)获得的缓存是最低的缓存(L1或级1),主存储器是最高级别的缓存(如果有3级则是L3)。最低级别的缓存通常划分为保持要执行的机器指令的指令缓存(I- 缓存)以及保持数据操作数的数据缓存(D-缓存)。

【0041】参照图3,对于处理器106描述了示例性处理器实施例。典型地,使用缓存303的一个或多个级别来缓冲存储器块以便改进处理器性能。缓冲303是保持最可能使用的存储器数据的缓存线路的高速缓冲器。典型的缓存线路是64、128或256字节的存储器数据。各个缓存通常被使用来缓存指令而不是数据。通常通过本领域已知的各种“监听”算法来提供缓存一致性(存储器和缓存中的线路的副本的同步)。处理器系统的主存储器105通常称为缓存。在具有4级缓存303的处理器系统中,主存储器105有时称为第5级(L5)缓存,既然通常其更快并仅保持计算机系统可用的非易失性存储器(DASD、盒带等)的一部分。主存储器105“缓存”由操作系统从主存储器页入的和页出的数据页面。

【0042】程序计数器(指令计数器)311跟踪要执行的当前指令的地址。在z/Architecture处理器中的程序计数器是64位,并可以截断为31或24位以支持先前的寻址局限。程序计数器典型地包括在计算机的PSW(程序状态字)中,以便其在上下文切换期间持续。因此,处理中的程序(具有程序计数器值)可例如由操作系统(从程序环境到操作系统环境的上下文切换)来中断。程序的PSW在程序不激活时维持程序计数器值,在操作系统执行时使用操作系统的程序计数器(在PSW中)。典型地,程序计数器增加等于当前指令的字节数的量。RISC(缩减的指令集计算)指令典型地是固定长度,而CISC(复杂指令集计算)指令典型地是可变长度。IBMz/Architecture的指令是具有长度为2、4、6字节的CISC指令。程序计数器311通过例如上下文切换操作或分支指令的分支选择操作来修改。在上下文切换操作中,当前程序计数器值与其他关于执行的程序的状态信息(例如条件码)一起存储在程序状态字(PSW)中,加载新的程序计数器值来指向要执行的新的程序模块的指令。通过将分支指令的结果加载入程序计数器311,执行分支选择操作以便允许程序进行判断或在程序中进行循环。

【0043】典型地,使用指令提取单元305来代表处理器106提取指令。提取单元提取“下一顺序指令”、分支选择指令的目标指令、或上下文切换后的 程序的第一指令。现代的指令提取单元通常基于可能使用预提取指令的概率使用预提取技术来推测性预提取指令。例如,提取单元可提取16字节的指令,其包括下一顺序指令和附加的字节的另外顺序指令。

【0044】提取的指令于是由处理器106来执行。在实施例中,提取的指令传输至提取单元的派发单元306。该派发单元解码该指令并将关于解码的指令的信息转发至适当的单元307、308、310。执行单元307典型地从指令提取单元305接收关于解码的算术指令的信息,并基于该指令的操作码来执行操作数的算术操作。优选地从存储器105、结构寄存器309或从要执行的指令的即时字段(immediate field)将操作数提供给执行单元307。当存储执行的结果时,可存储在存储器105、或寄存器309、或其他机器硬件(例如控制寄存器、PSW寄存器等)中。

【0045】处理器106典型地具有用于执行指令的功能的一个或多个执行单元307、308、310。参照图4A,执行单元307可利用接口逻辑407与结构通用寄存器309、解码/派发单元306、负载存储单元310和其它处理器单元401通信。执行单元307可使用若干寄存器电路403、404、405以保持关于算术逻辑单元(ALU)402将操作的信息。ALU执行诸如加、减、乘、除以及逻辑函数(例如与、或、异或、旋转和移位)的算术操作。优选地,ALU支持设计相关的专用操作。其他电路可提供其他结构功能408,例如包括条件码和恢复支持逻辑。典型地ALU操作的结果保持在输出寄存器电路406中,其可将该结果转发至各种其他处理功能。存在许多处理器单元的设置,本说明书仅旨在提供一个实施例的代表性理解。

【0046】例如,ADD加指令将在具有算术和逻辑功能的执行单元307中执行,而浮点指令将在具有专用浮点性能的例如浮点执行单元中执行。优选地,执行单元对由指令通过执行操作数的操作码定义功能识别的操作数进行操作。例如,可以通过执行单元307对由指令的寄存器字段识别的两个寄存器309中发现的操作数进行操作而执行ADD指令。

【0047】执行单元307执行对于两个操作数的算术加法,并将结果存储在第三操作数中,第三操作数可以是第三寄存器或两个源寄存器中的一个。执行 单元优选地使用算术逻辑单元(ALU)402,其能够执行各种逻辑功能(例如移位、旋转、与、或和异或)以及各种算术功能(包括任意加、减、乘和除)。一些ALU 402被设计用于缩放操作,一些用于浮点。数据可取决于架构是大尾(其中在最高字节地址处是最低有效字节)或小尾(在最低字节地址处是最高有效字节)。IBM z/Architecture是大尾。符号字段可以是符号和量级,1的补码或2的补码取决于架构。既然2的补码中的负数值或正数值仅需要在ALU中进行加法,所以ALU不需要设计减法性能,因此2的补码数是有利的,。数通常以速记来描述,其中12位字段定义4096字节块的地址,并通常描述为例如4K字节(千字节)块。

【0048】参照图4B,用于执行分支指令的分支指令信息通常发送到分支单元308,其经常在其他条件操作完成之前使用分支预测算法(例如分支历史表432)来预测该分支的结果。在条件操作完成之前将提取当前分支指令的目标并推测地执行。当条件操作完成时,推测执行的分支指令基于条件操作的条件以及推测的结果或完成或丢弃。如果条件代码满足分支指令的要求,则典型的分支指令可以检测条件代码和到目标地址的分支,可基于包括在寄存器字段发现的数的一些数或例如该指令的即时字段来计算目标地址。分支单元308可使用具有多个输入寄存器电路427、428、429和输出寄存器电路430的ALU 426。分支单元308可与例如通用寄存器309、解码派发单元306或其他电路425进行通信。

【0049】一组指令的执行可因为各种原因而中断,例如包括由操作系统发起的上下文切换、导致上下文切换的程序异常或故障、导致上下文切换的I/O中断信号或多个程序(在多线程环境下)的多线程活动。优选地上下文切换行为存储关于当前执行的程序的状态信息,然后加载关于调用的其他程序的状态信息。状态信息可存储在例如硬件寄存器或存储器中。状态信息优选地包括指向要执行的下一指令的程序计数器值、条件代码、存储器转换信息和架构寄存器内容。上下文切换活动可通过硬件电路、应用程序、操作系统程序或固件代码(微码、微微码或许可的内部代码(LIC))单独或组合来执行。

【0050】处理器根据指令定义方法访问操作数。该指令可使用指令的一部分的值来提供即时操作数,可提供明确指向通用寄存器或专用寄存器(例如浮点寄存器)的一个或多个寄存器字段。该指令可使用由作为操作数的操作码字段识别的隐含寄存器。该指令可使用操作数的存储器位置。如z/Architecture长位移功能所例示的那样,操作数的存储器位置可由寄存器、即时字段、或寄存器和即时字段的组合来提供,其中指令定义基寄存器、索引寄存器和即时字段(位移字段),他们被加到一起以提供例如存储器中的操作数的地址。如果没有指定,则在此位置典型地意味着在主存储器(主存储设备)中的位置。

【0051】参考图4C,处理器使用加载/存储单元310访问存储器。该加载/存储器单元310可通过获得存储器303中的目标操作数的地址以及在寄存器309中或其他存储器303位置中加载操作数来执行加载操作,或可通过获得存储器303中的目标操作数的地址以及将从寄存器309或另外的存储器303位置中获得的数据存储在存储器303中的目标操作数位置来执行存储操作。加载/存储单元310可以是推测的并可以相对于指令序列是无序的顺序访问存储器,然而,加载/存储单元310必须对顺序执行的程序维持指令的显现。加载/存储单元310可与通用寄存器309、解码/派发单元306、缓存/存储器接口303或其他元件455通信,并包括各种寄存器电路、ALU 458和控制逻辑463以计算存储地址并提供流水线以保持有序操作。一些操作可以是无序的,但是加载/存储单元提供正如在本领域已知的那样的使无序操作对于程序显现为有序执行。

【0052】优选地,应用程序“看到”的地址经常称为虚拟地址。虚拟地址有时称为“逻辑地址”或“有效地址”。这些虚拟地址是虚拟的,因为其通过各种动态地址转换(DAT)312技术转换中的一个重定向到物理存储器位置,该技术包括但不限于仅使用偏移值对虚拟地址加前缀、通过一个或多个转换表转换虚拟地址,该转换表优选地包括至少一个单独的段表和页面表或其组合,优选地,段表具有指向该页面表的入口。在z/Architecure中,提供转换的层级,其包括区域第一表格、区域第二表格、区域第三表格、 段表和可选页面表。通常通过使用转换后备缓冲器(TLB)来改进地址转换的性能,该TLB包括将虚拟地址映射至关联的物理存储器位置的表项。当DAT 312使用转换表格转换虚拟地址时创建表项。于是之后使用虚拟地址可使用快速TLB的表项而非慢顺序转换表格访问。可由包括LRU(近来最少使用)的各种替代算法来管理TLB内容。

【0053】在处理器是多处理器系统中的处理器的情况下,每个处理器负责为了一致性而保持共享的资源(例如I/O、缓存、TLB和存储器)互锁。典型地,在维持缓存一致性中将使用“监听”技术。在监听环境中,每个缓存线路可被标记为共享状态、专用状态、改变状态、无效状态等中的任一状态以便于共享。

【0054】I/O单元304向处理器提供附到外围设备(例如包括盒带、盘、打印机、显示器和网络)的装置。I/O单元经常由软件驱动器提供给计算机程序。在诸如来自IBM的z/Series的大型机中,信道适配器和开放系统适配器是提供操作系统和外围设备之间的通信的大型机的I/O单元。

【0055】如下来自z/Architectudre操作原理的以下描述说明了计算机系统的架构图:

【0056】存储器:

【0057】计算机系统包括主存储器中的信息,以及寻址、保护、引用和更改记录。一些寻址的特征包括地址的格式,地址空间的概念,地址的各种类型,以及将地址的一种类型转换为地址的另一类型的方式。一些主存储器包括固定分配的存储位置。主存储器给系统提供直接可寻址的数据快速访问的系统。在处理数据和程序前都必须将它们加载(从输入设备)到主存储器中。

【0058】主存储器可包括一个或者多个更小、更快速访问的缓冲存储器,有时也称为缓存。缓存典型地在物理上与CPU或者I/O处理器相关联。除了性能之外,物理结构的效果和不同存储介质的使用对程序来说一般是不可观察的。

【0059】可为指令和数据操作数保持分离的缓存。将缓存中的信息保持在被称 为缓存块或者缓存行(或简称为行)的整数边界上的连续字节中。一个模型可提供EXTRACT CACHE ATTRIBUTE指令,其返回字节的缓存行的大小。一个模型还可提供PREFETCH DATA和PREFETCH DATARELATIVE LONG指令,其影响将存储器的预取到数据或者指令缓存中或者从缓存中释放数据。

【0060】存储器可视为长的水平的比特串。对于大部分操作,按照从左向右的顺序访问存储器。将比特串再分为8个比特的单元。8个比特的单元称为字节,其中该字节是所有信息格式的基本结构单元。存储器中每个比特的位置由唯一的非负整数来标识,其中该非负整数为比特位置的地址或者,简单地说,比特地址。相邻比特位置具有连续的地址,在左侧从0开始并按照从左向右的顺序进行处理。地址是无符号的二进制整数,为24、31或者64比特。

【0061】每次在存储器和CPU或者信道子系统之间传送一个比特、或者一组比特的信息。除非特别规定,存储器中的一组比特是由该组最左侧的字节寻址。该组中字节的数量被执行的操作暗示或者明确的规定。当用于CPU操作中时,一组比特称为字段。在每一组比特中,按照从左向右的顺序对比特进行编号。有时将最左侧的比特称为“高位”比特,将最右侧比特称为“低位”比特。然而,比特数量不是存储器地址。只有字节能够被寻址。为了操作存储器中字节的各比特,需要访问全部字节。从左到右,字节中的比特的编号从0到7。对于24比特地址,地址中的比特可编号为8-31或者40-63,对于31比特地址,地址中的比特可编号为1-31或者33-63;对于64比特地址它们编号为0-63。在多个字节的任意固定长度格式中,构成格式的比特从0开始顺序编号。为了错误检测的目的,更优选地为了纠错的目的,随同每个字节或者一组字节发送一个或者多个检测比特。这样的检测比特通过机器自动产生并不能直接被程序控制。存储器容量用字节数量来表示。当存储器操作数字段的长度由指令的操作码来暗示时,该字段具有固定长度,其可以是1、2、4、8或者16个字节。较大的字段意味着一些指令。当存储器操作数字段的长度不是暗示的而是明确确定的, 则字段具有可变长度。可变长度操作符可通过一个字节的增加来改变长度。当信息放置在存储器中时,即使到存储器的物理路径的宽度大于存储字段的长度,仅仅这些字节位置的内容被替换为包括在指定字段中的内容。

【0062】特定信息单元必须放置在存储器的整数边界上。当信息单元的存储地址是字节单元的长度的倍数时,边界被称为信息单元的整数。在整数边界上给2、4、8和16字节的字段特定的命名。半字是在两字节边界上两个连续字节的组,并且是指令的基本构成块。字是四字节边界上四个连续字节的组。双字是在八字节边界上八个连续字节的组。四字是在16字边界上16个连续字节的组。当存储器地址指定半字、字、双字和四字时,地址的二进制表示分别包括一个、两个、三个或者四个最右侧的0比特。指令必须是两字节的整数边界。大部分指令的存储器操作数不具有边界对齐要求。

【0063】在执行用于指令和数据操作数的分离的缓存的模型中,如果将程序存储到随后从中提取指令的缓存行中,无论所述存储是否改变随后提取的指令,可能会经历明显的延迟。

【0064】指令:

【0065】典型地,CPU的操作被存储器中的指令控制,所述指令每次按照存储器地址上升的顺序从左到右进行执行。顺序操作可由分支、加载PSW、中断、SIGNAL PROCESSOR(信号处理器)命令或者人工干预而发生变化。

【0066】优选地,指令包括两个主要部分:

【0067】·操作码(opcode),其指定要执行的操作

【0068】·可选的,参与的操作数的指定。

【0069】z/Architecture的指令格式如图5A-5F所示。指令可仅提供操作码501,或者提供操作码和各种字段,后者包括用于对寄存器或者存储器中的操作数进行定位的即时操作数或者寄存器区分符。操作码能够向硬件指示可使用的默认资源(操作数等),诸如一个或者多个通用寄存器(GPR)。操作数可分为3类:位于寄存器中的操作数,即时操作数,和存储器中的操作数。操作数可明确或者暗示地指定。寄存器操作数可位于通用的、浮点的、访问或控制寄存器中,其具有由操作码标识寄存器的类型。包括操作 数的寄存器通过识别指令中被称为R字段的4比特字段的寄存器来进行指定。对于一些指令,操作数位于默认指定的寄存器中,寄存器由操作码来暗示。即时操作数包括在指令中,并且包括即时操作数的8比特、16比特、32比特字段被称为I字段。存储器中的操作数可具有暗示的长度;可被比特掩码所指定;可被指令中被称为L字段的4比特或者8比特长度的说明所指定;或者具有由通用寄存器的内容所指定的长度。存储器中操作数的地址由将通用寄存器的内容用作地址的一部分的格式来指定。这样能够:

【0070】通过使用缩写的记号来指定完整的地址;

【0071】通过使用指令来进行地址操作,其中所述指令使用用于操作数的通用寄存器;

【0072】通过程序方式修改地址而不改变指令流;

【0073】通过直接使用从其它程序接收的地址来独立于数据区域的位置进行操作。

【0074】存储器所引用的地址可包括在由指令中的R字段指定的寄存器中,也可分别从指令中的B、X和D字段指定的基本地址、索引和位移进行计算。当CPU为访问寄存器模式时,除了用于指定地址,B字段或者R字段还可指定访问寄存器。为了描述指令的执行,优选地将操作数指定为第一和第二操作数,并且在一些情况下包括第三和第四操作数。一般来说,两个操作数参与指令执行,并且结果替换第一操作数。

【0075】指令在长度上为1个、2个或者3个半字,并且必然位于半字边界上的存储器中。参照图5A-5F所描述的指令格式,每个指令是25个基本格式中的一个:E 501,I 502,RI 503 504,RIE 505 551 552 553 554,RIL 506507,RIS 555,RR 510,RRE 511,RRF 512 513 514,RRS,RS 516 517,RSI 520,RSL 521,RSY 522 523,RX 524,RXE 525,RXF 526,RXY 527,S 530,SI 531,SIL 556,SIY 532,SS 533 534 535 536 537,SSE 541和SSF 542,其具有RRF的3个变型,RI,RIL,RS和RSY的2个变型,RIE和SS的5个变型。

【0076】一般说来,格式名称指示了参与操作的操作数的分类以及字段的一些 细节:

【0077】·RIS指示寄存器和即时操作以及存储器操作。

【0078】·RRS指示寄存器和寄存器操作以及存储器操作。

【0079】·SSL指示利用16比特的即时字段的存储器和即时操作。

【0080】在I、RR、RS、RSI、RX、SI和SS格式中,指令的第一字节包括操作码。在E、RRE、RRF、S、SIL和SSE格式中,指令的头两个字节包括操作码,除了在S格式的一些指令中,操作码仅在第一字节中。在RI和RIL格式中,操作码在指令的第一字节和比特位置12-15中。在RIE、RIS、RRS、RSL、RSY、RXE、RXF、RXY和SIY格式中,操作码在指令的第一字节和第6字节中。操作码的第一字节或者仅有字节的头两个比特指定指令的长度和格式,如下所述:

【0081】在RR、RRE、RRF、RRR、RX、RXE、RXF、RXY、RS、RSY、RSI、RI、RIE和RIL格式中,由R1字段指定的寄存器内容被称为第一操作数。有时将包括第一操作数的寄存器称为“第一操作数位置”,有时称为“寄存器R1”。在RR、RRE、RRF和RRR格式中,R2字段指定包括第二操作数的寄存器,并且R2字段可指定与R1字段相同的寄存器。在RRF、RXF、RS、RSY、RSI和RIE格式中,R3字段的使用依赖于指令。在RS和RSY格式中,R3字段替换为指定掩码的M3字段。R字段指定通用指令中的通用寄存器或者访问寄存器,控制指令中的通用寄存器,以及浮点指令中的浮点寄存器或者通用寄存器。对于通用寄存器和控制寄存器,根据指令,寄存器操作数位于64比特寄存器的比特位置32-63或者占用全部寄存器。

【0082】在I格式中,8比特即时数据字段的内容,指令的I字段直接用作操作数。在SI格式中,8比特即时数据字段的内容,指令的I2字段直接用作第二操作数。B1和D1字段指定长度为1个字节的第一操作数。在SIY格式中,操作是相同的,除了使用DH1和DL1字段而并非是D1字段之外。在RI格式中对于指令ADD HALFWORD IMMEDIATE、COMPAREHALFWORD IMMEDIATE、LOAD HALFWORD IMMEDIATE、和 MULTIPLY HALFWORD IMMEDIATE,根据指令,指令的16比特的I2字段内容直接用作有符号的二进制整数,并且R1字段指定长度为32或者64比特的第一操作数。对于指令TEST UNDER MASK(TMHH,TMHL,TMLH,TMLL),将I2字段的内容用作掩码,并且R1字段指定长度为64比特的第一操作符。

【0083】对于指令INSERT IMMEDIATE,AND IMMEDIATE,ORIMMEDIATE,和LOAD LOGICAL IMMEDIATE,I2字段的内容用作无符号的二进制整数或者逻辑值,并且R1字段指定长度为64比特的第一操作数。对于RI和RSI格式中的相对分支指令,16比特I2字段的内容用作指定半字数量的有符号的二进制整数。当增加到分支指令的地址中时,该数量指定分支地址。对于RIL格式中的相对分支指令,I2字段为32比特并以相同的方式使用。

【0084】对于RI和RSI格式中的相对分支指令,16比特I2字段的内容用作指定半字数量的有符号的二进制整数。当增加到分支指令的地址中时,该数量指定分支地址。对于RIL格式中的相对分支指令,I2字段为32比特并以相同的方式使用。对于RIE格式指令COMPARE IMMEDIATE ANDBRANCH RELATIVE和COMPARE LOGICA IMMEDIATE ANDBRANCH RELATIVE,8比特I2字段的内容直接用作第二操作符。对于RIE格式指令COMPARE IMMEDIATE AND BRANCH,COMPAREIMMEDIATE AND TRAP,COMPARE LOGICAL IMMEDIATE ANDBRANCH,和COMPARE LOGICAL IMMEDIATE AND TRAP,16比特I2字段的内容直接用作第二操作数。对于RIE格式指令COMPAREAND BRANCH RELATIVE,COMPARE IMMEDIATE AND BRANCHRELATIVE,COMPARE LOGICAL AND BRANCH RELATIVE,和COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE,16比特I4字段的内容直接用作指定半字数量的有符号的二进制整数,其中将多个半字增加到指令的地址中以形成分支地址。

【0085】对于RIL格式指令ADD IMMEDIATE,ADD LOGICAL IMMEDIATE,ADD LOGICAL WITH SIGNED IMMEDIATE,COMPARE IMMEDAITE,COMPARE LOGICAL IMMEDIATE,LOADIMMEDIATE,和MULTIPLY SINGLE IMMEDIATE,32比特I2字段的内容直接用作第二操作数。

【0086】对于RIS格式指令,8比特I2字段的内容直接用作第二操作数。在SIL格式中,16比特I2字段的内容直接用作第二操作数。如下所述,B1和D1字段指定第一操作数。

【0087】在RSL、SI、SIL、SSE和大部分SS格式中,将由B1字段指定的通用寄存器的内容增加到D1字段的内容以形成第一操作数地址。在RS、RSY、S、SIY和SSE格式中,将由B2字段指定的通用寄存器的内容增加到D2字段或者DH2和DL2字段的内容以形成第二操作数地址。在RX、RXE、RXF和RXY格式中,将由X2和B2字段指定的通用寄存器的内容增加到D2字段或者DH2和DL2字段的内容以形成第二操作数地址。在RIS和RRS格式中,并在一个SS格式中,将由B4字段指定的通用寄存器的内容增加到D4字段的内容以形成第四操作数地址。

【0088】在具有单一的,8比特长度字段的SS格式中,对于指令AND(NC),EXCLUSIVE OR(XC),MOVE(MVC),MOVE NUMRICS,MOVEZONES和OR(OC),L指定到由第一操作数地址指定的字节右侧的附加操作数字节的数量。因此,对应于L的0-255的长度代码,第一操作数的字节长度为1-256。存储器结果替换第一操作数并且决不存储在由地址和长度指定的字段外部。在该格式中,第二操作数与第一操作数具有相同的长度。前面定义的多个变量可应用于EDIT,EDIT AND MARK,PACKASCII,PACK UNICODE,TRANSLATE,TRANSLATE AND TEST,UNPACK ASCII,和UNPACK UNICODE。

【0089】在具有两个长度字段的SS格式中,并在RSL格式中,L1指定到由第一操作数地址指定的字节右侧的附加操作数字节的数量。因此,对应于L1的0-15的长度代码,第一操作数的字节长度为1-16。相似地,L2指定到由第二操作数地址指定的位置右侧的附加操作数字节的数量。结果替换第 一操作数,并且决不存储在由地址和长度指定的字段外部。如果第一操作数长于第二操作数,第二操作数在左侧延伸并用0补齐到第一操作数的长度。该延伸不修改存储器中的第二操作数。在MOVE TO PRIMARY,MOVE TO SECONDARY,和MOVE WITH KEY指令使用的具有两个R字段的SS格式中,由R1字段指定的通用寄存器的内容是被称为真实长度的32比特无符号的值。操作数均具有被称为有效长度的长度。有效长度等于真实长度或者256,以较小者为准。指令设置条件代码以便于程序设计循环以移动由真实长度所指定的字节的全部数量。具有两个R字段的SS格式还可用于指定寄存器的范围和用于LOAD MULTIPLE DISJOINT指令的两个存储器操作数,还用于指定一个或者两个寄存器和用于PERFORM LOCKED OPERATION指令的一个或者两个存储器操作数。

【0090】任何一个B1,B2,X1或者B4字段中的0指示缺少相应的地址成分,对于缺少的成分,0用于通知中间的总和,而不考虑通用寄存器0的内容。0的替换不具有特别的意义。

【0091】当前PSW的比特31和32是寻址模式比特。比特31是扩展寻址模式比特,比特32是基本寻址模式比特。这些比特控制由地址产生的有效地址的大小。在当前PSW的比特31和32都为0时,CPU处于24比特寻址模式,并且产生24比特指令和操作数有效地址。在当前PSW的比特31为0并且比特32为1时,CPU为31比特寻址模式,并产生31比特指令和操作数有效地址。在当前PSW的比特31和32都是1时,CPU为64比特寻址模式,并产生64比特指令和操作数有效地址。由CPU执行的指令包括指令和操作数的地址的产生。

【0092】当从由当前PSW指定的位置中提取指令时,使得指令地址增加指令中字节的数量,并执行指令。然后,通过使用指令地址的新值重复相同的步骤以提取序列中的下一指令。在24比特寻址模式中,指令地址回绕,其中在指令地址224-2的半字被指令地址0的半字所跟随。因此,在24比特寻址模式中,作为更新指令地址的结果,PSW比特位置104的任何执行都会丢失。在31比特和64比特寻址模式中,指令地址相似地回绕,其中在 指令地址231-2或者264-2的半字分别被指令地址0的半字所跟随。PSW比特位置97或者64的执行会丢失。

【0093】从中间值导出引用存储器的操作数地址,其中中间值包括在由指令中的R字段指定的寄存器中,也可由三个二进制数(基础地址,索引和位移)的总和进行计算。基础地址(B)是包括在由指令中被称为B字段的四比特字段中的程序所指定的通用寄存器的64比特数。基础地址可用作独立地给每个程序和数据区寻址的方式。在阵列类型的计算中,可指定阵列的位置,并在记录类型的处理中,其可识别记录。基础地址为整个存储器提供寻址。基础地址还可用作索引。

【0094】索引(X)是包括在由指令中被称为X字段的4比特字段中的程序所指定的通用寄存器的64比特数。其仅包括在由RX-,RXE-,和RXY-格式指令指定的地址中。RX-,RXE-,RXF-和RXY-格式指令允许双索引:也就是说,索引可用于在阵列中提供元素的地址。

【0095】位移(D)是包括在指令中被称为D字段的字段中的12比特或者20比特数。12比特位移是无符号的,并提供多达4,095字节的相对寻址,超出了由基础地址指定的位置。20比特的位移是有符号的,并提供超出了基础地址位置的多达524,287字节的相对寻址,或者提供在此之前的524,288字节。在阵列类型的计算中,位移可用于指定与元素相关的多个条目的一个。在处理记录中,位移可用于标识记录中的条目。12比特位移在特定格式的指令的比特位置20-31中。在一些格式的指令中,第二个12比特位移也在该指令的比特位置36-47中。

【0096】20比特位移仅位于RSY,RXY或者SIY格式的指令中。在这些指令中,D字段包括比特位置20-31中的DL(低)字段和比特位置32-39中的DH(高)字段。当安装长位移工具时,通过将DH字段添加到DL字段内容的左侧来形成位移的数值。当没有安装长位移工具时通过将8个0比特添加到DL字段内容的左侧来形成位移的数值,并忽略DH字段的内容。

【0097】在形成中间总和的过程中,将基础地址和索引看作为64比特的二进制整数。将12比特位移看作为12比特无符号的二进制整数,并将52个0 添加在左侧。将20比特位移看作为20比特有符号的二进制整数,并且在左侧添加等于有符号的比特的44比特。这三个相加为64比特的二进制数,并忽略溢出。该和总是64比特长,并用作中间值以形成所产生的地址。中间值的比特编号为0-63。在任何B1,B2,X2或者B4字段中的0指示相应地址元素的缺失。对于缺失的元素,使用0来形成中间和,而不考虑通用寄存器0的内容。0的位移没有特别的意义。

【0098】当指令说明指定由R字段所指定的通用寄存器的内容为存储器中的操作数进行寻址时,寄存器内容用作64比特中间值。

【0099】指令能同时将同一个通用寄存器指定用于地址计算,并作为操作数的位置。地址计算在寄存器被操作而改变(如果存在)之前完成。除非在各自指令定义中有其它指示,通用操作数地址指示存储器中操作数最左侧的字节。

【0100】所产生的操作数地址通常是64比特长,比特编号为0-63。所产生地址从中间值获取的方式取决于当前的寻址模式。在24比特寻址模式中,中间值的比特0-39被忽略,强制将所产生地址的比特0-39设为0,中间值的比特40-63变成所产生地址的比特40-63。在31比特寻址模式中,中间值的比特0-32被忽略,强制将所产生地址的比特0-32设为0,中间值的比特33-63变成所产生地址的比特33-63。在64比特寻址模式中,中间值的比特0-63变成所产生地址的比特0-63。负值可用在索引和基础地址寄存器中。在31比特寻址模式中这些值的比特0-32被忽略,在24比特寻址模式中比特0-39被忽略。

【0101】对于分支指令,在使用分支时要被执行的下一个指令的地址被称为分支地址。根据分支指令,指令格式可以是RR,RRE,RX,RXY,RS,RSY,RSI,RI,RIE,或者RIL。在RS,RSY,RX和RXY格式中,分支地址被基础地址、位移所指定,在RX和RXY格式中,分支地址被索引所指定。在这些格式中,中间值的产生与操作数地址中间值的产生使用相同的规则。在RR和RRE格式中,由R2字段指定的通用寄存器的内容用作从中形成分支地址的中间值。通用寄存器0不能被指定为包括分支地 址。R2字段中的值0促使指令不分支的执行。

【0102】相对分支指令在RSI,RI,RIE和RIL格式中。在用于相对分支指令的RSI,RI和RIE格式中,将I2字段的内容看作为指定半字数量的16比特的有符号的二进制整数。在RIL格式中,将I2字段的内容看作为指定半字数量的32比特的有符号的二进制整数。分支地址是由增加到相对分支指令地址的I2字段指定的半字的数量。

【0103】在RSI,RI,RIE,或者RIL格式中用于相对分支指令的64比特中间值是两个加数的和,并忽略比特位置0的溢出。在RSI,RI或者RIE格式中,第一加数是I2字段的内容,其具有附加到右侧的一个0比特,和等于附加在左侧的内容的符号比特的47比特,除了用于COMPARE ANDBRANCH RELATIVE,COMPARE IMMEDIATE AND BRANCHRELATIVE,COMPARE LOGICAL AND BRANCH RELATIVE和COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE之外,第一加数是I4字段的内容,其具有上面描述的添加到I2字段中的比特。在RIL格式中,第一加数是I2字段的内容,其具有附加在右侧的一个0比特,以及等于附加在左侧的内容的符号比特的31比特。在所有格式中,第二加数是分支指令的64比特地址。在将更新分支指令的地址以寻址下一连续指令之前,该地址是PSW中的指令地址,或者如果使用EXECUTE,则它是EXECUTE指令的目标的地址。如果在24比特或者34比特寻址模式中使用EXECUTE,分支指令的地址是分别具有40或者33个0,并添加在左侧。

【0104】分支地址通常是64比特长,其中比特编号为0-63。分支地址替换当前PSW的比特64-127。从中间值获得分支地址的方式取决于寻址模式。对于那些改变寻址模式的分支指令,使用新的寻址模式。在24比特寻址模式中,忽略中间值的比特0-39,将分支地址的比特0-39设为0,将中间值的比特40-63变成分支地址的比特40-63。在31比特寻址模式中,忽略中间值的比特0-32,将分支地址的比特0-32设为0,将中间值的比特33-63变成分支地址的比特33-63。在64比特寻址模式中,中间值的比特0-63 变成分支地址的比特0-63。

【0105】对于几个分支指令,分支取决于满足指定的条件。当条件不满足时,不采用分支,继续执行正常的连续指令,并不使用分支地址。当采用分支时,分支地址的比特0-63替换当前PSW的比特64-127。分支地址不用于作为分支操作部分访问存储器。虽然奇数的分支地址的说明异常和由于提取分支位置处的指令的访问异常不被视为分支操作的一部分,但是可将其视为与执行分支位置处指令相关的异常。

【0106】诸如BRANCH AND SAVE的分支指令能够指定用于分支地址计算的相同的通用寄存器并作为操作数的位置。在执行剩余的操作之前完成分支地址的计算。

【0107】在第4章“控制”中描述的程序状态字(PSW)包括请求正确的程序执行的信息。PSW用于控制指令顺序,并用于保持和指示CPU与当前被执行程序相关的状态。激活的或者控制PSW被称为当前PSW。分支指令执行进行确定、循环控制和子程序链接的功能。分支指令通过将新的指令地址引入到当前的PSW中以影响指令顺序。16比特I2字段的相对分支指令允许分支到与分支指令的位置相关的偏移量最大为正64K-2字节或者负64K字节的位置,而不使用基础寄存器。32比特I2字段的相对分支指令允许分支到与分支指令的位置相关的偏移量最大为正4G-2字节或者负4G字节的位置,而不使用基础寄存器。

【0108】用于进行确定的工具由BRANCH ON CONDITION,BRANCHRELATIVE ON CONDITION,和BRANCH RELATIVE ONCONDITION LONG指令提供。这些指令检测反映主要算法,逻辑和I/O操作结果的条件码。包括两个比特的条件码提供4个可能的条件码设置:0,1,2和3。

【0109】任意设置的特定含义取决于设置条件码的操作。例如,条件码反映诸如0,非0,第一操作数高,相同,溢出和子信道忙的条件。一旦设置,条件码保持不变,直到由指令进行修改以导致设置另一条件码。

【0110】循环控制可通过使用BRANCH ON CONDITION,BRANCH RELATIVE ON CONDITION,和BRANCH RELATIVE ONCONDITION LONG来执行,以测试地址算术和计数操作的输出。对于算术和测试的一些特别频繁的组合,提供BRANCH ON COUNT,BRANCHON INDEX HIGH,和BRANCH ON INDEX LOW OR EQUAL,并提供这些指令的相关分支等同物。这些专门的分支为这些工作提供了增强的性能。

【0111】BRANCH AND LINK和BRANCH AND SAVE指令提供当不需要改变寻址模式时的子程序链接。(BRANCH AND SAVE的讨论也适于BRANCH RELATIVE AND SAVE和BRANCH RELATIVE AND SAVELONG。)这些指令不仅允许引入新指令地址,而且保留返回地址和相应信息。返回地址是跟随存储器中分支指令的指令地址,除了它是跟随将分支指令作为其目的的EXECUTE指令的指令地址。

【0112】BRANCH AND LINK和BRANCH AND SAVE均具有R1字段。他们利用依赖于指令的字段形成分支地址。该指令的操作总结如下:·在24比特寻址模式中,这两种指令将返回地址放置在通用寄存器R1的40-63比特位置中,并保持该寄存器的比特0-31不变。BRANCH AND LINK从当前PSW将用于指令的指令长度代码以及条件代码和程序掩码放置在通用寄存器R1的比特位置32-39中,BRANCH AND SAVE在这些比特位置中放入0。

【0113】·在31比特寻址模式中,这两种指令均将返回地址放入通用寄存器R1的比特位置33-63以及一个比特位置32中,他们保持该寄存器的比特0-31不变。

【0114】·在64比特寻址模式中,这两种指令均将返回地址放入通用寄存器R1的比特位置0-63中。

【0115】·在任何寻址模式中,这两种指令在当前寻址模式的控制下均生成分支地址。指令将分支地址的比特0-63放入PSW的比特位置64-127中。在RR格式中,如果指令的R2字段为0,则这两种指令均不执行分支操作。

【0116】可以看出,在24比特或31比特寻址模式中,BRANCH AND SAVE 将基本寻址模式比特、PSW的比特32放入通用寄存器R1的比特位置32中。BRANCH AND LINK在31比特寻址模式中也这样操作。指令BRANCH AND SAVE AND SET MODE以及BRANCH AND SET MODE用于当在链接期间需要寻址模式的改变时。这些指令具有R1和R2字段。这些操作总结如下:

【0117】·BRANCH AND SAVE AND SET MODE将通用寄存器R1的内容与BRANCH AND SAVE设置的相同。此外,指令将扩展的寻址模式比特、PSW的比特31放入该寄存器的比特位置63中。

【0118】·如果R1非零,则BRANCH AND SET MODE执行如下。在24比特或31比特模式中,其将PSW的比特32放入通用寄存器R1的比特位置32中,并保持该寄存器的比特0-31和33-63不变。注意到,如果该寄存器包含指令地址,则该寄存器的比特63应该为0。在64比特模式中,指令将PSW的比特31(1)放入通用寄存器R1的比特位置63中,并保持该寄存器的比特0-62不变。

【0119】·当R2非零时,这两种指令设置寻址模式并如下执行分支操作。通用寄存器R2的比特63放入PSW的比特位置31中。如果比特63为0,则该寄存器的比特32放入PSW的比特位置32中。如果比特63为1,则PSW的比特32设置为1。于是在新的寻址模式的控制下,根据该寄存器的内容生成分支地址,除了该寄存器的比特63看作为0。指令将分支地址的比特0-63放入PSW的比特位置64-127中。通用寄存器R2的比特63仍保持不变,因此在进入所调用的程序中可以为1。如果R2与R1相同,则在指定的通用寄存器中的结果正如R1寄存器所指示的那样。

【0120】中断(上下文切换):

【0121】中断机制允许CPU作为配置之外的、配置中的或在CPU自身中的条件的结果改变其状态。为了允许快速响应高优先权的条件和该类型的条件的即时识别,将中断条件分为6组:外部、输入/输入、机器核查、程序、重启以及监视呼叫。

【0122】中断包括将提取PSW存储为旧的PSW、存储识别中断原因的信息、 以及提取新的PSW。如新的PSW所指示的那样来恢复处理。存储在中断中的旧的PSW通常包括如果不发生中断接下来执行的指令的地址,因此允许恢复中断的程序。对于程序和监视呼叫中断,存储的信息还包括识别最后执行的指令的长度的代码,因此允许程序响应中断的原因。在用于正常响应是重新执行导致中断的指令的一些程序条件的情况中,指令地址直接识别最后执行的指令。

【0123】除了重启,仅当CPU在操作状态下可以发生中断。重启中断可通过在停止状态或操作状态中的CPU一起发生。

【0124】作为执行与异常关联的指令的部分来识别访问异常。当CPU尝试从不可用位置预提取或检测一些其他访问异常条件时,没有识别出访问异常,但是分支指令或中断改变指令顺序,以便不执行该指令。因为指令提取,每个指令可导致将被识别的访问异常。此外,因为访问存储器中的操作数,可发生与指令执行关联的访问异常。当没有遭遇异常而不能提取第一指令半字时指示由于提取指令而造成的访问异常。当指令的第一半字没有访问异常时,可以根据由指令的头两比特指定的指令长度来指示对于另外半字的访问异常;然而,当没有访问指令的第二或第三半字就可执行操作时,对未使用的部分是否指示访问异常是不可预测的。既然对于指令提取的访问异常的指示对所有指令都是公共的,在单个指令定义中就不包含它。

【0125】除了在指令描述中指示相反的情况,下述的规则应用于与访问操作数位置关联的异常。对于提取类型的操作数,仅对于需要来完成操作的操作数的部分必须指示访问异常。对于不需要来完成操作的提取型操作数的那些部分是否指示访问异常是不可预测的。

【0126】对于存储型操作数,即使能够完成操作而没有使用操作数的不可用部分,也对于整个操作数识别访问异常。在存储型操作数的值定义为不可预测的情况中,是否指示访问异常是不可预测的。每当访问操作数位置可导致访问异常被识别时,词“访问”都包括在指令说明中的程序异常的列表中。该表项还指示哪个操作数可导致要识别的异常以及关于提取或存储访问该操作数位置的异常是否被识别。仅对于为每个特定指令定义的操作数 的部分识别访问异常。

【0127】当CPU尝试使用无效操作码来执行指令时,识别操作异常。该操作码可以是无符号的,或具有该操作码的指令可以不安装在该CPU上。禁止该操作。指令长度码是1、2或3。由程序中断代码0001hex(十六进制)来指示操作异常(如果指示同时发生的PER事件则为0081hex)。

【0128】一些模型可提供在该公开中没有描述的指令,例如被提供来帮助,或作为特定或共同特性的一部分的指令。因此,在该公开中没有描述的操作码不一定导致操作异常被识别。此外,这些指令可以导致将建立的操作模式,或可以改变机器以便影响随后指令的执行。为了避免导致这样的操作,仅当与操作码关联的特定功能是期望的时,才应该执行具有在该公开中没有描述的操作码的指令。

【0129】当以下为真时识别说明异常:

【0130】1.将1引入PSW的无符号比特位置(即,比特位置0、2-4、24-30或33-63中的任一个)。这作为早期PSW说明异常来处理。

【0131】2.将1引入PSW的比特位置12。这作为早期PSW说明异常来处理。

【0132】3.处于下述任何方式的PSW是无效的:a.PSW的比特31是1而比特32是0。b.PSW的比特31和32是0,用于指示24比特寻址模式,而PSW的比特64-103不全为0。c.PSW的比特31是0而比特32是1,用于指示31比特寻址模式,而PSW的比特64-96不全为0。这作为早期PSW说明异常来处理。

【0133】4.PSW包括奇数指令地址。

【0134】5.在需要整数边界的指定的指令中操作数地址没有指定这样的整数边界。

【0135】6.由需要偶数编号的寄存器指示的指令的R字段来指定奇数编号的通用寄存器。

【0136】7.对于扩展的操作数指定除了0、1、4、5、8、9、12或13的浮点寄存器。

【0137】8.十进制算术的乘数或除数超过15个数位和符号。

【0138】9.在十进制乘法或除法中,第一操作数字段的长度小于或等于第二操作数字段的长度。

【0139】10.尝试执行CIPHER MESSAGE、CIPHER MESSAGE WITHCHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST、COMPUTE LAST MESSAGE DIGEST或COMPUTE MESSAGEAUTHENTICATION CODE,并且通用寄存器0的比特57-63中的功能代码包括未分配的或未安装的功能代码。

【0140】11.尝试执行CIPHER MESSAGE或CIPHER MESSAGE WITHCHAINING,R1或R2字段指定奇数编号的寄存器或通用寄存器0。

【0141】12.尝试执行CIPHER MESSAGE、CIPHER MESSAGE WITHCHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST或COMPUTE MESSAGE AUTHENTICATION CODE,第二操作数长度不是指定的功能的数据块大小的倍数。这种说明异常条件不应用于查询功能。

【0142】13.尝试执行COMPARE AND FORM CODEWORD,以及通用寄存器1、2和3最开始不包括偶数值。

【0143】32.尝试执行COMPARE AND SWAP AND STORE,以及存在以下条件中的任一个:

【0144】·功能代码指定未分配值。

【0145】·存储特性指定未分配值。

【0146】·功能代码是0,在字边界上不指定第一操作数。

【0147】·功能代码是1,在双字边界上不指定第一操作数。

【0148】·在与存储值的大小对应的整数边界上不指定第二操作数。

【0149】33.尝试执行COMPARE LOGICAL LONG UNICODE或MOVELONG UNICODE,以及通用寄存器R1+1或R3+1的内容没有指定偶数字节。

【0150】34.尝试执行COMPARE LOGICAL STRING、MOVE STRING或SEARCH STRING,通用寄存器0的比特32-55不全是0。

【0151】35.尝试执行COMPRESSION CALL,通用寄存器0的比特48-51 具有二进制值0000以及0110-1111中的任一个。

【0152】36.尝试执行COMPUTE INTERMEDIATE MESSAGE DIGEST,COMPUTE LAST MESSAGE DIGEST或COMPUTE MESSAGEAUTHENTICATION CODE,以下中的任一个为真:

【0153】·R2字段指定奇数编号的寄存器或通用寄存器0。

【0154】·通用寄存器0的比特56不是0。

【0155】37.尝试执行CONVERT HFP TO BFP、CONVERT TO FIXED(BFP或HFP)或LOAD FP LNTEGER(HFP),M3字段不指定有效修改器。

【0156】38.尝试执行DIVIDE TO INTEGER,M4字段不指定有效修改器。

【0157】39.尝试执行EXECUTE,以及目标地址为奇数。

【0158】40.尝试执行EXTRACT STACKED STATE,当ASN-and-LX-reuse工具没有安装时,通用寄存器R2的比特位置56-63中的代码大于4,以及当安装了该功能时该代码大于5。

【0159】41.尝试执行FIND LEFTMOST ONE,以及R1字段指定奇数编号的寄存器。

【0160】42.尝试执行INVALIDATE DAT TABLE ENTRY,通用寄存器R2的比特44-51不全为0。

【0161】43.尝试执行LOAD FPC,与在FPC寄存器中的未支持的比特相应的第二操作数中的一个或多个比特为1。

【0162】44.尝试执行LOAD PAGE-TABLE-ENTRY ADDRESS,指令的M4字段包含非二进制0000-0100的任何值。

【0163】45.尝试执行LOAD PSW,在第二操作数地址处的双字的比特12为0。是否识别该异常取决于模型。

【0164】46.尝试执行MONITOR CALL,指令的比特位置8-11不包含0。

【0165】47.尝试执行MOVE PAGE,通用寄存器0的比特位置48-51不包含0或者该寄存器的比特52和53全为1。

【0166】48.尝试执行PACK ASCII,L2字段大于31。

【0167】49.尝试执行PACK UNICODE,L2字段大于63或者是偶数。

【0168】50.尝试执行PERFORM FLOATING POINT OPERATION,通用寄存器0的比特32为0,以及比特33-63中的一个或多个字段是无效的或指定未安装的功能。

【0169】51.尝试执行PERFORM LOCKED OPERATION,以下任何一个为真:·通用寄存器0的T比特、比特55为0,以及该寄存器的比特56-63中的功能代码是无效的。·通用寄存器0的比特32-54不全为0。·在访问寄存器模式中,对于导致包含ALET的参数列表的使用的功能代码,R3字段为0。

【0170】52.尝试执行PERFORM TIMING FACILITY FUNCTION,以下中的任一为真:·通用寄存器0的比特56不为0。·通用寄存器0的比特57-63指定未分配的或未安装的功能代码。

【0171】53.尝试执行PROGRAM TRANSFER或PROGRAM TRANSFERWITH INSTANCE,以下所有均为真:·在PSW中的扩展的寻址模式比特为0。·由指令的R2字段指示的通用寄存器中的基本寻址模式比特、比特32为0。·在相同寄存器中的指令地址的比特33-39不全为0。

【0172】54.尝试执行RESUME PROGRAM,以下中的任一个为真:·在第二操作数中的PSW的比特31、32和64-127对于当前PSW中的放置是无效的。如果以下任何为真,则识别异常:-比特31和32均为0,以及比特64-103不全为0。-比特31和32分别为0和1,以及比特64-96不全为0。-比特31和32分别为0和1。

【0173】-比特127为1。

【0174】·参数列表的比特0-12不全为0。

【0175】55.尝试执行SEARCH STRING UNICODE,通用寄存器的比特32-47不全为0。

【0176】56.尝试执行SET ADDRESS SPACE CONTROL或SETADDRESS SPACE CONTROL FAST,第二操作数地址的比特52和53不全为0。

【0177】57.尝试执行SET ADDRESSING MODE(SAM 24),PSW中的未更新的指令地址的比特0-39、PSW的比特64-103不全为0。

【0178】58.尝试执行SET ADDRESSING MODE(SAM 31),PSW中的未更新的指令地址的比特0-32、PSW的比特64-96不全为0。

【0179】59.尝试执行SET CLOCK PROGRAMABLE FIELD,通用寄存器0的比特32-47不全为0。

【0180】60.尝试执行SET FPC,与FPC寄存器中的未支持比特相应的第一操作数的一个或多个比特为1。

【0181】61.尝试执行STORE SYSTEM INFORMATION,通用寄存器0中的功能代码是有效的,以下中的任一个为真:·通用寄存器0的比特36-55和通用寄存器1的比特32-47不全为0。·第二操作数地址不对齐4K字节边界。

【0182】62.尝试执行TRANSLATE TWO TO ONE或TRANSLATE TWOTO TWO,以及通用寄存器R1+1中的长度不指定偶数个字节。

【0183】63.尝试执行UNPACK ASCII,L1字段大于31。

【0184】64.尝试执行UNPACK UNICODE,L1字段大于63或为偶数。

【0185】65.尝试执行UPDATE TREE,以及通用寄存器4和5最初的内容在24比特或31比特寻址模式中不是8的倍数,或者在64比特寻址模式中不是16的倍数。禁止执行由旧的PSW标识的指令。然而,对于早期PSW说明异常(原因1-3),完成引入新的PSW的操作,但是此后立即发生中断。优选地,指令长度代码(ILC)为1、2或3,其用于指示导致异常的指令的长度。当指令地址为奇数(在页面6-33上的原因4)时,ILC是否为1、2或3是不可预测的。当识别异常时,因为早期PSW说明异常(原因1-3)识别异常以及通过LOAD PSW、LOAD PSW EXTENDED、PROGRAM RETURN或中断引入异常时,ILC为0。当异常通过SETADDRESSING MODE(SAM24、SAM31)引入时,ILC为1,或如果SETADDRESSING MODE是EXECUTE的目标,则其为2。当异常通过SETSYSTEM MASK或通过STORE THEN OR SYSTEM MASK引入时,ILC 为2。

【0186】使用程序中断来报告在程序执行期间出现的异常和事件。程序中断导致在实际位置336-351存储旧的PSW,并从实际位置464-479提取新的PSW。通过中断代码来标识中断原因。中断代码放置在实际位置142-143,指令长度代码放置在实际位置141的比特位置5和6中,其他比特设置为0,0存储在实际位置140。基于同样的原因,标识中断的原因的附加信息存储在实际位置144-183。如果安装了PER-3工具,则作为程序中断行为的一部分,打断-事件-地址寄存器放置在实际存储器位置272-279。除了PER事件和crypto-操作异常,由放置在中断代码的最右7比特位置的代码值指示了导致中断的条件。每次只指示一个条件。将中断代码的比特0-7设置为0。通过将中断代码的比特8设置为1来指示PER事件。当这是唯一的条件时,将比特0-7和比特9-15也设置为0。当使用另外的程序中断条件同时指示PER事件时,比特8为1,比特0-7和9-15被设置来用于其它条件。通过0119hex的中断代码或在还指示PER事件时为0199hex来指示crypto-操作异常。

【0187】当存在相应的掩码比特时,程序中断仅在该掩码比特为1时出现。PSW中的程序掩码控制4种异常,FPC寄存器中的IEEE掩码控制IEEE异常,控制寄存器0中的比特33控制SET SYSTEM MASK是否导致特定操作异常,控制寄存器8中的比特48-63控制由于监控事件的中断,掩码层级控制由于PER事件的中断。当任意控制掩码比特为0时,则忽视该条件,该条件不能继续为未决状态。

【0188】当用于程序中断的新的PSW具有PSW格式错误并导致异常在指令提取过程中被识别,可发生一串程序中断。

【0189】指示为程序异常的一些条件还可由信道子系统来识别,在这种情况下在子信道状态字或扩展状态字中指示该异常。

【0190】当数据异常导致程序中断,在位置147存储数据异常代码(DXC),在位置144-146存储0。DXC识别各种类型的数据异常条件。当AFP寄存器(加法浮点寄存器)控制比特(控制寄存器0的比特45)为1时,DXC 还放置在浮点控制(FPC)寄存器的DXC字段中。当报告任何其他程序异常时,FPC寄存器中的DXC字段保持不变。DXC为指示数据异常的特定原因的8比特代码。

【0191】DXC 2和3相互是专用的,具有比其他任何DXC高的优先级。因此,例如DXC 2(BFP指令)优先于任何IEEE异常;以及DXC 3(DFP指令)优先于任何IEEE异常或模拟的IEEE异常。作为另外的实例,如果存在用于DXC 3(DFP指令)和DXC 1(AFP寄存器)的条件,则报告DXC 3。当规格异常和AFP寄存器数据异常均应用时,不能预测报告哪个。

【0192】当CPU尝试引用在配置中不可用的主存储器位置时,识别出寻址异常。当该位置未安装时,当存储单元未在配置中时,或者当存储单元中关电时,主存储器位置在配置中不可用。指定在配置中不可用的存储器位置的地址称为无效的。当指令地址是无效的时,操作被禁止。类似的,当EXECUTE的目标指令的地址是无效的时,该操作也被禁止。当在访问表格或表项中遭遇寻址异常时,操作单元也被禁止。该规则应用的表格和表项是可派发单元控制表格、基本ASN第二表项、访问列表中的项目、区域第一表格、区域第二表格、区域第三表格、段表格、页面表格、链接表格、链接第一表格、链接第二表格、入口表格、ASN第一表格、ASN第二表格、授权表格、链接堆栈以及跟踪表格。当寻址异常遇到到区域第一表格、区域第二表格、区域第三表格、段表格、页面表格的引用时,在暗含的动态地址转换的引用以及与LOAD PAGE-TABLE-ENTRY ADDRESS、LOADREAL ADDRESS、STORE REAL ADDRESS、以及TEST PROTECTION的异常关联的引用中,寻址异常造成禁止。类似的,当暗含地或作为LOADPAGE-TABLE-ENTRY ADDRESS、LOAD REAL ADDRESS、STOREREAL ADDRESS、TEST ACCESS、或TEST PROTECTION的一部分在访问寄存器转换中遇到访问派发单元控制表格、基本ASN第二表项、访问列表、ASN第二表格或授权表格的寻址异常时,所述寻址异常造成禁止。除了执行被禁止的一些特定指令,终止对于可被转换但指示不可用位置的操作数地址的操作。对于终止,仅对于结果字段发生改变。在这种情境中, 术语“结果字段”包括条件代码、寄存器和提供的并由指令指定改变的任何存储器位置。

【0193】执行相对长(EXECUTE RELATIVE LONG):

【0194】具有708图7的操作码、指定寄存器(R1)的寄存器字段以及即时字段(I2)的图6的执行相对长指令提供了这样的能力:执行从相对于在执行的执行相对长指令的地址(PSW的程序计数器值)的存储器位置获得的单个目标指令。

【0195】图7中,当从执行指令的处理器的程序计数器所指定的地址提取701执行相对指令并执行时,从优选地通过将指令的符号扩展的有符号即时值(I2)与当前程序计数器值代数地相加而确定702的目标地址中获得703目标指令。当寄存器字段(R1)不是“0”704时,通过由指令的R1字段指定的通用寄存器的比特56-63修改705在第二操作数地址的单个目标指令的副本的比特8-15,执行706生成的指令(称为目标指令)。当寄存器字段(R1)是“0”704时,无需修改而执行706单个目标指令的副本。

【0196】在执行单个目标指令后,当前程序计数器增加执行相对长指令的大小,并且提取该执行相对长指令之后的下一顺序指令并执行(如果执行的指令不是分支,或者不存在中断)。

【0197】在图8的实施例中,要执行的单个目标指令的目标地址由指令的操作码来确定,并且是从以下方式中的任一项获得的:

【0198】从通过指令的第二字段指定的第二寄存器获得801;

【0199】从将程序计数器804与通过指令的第二字段指定的第二寄存器801的值相加获得802,该程序计数器从PSW 803获得;

【0200】从将程序计数器804与通过指令的第二字段指定的第二寄存器801的值相加获得805,程序计数器从与指令的即时字段(I2)相加的PSW 803获得;或者

【0201】从将程序计数器804与指令的即时字段(I2)相加获得806。

【0202】优选地,当R1字段不为0时,由第二操作数地址指定的指令的比特8-15与通用寄存器R1的比特56-63进行或操作。该或操作没有改变通用 寄存器R1的内容或存储器中的指令,并仅对于要执行的指令的解释有效。当R1字段为0时,不发生或操作。

【0203】目标指令可以是由目标指令的操作码指定的2、4或6字节长度。目标指令的执行和异常处理就恰好像目标指令以正常顺序操作获得,除了指令地址和指令长度代码。本发明的执行相对长指令(EXECUTE RELATIVELONG)可以与其他执行类型的指令(包括现有技术中的z/Architecture的EXECUTE指令)共存。

【0204】如果执行的指令没有导致发生分支,则当前PSW中的指令地址增加执行类型指令的长度(对于EXECUTE RELATIVE LONG为6字节)。如果目标指令没有指定下一指令或程序中断,则在执行目标指令之后,在执行相对长指令之后的指令地址处执行将继续。例如,当目标指令为BRANCH AND LINK时,作为链路信息的一部分,使用了这种更新的地址以及执行类型指令的指令长度代码。当目标指令是成功的分支指令时,通过由目标指令指定的分支地址代替当前PSW中的指令地址。当目标指令随后是执行类型指令时,识别出执行异常。EXECUTE的有效地址必须是偶数;否则识别出说明异常。当目标指令是2个或3个半字长但可以执行而不需提取其第二或第三半字时,对于未使用的半字是否识别出访问异常是不可预测的。当地址是奇数时,对于第二操作数地址没有识别出访问异常。优选地,访问异常导致到操作系统异常处理程序(handler)的上下文切换。

【0205】执行类型指令的第二操作数地址是指令地址而非逻辑地址;因此,当在正如z/Architecure的操作原理中指示的主要空间、从属空间或访问寄存器模式中时,从主要地址空间提取目标指令。

【0206】对于EXECUTE RELATIVE LONG,比特32的I2字段的内容是指定与程序计数器值(执行相对长指令的地址)相加以生成存储器中的目标指令的地址的半字数量的有符号二进制整数(优选地当为负数时是符号扩展的2的补码)。由PSW指定的程序计数器的值可以是24比特、31比特或优选的64比特中的任一个。

【0207】如果在执行时目标指令被架构化以设置条件代码,则条件代码将因此而设置。对于执行相对长指令或目标指令而架构化的程序异常将导致以下程序异常:

【0208】·访问(提取、目标指令)

【0209】·执行

【0210】·操作(当执行扩展工具未安装时的EXRL)

【0211】来自通用寄存器的8比特与指定指令的或操作允许间接规定长度、索引、掩码、即时数据、寄存器或扩展的操作码字段。目标指令的提取被认为是为了记录程序事件和为了报告访问异常的指令提取。除了EXECUTERELATIVE LONG的执行不导致说明异常外,访问或说明异常可以由执行类型指令或目标指令导致。当可中断的指令构成执行类型指令的目标时,程序通常不指示由EXECUTE的R1、X2或B2寄存器或EXECUTERELATIVE LONG的R1寄存器的可中断指令更新的任何寄存器。否则,在中断之后恢复执行时,或如果没有中断重新提取指令,则这些寄存器的更新的值将用于执行类型指令的执行。类似的,由于当恢复执行时可解释位置的新内容,所以程序通常不应该使可中断指令的存储器中的目的字段包括执行类型指令的位置。

【0212】前述内容对于理解一个计算机系统实施例的术语和结构是有用的。本方面不限于z/Architecture或者对其提供的说明。本发明可有利地应用于具有在此教导的其他计算机制造商的其他计算机结构。

【0213】尽管在此已经例示和描述的本方面的优选实施例,应该理解,本发明不限于在此公开的具体构造,将保留落入在所附的权利要求所定义的本发明的范围中的所有改动、修改的权利。

【说明书附图】


【0001】


图1A现有技术

【0002】


图1B现有技术

【0003】


图1C现有技术

【0004】


图2现有技术

【0005】


图3现有技术

【0006】


图4A现有技术

【0007】


图4B现有技术

【0008】


图4C现有技术

【0009】


图5A

【0010】


图5B

【0011】


图5C

【0012】


图5D

【0013】


图5E

【0014】


图5F

【0015】


图6

【0016】


图7

【0017】


图8