提取高速缓存属性工具及其指令.pdf

上传人:zhu****_FC 文档编号:4576004 上传时间:2018-10-21 格式:PDF 页数:40 大小:2.20MB
返回 下载 相关 举报
摘要
申请专利号:

CN200980101768.5

申请日:

2009.01.07

公开号:

CN101911013A

公开日:

2010.12.08

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/312申请日:20090107|||公开

IPC分类号:

G06F9/312

主分类号:

G06F9/312

申请人:

国际商业机器公司

发明人:

D·格雷纳; T·斯莱格尔

地址:

美国纽约

优先权:

2008.01.11 US 11/972,675

专利代理机构:

北京市中咨律师事务所 11247

代理人:

于静;杨晓光

PDF下载: PDF下载
内容摘要

在操作计算机系统的方法中,提供了一种工具以及具有计算机体系结构的高速缓存机器指令,所述高速缓存机器指令用于指定目标高速缓存的高速缓存级别以及目标高速缓存属性以便获取一个或多个目标高速缓存的高速缓存属性。所请求的所述目标高速缓存(多个)的高速缓存属性保存在寄存器中。

权利要求书

1: 一种操作计算机的方法, 所述方法包括 : 由处理系统的处理器取回针对计算机体系结构定义的高速缓存机器指令, 所述高速缓 存机器指令包括操作码、 操作数标识符, 所述操作数标识符标识操作数位置 ; 执行所述高速缓存机器指令, 所述执行包括 : 根据高速缓存级别标识符, 确定目标高速缓存 ; 根据高速缓存属性标识符, 确定要提取的高速缓存属性 ; 从所述目标高速缓存提取所确定的高速缓存属性 ; 将所提取的高速缓存属性保存在所标识的操作数位置中。
2: 如权利要求 1 中所述的方法, 其中所述操作数标识符包括标识第一寄存器的第一寄 存器字段, 其中确定所述高速缓存属性标识符包括 : 将所述指令的位移字段与所述指令的第二字段所关联的值进行代数相加以确定所述 高速缓存属性标识符。
3: 如权利要求 1 中所述的方法, 其中要提取的高速缓存属性包括以下项中的任意一 个: 一个或多个高速缓存的高速缓存拓扑摘要 ; 所述目标高速缓存的行大小 ; 所述目标高速缓存的总大小 ; 或 所述目标高速缓存的组关联性级别。
4: 如权利要求 3 中所述的方法, 其中所提取的高速缓存拓扑摘要包括一个或多个摘 要, 每个摘要用于由所述高速缓存级别标识符指定的级别处的高速缓存, 其中对应高速缓 存级别处的高速缓存的摘要包括以下项中的任意一个 : 高速缓存是否存在 ; 高速缓存是否为执行所述指令的处理器的专用高速缓存 ; 高速缓存是否可以由所述处理系统的其他处理器共享 ; 高速缓存是否包含单独的指令高速缓存和单独的数据高速缓存 ; 所述高速缓存是否仅为指令高速缓存 ; 所述高速缓存是否仅为数据高速缓存 ; 以及 所述高速缓存是否为统一的指令和数据高速缓存。
5: 如权利要求 1 中所述的方法, 其中由具有备选计算机体系结构的中央处理单元取回 和执行针对所述计算机体系结构定义的高速缓存机器指令, 其中所述方法进一步包括 : 解释所述高速缓存机器指令以标识预定软件例程以便仿真 所述高速缓存机器指令的操作 ; 以及 其中执行所述高速缓存机器指令包括 : 执行所述预定软件例程以执行用于执行所述高 速缓存机器指令的方法的各步骤。
6: 一种计算机程序产品, 所述计算机程序产品包括可由处理电路读取并存储由所述处 理电路执行以实现上述任一权利要求中所述的方法的指令的有形存储介质。
7: 一种计算机系统, 包括 : 存储器 ; 与所述存储器通信的处理器, 所述处理器包括用于从所述存储器取回指令的指令取回 2 元件以及一个或多个用于执行所取回的指令的执行元件 ; 其中所述计算机系统被配置为执行如权利要求 1 至 5 中的任一权利要求所述的方法。

说明书


提取高速缓存属性工具及其指令

    【技术领域】
     本发明涉及计算机系统, 更具体地说, 涉及计算机系统处理器指令功能。背景技术 商标 IBM 是位于美国纽约阿蒙克的国际商业机器公司的注册商标。S/390、 Z900 和 z990 以及其他产品名称是国际商业机器公司或其他公司的注册商标或产品名。
     从上世纪六十年代被称为 IBM System 360 的机器开始一直到现在, IBM 开发 了一种被称为 “大型机” 的体系结构, 其操作原理通过描述可以在 IBM 发明家所发明的 “大 型机” 指令实现上执行的指令阐述了机器体系结构, 由于这种 “大型机” 指令实现对于改进 “大型机” 所表示的计算机器状态具有重大贡献 ( 如多年来所称的收录在 IBM 的操作原理 中的重要贡献 ), 因此被广泛采用。2007 年 4 月出版的第六版 “IBM z/Architecture Principles of Operation(IBM z/Architecture 操作原理 )” 已成为出版的标准参考 SA22-7832-05 并被纳入 IBM z9 mainframe sever(IBM z9 大型机服务器 ) 中。IBM
     z/Architecture Principles of Operation(IBM z/Architecture 操作原理, 出版号 SA22-7832-05) 在此全部引入作为参考。
     参考图 1A, 其中示出了现有技术主计算机系统 50 的代表组件。如本领域公知的, 计算机系统中也可以采用其他布置。 代表性主计算机 50 包括一个或多个与主存储装置 ( 计 算机存储器 2) 通信的 CPU 1 以及到存储设备 11 和网络 10 的 I/O 接口以便与其他计算机 或 SAN 等通信。CPU 1 与具有架构的指令集以及架构的功能性的体系结构兼容。CPU 1 可 具有将程序地址 ( 虚拟地址 ) 转换为存储器的实地址的动态地址转换 (DAT)3。DAT 通常包 括转换后备缓冲器 (TLB)7, 其用于对转换进行缓存以便对计算机存储器 2 块的后续访问没 有地址转换延迟。通常在计算机存储器 2 和处理器 1 之间使用高速缓存 9。高速缓存 9 可 具有层次结构, 其中较大的高速缓存可用于多个 CPU, 而较小、 较快 ( 较低级别 ) 的高速缓 存位于较大的高速缓存和每个 CPU 之间。在某些实施方式中, 分割较低级别的高速缓存以 针对指令取回和数据访问提供单独的低级别高速缓存。在一个实施例中, 由指令取回单元 4 通过高速缓存 9 从存储器 2 取回指令。所述指令在指令解码单元 (6) 中进行解码并被分 派到 ( 在某些实施例中, 与其他指令一起分派到 ) 指令执行单元 8。 通常采用若干执行单元 8, 例如算术执行单元、 浮点执行单元和分支指令执行单元。 指令由执行单元执行, 所述执行 单元根据需要从指令指定的寄存器或存储器存取操作数。如果要访问的 ( 加载或存储的 ) 操作数来自存储器 2, 则通常由加载 / 存储单元 5 在被执行指令的控制下处理所述访问。 指 令可以在硬件电路或在内部微代码 ( 固件 ) 中执行, 也可以通过这两者的组合来执行。
     在图 1B 中, 提供了仿真具有主机体系结构的主计算机系统 50 的现有技术的仿真 的主计算机系统 21 的实例。在仿真的主计算机系统 21 中, 主处理器 (CPU)1 为仿真的主处 理器 ( 或虚拟主处理器 ) 且包括本机指令集体系结构不同于主计算机 50 的处理器 1 的指 令集体系结构的仿真处理器 27。 仿真的主计算机系统 21 具有可由仿真处理器 27 访问的存 储器 22。在一个实例实施例中, 存储器 22 被分为主计算机存储器 2 部分和仿真例程 23 部分。根据主计算机体系结构, 主计算机存储器 2 可用于仿真的主计算机 21 的程序。仿真处 理器 27 执行体系结构不同于仿真的处理器 1 的体系结构的架构指令集的本机指令 ( 从仿 真例程存储器 23 获取所述本机指令 ), 并且可通过使用从序列和访问 / 解码例程获取的一 个或多个指令, 从主计算机存储器 2 中的程序访问指令以便执行, 所述序列和访问 / 解码例 程可解码所访问的主机指令 ( 多个 ) 以确定用于仿真被访问的主机指令的功能的本机指令 执行例程。其他针对主计算机系统 50 的体系结构定义的工具可以由架构的工具例程进行 仿真, 其中包括诸如通用寄存器、 控制寄存器、 动态地址转换和 I/O 子系统支持以及处理器 高速缓存之类的工具。所述仿真例程还可利用仿真处理器 207 中的可用功能 ( 例如通用寄 存器和虚拟地址的动态转换 ) 提高自身的性能。还可提供专用硬件和卸载引擎来帮助处理 器 27 仿真主计算机 50 的功能。
     在大型机中, 架构的机器指令由程序员使用, 现在通常是由 “C” 语言程序员通过编 译器应用进行使用。 这些存储在存储介质中的指令可在 zArchitecture IBM Server 中本机 地执行, 或者备选地在执行其他体系结构的机器内执行。它们可以在现有和将来的 IBM 大 型机服务器以及其他 IBM 机器 ( 例如, pSeries Servers 和 xSeries Servers) 上被仿 真。 它们可以在运行 Linux 的机器或使用 IBM 、 Intel 、 AMDTM、 Sun Microsystems 以及其 他厂商制造的硬件的多种机器中执行。除了在运行 Z/Architecture 的硬件上执行以外, 还可以使用 Linux 以及通过 Hercules、 UMX、 FSI(Fundamental Software, Inc) 或 Platform Solutions, Inc 使用仿真的机器, 其中通常在仿真模式下执行指令。在仿真模式下, 仿真软 件由本机处理器执行以仿真被仿真的处理器的体系结构。
     本机处理器 27 通常执行包括固件或本机操作系统的仿真软件 23 以执行对被仿真 处理器的仿真。仿真软件 23 负责取回和执行被仿真处理器体系结构的指令。仿真软件 23 维护被仿真程序计数器以跟踪指令边界。仿真软件 23 可一次取回一个或多个被仿真机器 指令并将所述一个或多个被仿真机器指令转换为由本机处理器 27 执行的一组相应本机机 器指令。可以缓存这些转换后的指令以便完成更快的转换。尽管如此, 仿真软件必须维护 被仿真处理器体系结构的体系结构规则以确保为被仿真处理器编写的操作系统和应用正 确运行。而且, 仿真软件必须提供由被仿真处理器 1 体系结构识别的资源, 其中包括但不限 于控制寄存器、 通用寄存器、 浮点寄存器、 包括例如段表和页表的动态地址转换功能、 中断 机制。上下文切换机制、 日时 (TOD) 时钟以及 I/O 子系统的架构接口, 以便被设计为在被仿 真处理器上运行的操作系统或应用程序可以在具有仿真软件的本机处理器上运行。
     解码被仿真的特定指令, 并且调用子例程以执行单个指令的功能。在例如 “C” 子例程或驱动程序, 或某些其他提供特定硬件的驱动程序的方法 ( 本领域的技术人员在 理解优选实施例说明之后将理解此方法 ) 中实现仿真被仿真的处理器 1 的功能仿真软 件功能 23。各种软件和硬件仿真专利示出了多种仿真针对不同机器构建的目标机器指 令格式的已知方法, 本领域的技术人员可以理解所述目标机器指令格式, 以及上述引用 所使用的商业软件技术, 所述专利包括但不限于 Beausoleil 等人的 “Multiprocessor forhardware emulation( 硬件仿真的多处理器, 专利号 : US 5551013)” ; Scalzi 等人的 “Preprocessing of stored target routines for emulatingincompatible instructions on target processor( 预处理存储的目标例程以在目标处理器上仿真不兼容的指令, 专利号: US6009261)” ; Davidian 等 人 的 “Decoding guest instruction to directlyaccess emulation routines thatemulate the guest instructions( 对 客 户 机 指 令 进行解码以直接访问仿真客户机指令的仿真例程, 专利号 : US5574873)” ; Gorishek 等人 的 “Symmetrical multiprocessing bus and chipset used for coprocessorsupport allowing non-native code to run in a system( 支 持 协 处 理 器 以 在 系 统 中 运 行 非 本机代码的对称多处理总线和芯片组, 专利号 : US6308255)” ; Lethin 等人的 “Dynamic optimizing object code translator for architectureemulation and dynamic optimizing object code translation method( 用于体系结构仿真的动态优化对象代码 转换器和动态优化对象代码转换方法, 专利号 : US6463582)” ; Eric Traut 的 “Method for emulating guestinstructions on a host computer through dynamic recompilation of hostinstructions( 通过动态重新编译主机指令在主计算机上仿真客户机指令的方法, 专利号 : US5790825)” 以及其他许多专利。 发明内容
     在本发明的一个实施例中, 处理系统的处理器取回和执行针对计算机体系结构定 义的提取高速缓存属性机器指令, 所述高速缓存机器指令包括操作码、 操作数标识符 ( 寄 存器字段 )、 所述操作数标识符标识操作数位置 ( 寄存器 )。所述指令通过指令的位移 (displacement) 字段确定高速缓存级别以及要从所确定级别处的高速缓存提取的高速缓 存属性。所述高速缓存属性可以是所述处理器的每个高速缓存级别处的高速缓存的摘要, 也可以是与所述处理器关联的指定高速缓存级别处的高速缓存的高速缓存属性。 从所述高 速缓存提取所确定的属性并将其保存在所述操作数位置中。
     在一个实施例中, 要提取的高速缓存属性为以下项中的任意一个 : 一个或多个高 速缓存的高速缓存拓扑摘要 ; 所述目标高速缓存的行大小 ; 所述目标高速缓存的总大小 ; 或所述目标高速缓存的组关联性级别。
     在另一实施例中, 所提取的高速缓存拓扑摘要包括一个或多个摘要, 每个摘要用 于由所述高速缓存级别标识符指定的级别处的高速缓存, 其中对应高速缓存级别处的高速 缓存的摘要包括以下项中的任意一个 : 高速缓存是否存在 ; 高速缓存是否为执行所述指令 的处理器的专用高速缓存 ; 高速缓存是否可以由所述处理系统的其他处理器共享 ; 高速缓 存是否包含单独的指令高速缓存和单独的数据高速缓存 ; 高速缓存是否仅为指令高速缓 存; 高速缓存是否仅为数据高速缓存 ; 以及高速缓存是否为统一的指令和数据高速缓存。
     本发明旨在提供符合现有体系结构的新的指令功能性, 所述新的指令功能性可以 减轻对诸如通用寄存器之类的体系结构资源的依赖, 提高采用新指令的软件版本的功能性 和性能。 附图说明 在说明书结尾处的权利要求中具体指出并明确要求保护了被视为本发明的主题。 从下面结合附图的详细说明, 本发明的上述和其他目标、 特性和优点将变得显而易见, 这些 附图是 :
     图 1A 是示出现有技术的主计算机系统的实例的示意图 ;
     图 1B 是示出现有技术的被仿真主计算机系统的实例的示意图 ;
     图 1C 是示出现有技术的计算机系统的实例的示意图 ; 图 2 是示出现有技术的计算机网络的实例的示意图 ; 图 3 是示出现有技术的计算机系统的元件的示意图 ; 图 4A-4C 示出了现有技术的计算机系统的详细元件 ; 图 5A-5F 示出了计算机系统的机器指令格式 ; 图 6 示出了本发明的实施例的指令格式实例 ; 图 7 示出了根据本发明的实施例的属性标识符 ; 以及 图 8 示出了本发明的实施例的功能实例的流程。具体实施方式
     在一个实施例中, 本发明可通过软件 ( 有时称为许可内码 (LIC)、 固件、 微代码、 毫 代码、 微微码等, 它们均适用于本发明 ) 实现。参考图 1A, 体现本发明的软件程序代码通常 由系统 50 中被称为 CPU( 中央处理单元 )1 的处理器从诸如 CD-ROM 驱动器、 磁带驱动器或 硬盘之类的长期存储介质 7 进行访问。所述软件程序代码可位于诸如软盘、 硬盘驱动器或 CD-ROM 之类的各种已知介质中的任何介质上以便与数据处理系统一起使用。 所述代码既可 通过此类介质分发, 也可从计算机存储器 2 分发给用户, 或者通过网络 10 从某个计算机系 统的存储装置分发给其他计算机系统以供此类其他系统的用户使用。 备选地, 所述程序代码可以位于存储器 2 中, 由处理器 1 使用处理器总线进行访 问。 此类程序代码包括控制各种计算机组件的功能及交互的操作系统以及一个或多个应用 程序。 程序代码一般从密集存储介质 11 分页到高速存储器 2, 在高速存储器 2 中, 此类程序 代码可由处理器 1 进行处理。使用存储器、 物理介质中的软件程序代码以及 / 或者通过网 络分发软件代码的技术和方法是公知的, 此处不做进一步讨论。 程序代码, 当被创建并存储 在有形介质 ( 包括但不限于电子存储器模块 (RAM)、 闪存、 光盘 (CD)、 DVD、 磁带等 ) 上时, 通 常被称为 “计算机程序产品” 。 计算机程序产品介质一般优选地由计算机系统中的处理电路 读取以便由所述处理电路执行。
     图 1C 示出了其中可实现本发明的代表性工作站或服务器硬件系统。图 1C 的系 统 100 包括诸如个人计算机、 工作站或服务器之类的代表性计算机系统 101, 其中包括可选 外围设备。工作站 101 包括一个或多个处理器 106 和用于根据已知技术连接处理器 ( 多 个 )106 与系统 101 的其他组件以及使能它们之间的通信的总线。所述总线将处理器 106 连接到存储器 105 和长期存储装置 107, 长期存储装置 107 包括可例如硬盘驱动器 ( 包括例 如磁介质、 CD、 DVD 和闪存中的任意一项 ) 或磁带驱动器。系统 101 还可包括用户接口适配 器, 它通过总线将微处理器 106 连接到一个或多个接口设备, 例如键盘 104、 鼠标 103、 打印 机 / 扫描仪 110 和 / 或其他接口设备, 后者可以是诸如触摸感应屏幕、 数字输入小键盘之类 的任何用户接口设备。所述总线还通过显示适配器将诸如 LCD 屏幕或监视器之类的显示设 备 102 连接到微处理器 106。
     系统 101 可通过能够与网络 109 通信 108 的网络适配器与其他计算机或计算机网 络进行通信。网络适配器的实例包括信道、 令牌环、 以太网或调制解调器。备选地, 工作站 101 可使用诸如 CDPD( 蜂窝数字分组数据 ) 卡之类的无线接口通信。工作站 101 可与局域 网 (LAN) 或广域网 (WAN) 中的其他此类计算机关联, 或者工作站 101 可以是具有其他计算
     机的客户机 / 服务器布置中的客户机等。所有这些配置以及相应的通信硬件和软件都是本 领域公知的。
     图 2 示出了其中可实现本发明的数据处理网络 200。 数据处理网络 200 可包括多个 单独的网络, 例如无线网络和有线网络, 每个网络可包括多个单独的工作站 101、 201、 202、 203、 204。 此外, 本领域中的技术人员将理解, 可以包括一个或多个局域网, 其中局域网可包 括多个与主处理器相连的智能工作站。
     仍参考图 2, 所述网络还可包括大型计算机或服务器, 例如网关计算机 ( 客户机服 务器 206) 或应用服务器 ( 可访问数据存储库并且还可以直接从工作站 205 访问的远程服 务器 208)。网关计算机 206 充当每个网络 207 的入口点。在将一种联网协议连接到另一种 联网协议时需要网关。网关 206 优选地通过通信链路与另一网络 ( 例如互联网 207) 相连。 网关 206 还可以使用通信链路与一个或多个工作站 101、 201、 202、 203、 204 直接相连。网关 TM 计算机可使用 IBM 公司提供的 IBM eServer zSeries z9 Server 实现。
     体现本发明的软件编程代码通常由系统 101 的处理器 106 从诸如 CD-ROM 驱动器 或硬盘驱动器之类的长期存储介质 107 进行访问。所述软件编程代码可位于诸如软盘、 硬 盘驱动器或 CD-ROM 之类的各种已知介质中的任何介质上以便与数据处理系统一起使用。 所述代码既可通过此类介质分发, 也可分发给用户 210、 211, 或者从某个计算机系统的存储 器或存储装置分发给其他计算机系统以供此类其他系统的用户使用。 备选地, 编程代码 111 可以位于存储器 105 中, 由处理器 106 使用处理器总线进行 访问。 此类编程代码包括控制各种计算机组件的功能及交互的操作系统以及一个或多个应 用程序 112。程序代码一般从密集存储介质 107 分页到高速存储器 105, 在高速存储器 105 中, 此类程序代码可由处理器 106 进行处理。使用存储器、 物理介质中的软件编程代码以及 / 或者通过网络分发软件代码的技术和方法是公知的, 此处不做进一步讨论。程序代码, 当 被创建并存储在有形介质 ( 包括但不限于电子存储器模块 (RAM)、 闪存、 光盘 (CD)、 DVD、 磁 带等 ) 上时, 通常被称为 “计算机程序产品” 。计算机程序产品介质一般优选地由计算机系 统中的处理电路读取以便由所述处理电路执行。
     处理器最容易使用的高速缓存 ( 一般比处理器的其他高速缓存更快和更小 ) 是最 低级别 (L1 或一级 ) 的高速缓存, 而主存储装置 ( 主存储器 ) 是最高级别的高速缓存 (L3, 如果有 3 个级别 )。最低级别的高速缓存通常被分为保存要执行的机器指令的指令高速缓 存 (I-Cache) 和保存数据操作数的数据高速缓存 (D-Cache)。
     参考图 3, 示出了处理器 106 的示例性处理器实施例。通常, 采用一个或多个级别 的高速缓存 303 以缓冲存储块以便提高处理器性能。高速缓存 303 是高速缓冲器, 其中保 存可能要使用的存储器数据的高速缓存行 (cache line)。典型的高速缓存行是 64、 128 或 256 字节的存储器数据。 通常采用单独的高速缓存进行指令缓存而不是数据缓存。 通常, 通 过本领域公知的各种 “窥探” 算法提供高速缓存一致性 ( 存储器和高速缓存中的行的副本 的同步 )。处理器系统的主存储装置 105 通常被称为高速缓存。在具有 4 个级别的高速缓 存 303 的处理器系统中, 主存储装置 105 有时被称为 5 级 (L5) 高速缓存, 因为它通常速度 较快并且仅保存可用于计算机系统的非易失性存储 (DASD、 磁带等 ) 的一部分。 主存储装置 105“缓存” 由操作系统对主存储 105 装置执行页入和页出的数据页。
     程序计数器 ( 指令计数器 )311 跟踪当前要执行的指令的地址。z/Architecture
     处理器中的程序计数器为 64 位并且可以被截断为 31 或 24 位以支持较早的寻址限制。程 序计数器通常包含在计算机的 PSW( 程序状态字 ) 中, 以便在上下文切换过程中持续使用。 因此, 具有程序计数器值的正在进行的程序可以例如由操作系统中断 ( 从程序环境上下文 切换到操作系统环境 )。程序的 PSW 在程序处于不活动状态时维护程序计数器值, 并且在 操作系统执行时使用操作系统的程序计数器 ( 在 PSW 中 )。通常, 程序计数器增加的量等 于当前指令的字节数。RISC( 精简指令集计算 ) 指令通常为固定长度, 而 CISC( 复杂指令 集计算 ) 指令通常为可变长度。IBMz/Architecture 的指令是长度为 2、 4 或 6 字节的 CISC 指令。程序计数器 311 例如由上下文切换操作或分支指令的跳转操作修改。在上下文切换 操作中, 将当前程序计数器值连同有关正在执行的程序的其他状态信息 ( 例如条件码 ) 一 起保存在程序状态字 (PSW) 中, 并且加载指向要执行的新程序模块的指令的新程序计数器 值。通过将分支指令的结果加载到程序计数器 311 中执行跳转操作, 以便允许程序做出决 定或在程序内循环。
     通常, 采用指令取回单元 305 以代表处理器 106 取回指令。所述取回单元将取回 跳转指令的 “下一顺序指令” ( 目标指令 ) 或上下文切换之后的程序的第一指令。现代指 令取回单元通常采用预取技术以便根据可能使用预取的指令的概率推测性地预取指令。 例 如, 取回单元可取回 16 字节的指令, 其包括下一顺序指令以及其他顺序指令的附加字节。
     取回的指令然后由处理器 106 执行。在一个实施例中, 将取回的指令 ( 多个 ) 传 送到取回单元的分派单元 306。所述分派单元对指令 ( 多个 ) 进行解码并将有关已解码指 令 ( 多个 ) 的信息转发到适当的单元 307、 308、 310。通常, 执行单元 307 将从指令取回单元 305 接收有关已解码的算术指令的信息, 并根据指令的操作码对操作数执行算术运算。优 选地, 从存储器 105、 架构的寄存器 309 或从正在执行的指令的立即字段 (immediatefield) 向执行单元 307 提供操作数。当存储时, 将执行的结果存储在存储器 105、 寄存器 309 或其 他机器硬件 ( 例如控制寄存器、 PSW 寄存器等 ) 中。
     处理器 106 通常具有一个或多个执行单元 307、 308、 310 以执行指令的功能。参考 图 4A, 执行单元 307 可以通过接口逻辑 407 与架构的通用寄存器 309、 解码 / 分派单元 306、 加载存储单元 310 以及其他 401 处理器单元通信。执行单元 307 可以采用数个寄存器电路 403、 404、 405 以保存算术逻辑单元 (ALU)402 将处理的信息。ALU 执行诸如加、 减、 乘、 除之 类的算术运算以及诸如与、 或及异或 (xor)、 循环及移位之类的逻辑功能。优选地, ALU 支持 依设计而定的专门运算。 其他电路可以提供例如包括条件码和恢复支持逻辑的其他架构的 工具 408。通常, 将 ALU 运算的结果保存在输出寄存器电路 406 中, 输出寄存器电路 406 可 以将结果转发到各种其他处理功能。处理单元可具有多种布置, 本描述仅旨在提供一个实 施例的代表性理解。
     ADD 指令例如在具有算术和逻辑功能的执行单元 307 中执行, 而浮点指令例如在 具有专门浮点能力的浮点执行中执行。优选地, 执行单元通过针对操作数执行操作码定义 的功能来处理由指令标识的操作数。例如, 执行单元 307 可以对在由指令的寄存器字段标 识的两个寄存器 309 中找到的操作数执行 ADD 指令。
     执行单元 307 对两个操作数执行算术加法并将结果存储在第三操作数中, 其中 第三操作数可以是第三寄存器或两个源寄存器之一。执行单元优选地使用算术逻辑单元 (ALU)402, 算术逻辑单元 (ALU)402 能够执行各种逻辑功能 ( 例如 Shift、 Rotate、 “与” 、“或” 和 “异或” ) 以及各种代数功能 ( 包括加、 减、 乘、 除中的任一种 )。有些 ALU 402 设计 用于标量运算而有些用于浮点运算。根据体系结构, 数据可以是大端 (BigEndian)( 其中最 低有效字节在最高字节地址处 ) 或小端 ( 其中最低有效字节在最低字节地址处 )。IBM z/ Architecture 是大端。根据体系结构, 带符号字段可以是符号以及 1 的补码或 2 的补码的 量值。 2 的补码数是有利的, 因为 ALU 不需要设计减法功能, 原因是采用 2 的补码的负值或正 值在 ALU 内仅需要加法。数字通常以速记法描述, 例如其中一个 12 位字段定义一个 4,096 字节块的地址, 并且通常被描述为 4KB( 千字节 ) 块。
     参考图 4B, 通常将用于执行分支指令的分支指令信息发送到分支单元 308, 分支 单元 308 通常采用分支预测算法 ( 例如分支历史表 432) 以便在其他条件运算完成之前预 测分支的结果。 在条件运算完成之前, 将取回并推测地执行当前分支指令的目标。 当条件运 算完成时, 根据条件运算的条件以及推测的结果, 将完成或丢弃推测地执行的分支指令。 典 型的分支指令可以测试条件码并分支到目标地址, 如果条件码满足分支指令的分支要求, 则可以根据若干数值 ( 例如包括在寄存器字段或指令的立即字段中找到的数值 ) 计算目标 地址。分支单元 308 可以采用具有多个输入寄存器电路 427、 428、 429 以及一个输出寄存器 电路 430 的 ALU 426。分支单元 308 可以例如与通用寄存器 309、 解码分派单元 306 或其他 电路 425 通信。 一组指令的执行可以因各种原因被中断, 这些原因例如包括由操作系统发起的上 下文切换、 导致上下文切换的程序异常或错误、 导致上下文切换的 I/O 中断信号或多个程 序的多线程活动 ( 在多线程环境中 )。 优选地, 上下文切换操作将保存有关当前正在执行的 程序的状态信息, 然后加载有关被调用的其他程序的状态信息。 例如, 可以将状态信息保存 在硬件寄存器或存储器中。状态信息优选地包括指向要执行的下一指令的程序计数器值、 条件码、 存储器转换信息以及架构的寄存器内容。可以由硬件电路、 应用程序、 操作系统程 序或固件代码 ( 微代码、 微微码或许可内码 (LIC)) 单独或联合实施上下文切换活动。
     处理器根据指令定义的方法访问操作数。 指令可以提供使用指令的一部分的值的 立即操作数, 可以提供一个或多个显式指向通用寄存器或专用寄存器 ( 例如浮点寄存器 ) 的寄存器字段。指令可以使用由操作码字段标识的隐含寄存器作为操作数。指令可以针对 操作数使用存储器位置。操作数的存储器位置可以由寄存器、 立即字段或寄存器和立即字 段的组合提供, 如 z/Architecture 长位移工具所例示的, 其中指令例如定义基寄存器、 索 引寄存器、 立即字段 ( 位移字段 ), 这些字段共同提供操作数在存储器中的地址。 在此, 位置 通常暗示主存储器 ( 主存储装置 ) 中的位置, 除非另外说明。
     参考图 4C, 处理器使用加载 / 存储单元 310 访问存储装置。加载 / 存储单元 310 可以通过获取目标操作数在存储器 303 中的地址并将操作数加载在寄存器 309 或其他存储 器 303 位置中来执行加载操作, 或者可以通过获取目标操作数在存储器 303 中的地址并将 从寄存器 309 或其他存储器 303 位置获取的数据存储在存储器 303 内的目标操作数位置中 来执行存储操作。加载 / 存储单元 310 可以是推测性的, 并且可以按照相对指令顺序而言 乱序的顺序访问存储器, 但加载 / 存储单元 310 必须对程序而言保持按顺序执行指令的表 象。加载 / 存储单元 310 可以与通用寄存器 309、 解码 / 分派单元 306、 高速缓存 / 存储器 接口 303 或其他元件 455 通信, 并且包括各种寄存器电路、 ALU 458 以及控制逻辑 463 以计 算存储地址并提供管道定序从而保持操作按顺序执行。如本领域公知的, 有些操作可以是
     乱序的, 但加载 / 存储单元提供了功能以使乱序操作对程序而言好像是按顺序执行的。
     优选地, 应用程序 “看到” 的地址通常被称为虚拟地址。虚拟地址有时被称为 “逻 辑地址” 和 “有效地址” 。这些地址是虚拟的, 因为它们通过各种动态地址转换 (DAT)312 技 术之一被重定向到物理存储器位置, 这些技术包括但不限于仅使用偏移值向虚拟地址添加 前缀、 通过一个或多个转换表转换虚拟地址, 所述转换表优选地单独或同时包括至少一个 段表和页表, 优选地, 所述段表具有指向页表的表项。在 z/Architecture 中, 提供了包括区 第一表、 区第二表、 区第三表、 段表以及可选的页表的转换层次结构。通常通过使用转换后 备缓冲器 (TLB) 提高地址转换的性能, 转换后备缓冲器包括将虚拟地址映射到关联的物理 存储器位置的表项。当 DAT 312 使用转换表来转换虚拟地址时, 将创建表项。然后, 虚拟地 址的后续使用可以使用快速 TLB 而不是缓慢顺序转换表访问的表项。可以由包括 LRU( 最 近最少使用 ) 在内的各种替换算法管理 TLB 内容。
     如果处理器是多处理器系统的处理器, 则每个处理器都有责任保持诸如 I/O、 高速 缓存、 TLB 以及存储器之类的共享资源互锁以实现一致性。通常, 将使用 “窥探” 技术保持高 速缓存一致性。在窥探环境中, 每个高速缓存行可以被标记为处于共享状态、 独占状态、 已 更改状态、 无效状态等中的任何一种状态以便于共享。 I/O 单元 304 为处理器提供用于连接例如包括磁带、 盘、 打印机、 显示器以及网络 在内的外围设备的手段。I/O 单元通常由软件驱动程序呈现给计算机程序。在诸如 IBM 的 z/Series 之类的大型机中, 通道适配器和开放系统适配器是大型机的 I/O 单元, 它们在操 作系统和外围设备之间提供通信。
     以下来自 “z/Architecture 操作原理” 的描述将介绍计算机系统的体系结构视 图:
     存储 :
     计算机系统包括主存储装置中的信息以及寻址、 保护、 引用和更改记录。 寻址的某 些方面包括地址的格式、 地址空间的概念、 各种类型的地址以及将一种类型地址转换为另 一种类型地址的方式。某些主存储装置包括永久分配的存储位置。主存储装置为系统提供 数据的可直接寻址的快速访问存储。在处理数据和程序之前, 必须将它们 ( 从输入设备 ) 加载到主存储装置中。
     主存储装置可以包括一个或多个较小、 较快访问的缓冲存储装置, 有时被称为高 速缓存。高速缓存通常在物理上与 CPU 或 I/O 处理器关联。通常, 程序无法观察到物理结 构的影响 ( 对性能的影响除外 ) 以及不同存储介质的使用。
     可以针对指令和数据操作数维护单独的高速缓存。 高速缓存内的信息被保存在整 数边界上的连续字节中, 这些字节被称为高速缓存块或高速缓存行 ( 或简称行 )。 模型可以 提供 EXTRACT CACHE ATTRIBUTE 指令, 此指令可返回以字节表示的高速缓存行的大小。模 型还可以提供 PREFETCH DATA 和 PREFETCH DATA RELATIVE LONG 指令, 这些指令可影响存 储装置到数据或指令高速缓存的预取或从高速缓存释放数据。
     存储装置被视为位的水平长串。对于多数操作, 按照从左到右的顺序对存储装置 进行访问。位串被细分为八位单位。一个八位单位被称为一个字节, 字节是所有信息格式 的基本构建块。存储装置中的每个字节位置由唯一的非负整数标识, 该整数是此字节位置 的地址, 或者简单说是字节地址。相邻字节位置具有连续地址, 在左侧以 0 开始, 并按照从
     左到右的顺序继续。地址是无符号的二进制整数, 并且是 24、 31 或 64 位。
     信息在存储装置与 CPU 或通道子系统之间传输, 一次一个字节或一组字节。除非 另外指定, 否则存储装置中的一组字节由此组的最左侧字节寻址。此组中的字节数由要执 行的操作隐式或显式指定。当在 CPU 操作中使用时, 一组字节被称为字段。在每组字节内, 按照从左到右的顺序对位进行编号。最左侧的位有时被称为 “高阶” 位, 而最右侧的位被称 为 “低阶” 位。但是, 位编号不是存储地址。只能对字节进行寻址。要操作存储装置中字节 的个别位, 需要访问整个字节。字节中的位从左到右编号为 0 到 7。地址中的位可以编号 为 8-31 或 40-63( 对于 24 位地址 ) 或者 1-31 或 33-63( 对于 31 位地址 ) ; 对于 64 位地址, 编号为 0-63。在多个字节的任何其他固定长度格式内, 组成格式的位从 0 开始连续编号。 为了检测错误并且优选地为了纠正错误, 可以随每个字节或一组字节传输一个或多个校验 位。此类校验位由机器自动生成并且无法由程序直接控制。存储容量以字节数表示。当存 储操作数字段的长度由指令的操作码暗示时, 字段被称为具有固定长度, 该长度可以是 1、 2、 4、 8 或 16 字节。针对某些指令可能暗示较大的字段。当存储操作数字段的长度未被暗示 而是显式指定时, 字段被称为具有可变长度。可变长度操作数的长度可以以一个字节的增 量来变化。当信息被放置在存储装置中时, 只有那些包括在指定字段中的字节位置的内容 被替换, 即使存储装置的物理路径的宽度大于所存储的字段的长度。 特定信息单位必须在存储装置中的整数边界上。 对于存储地址是以字节表示的单 位长度的倍数的信息单位, 边界被称为整数边界。整数边界上 2、 4、 8 以及 16 字节的字段被 赋予特殊名称。半字是 2 字节边界上的一组 2 个连续字节, 并且是指令的基本构建块。字 是 4 字节边界上的一组 4 个连续字节。双字是 8 字节边界上的一组 8 个连续字节。四字是 16 字节边界上的一组 16 个连续字节。 当存储地址指定半字、 字、 双字以及四字时, 地址的二 进制表示分别在最右侧包含 1、 2、 3 或 4 个 0 位。指令必须在 2 字节整数边界上。多数指令 的存储操作数没有边界对齐要求。
     在针对指令和数据操作数实现单独高速缓存的模型中, 如果程序对随后从其取回 指令的高速缓存行进行存储, 可能会经历显著的延迟, 无论存储是否更改随后取回的指令 都是如此。
     指令 :
     通常, CPU 的操作由存储装置中的指令控制, 这些指令按顺序执行, 从左到右按照 存储地址的升序一次执行一个指令。分支、 LOAD PSW、 中断、 SIGNAL PROCESSOR 指令或手动 干预可导致顺序操作中的更改。
     优选地, 指令包括两个主要部分 :
     ●操作码 (opcode), 其指定要执行的操作
     ●可选地, 所参与的操作数的指定
     图 5A-5F 中示出了 z/Architecture 的指令格式。指令可以仅提供操作码 501, 或 操作码以及包括立即操作数或用于在寄存器或存储器中定位操作数的寄存器指定符的各 种字段。操作码可向硬件指示要使用隐含资源 ( 操作数等 ), 例如一个或多个特定通用寄 存器 (GPR)。操作数可以分为三类 : 位于寄存器中的操作数、 立即操作数以及存储装置中的 操作数。操作数可以被显式或隐式地指定。寄存器操作数可以位于通用寄存器、 浮点寄存 器、 存取寄存器或控制寄存器中, 寄存器的类型由操作码标识。通过标识指令中的 4 位字段
     ( 称为 R 字段 ) 中的寄存器来指定包含操作数的寄存器。 对于某些指令, 操作数位于隐式指 定的寄存器中, 所述寄存器由操作码暗示。 立即操作数包含在指令内, 并且包含立即操作数 的 8 位、 16 位或 32 位字段被称为 I 字段。存储装置中的操作数可以具有暗示的长度 ; 由位 掩码指定 ; 由指令中的 4 位或 8 位长度规范 ( 称为 L 字段 ) 指定 ; 或者具有由通用寄存器的 内容指定的长度。 存储装置中的操作数地址通过使用通用寄存器的内容作为地址一部分的 格式指定。这样可以 :
     通过使用缩写符号指定完整地址 ;
     使用针对操作数采用通用寄存器的指令执行地址操纵 ;
     通过程序手段修改地址而无需更改指令流 ;
     通过直接使用从其他程序接收的地址而独立于数据区域的位置进行操作。
     用于引用存储装置的地址被包含在由指令中的 R 字段指定的寄存器中, 或者从分 别由指令中的 B、 X 和 D 字段指定的基地址、 索引和位移计算。当 CPU 处于存取寄存器模式 时, B 或 R 字段除了用于指定地址之外, 还可以指定存取寄存器。为了描述指令的执行, 优 选地将操作数指定为第一和第二操作数, 并且在某些情况下, 指定为第三和第四操作数。 通 常, 两个操作数参与指令执行, 并且结果将替换第一操作数。
     指令的长度为 1、 2 或 3 个半字, 并且必须位于存储装置中的半字边界上。参考 图 5A-5F, 这些图示出指令格式, 每个指令采用 25 种基本格式之一 : E 501、 I 502、 RI 503 504、 RIE 505 551 552 553 554、 RIL 506 507、 RIS 555、 RR 510、 RRE 511、 RRF 512 513 514、 RRS、 RS 516 517、 RSI520、 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 有三种变型, RI、 RIL、 RS 以及 RSY 有两种变型, RIE 和 SS 有五种变型。
     格式名称通常指示参与运算的操作数的类以及有关字段的一些详细信息 :
     ● RIS 表示寄存器 - 立即操作和存储操作。
     ● RRS 表示寄存器 - 寄存器操作和存储操作。
     ● SIL 表示存储 - 立即操作, 包含 16 位立即字段。
     在 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 格式中, 操作码在指令的第一个字 节和第六个字节中。操作码的第一个字节或唯一字节的前两位指定指令的长度和格式, 如 下所示 :
     在 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 中或占用整个寄存器, 具体取决于指令。在 I 格式中, 指令的 8 位立即数据字段 (I 字段 ) 的内容直接用作操作数。在 SI 格式中, 指令的 8 位立即数据字段 (I2 字段 ) 的内容直接用作第二操作数。B1 和 D1 字段 指定长度为 1 字节的第一操作数。在 SIY 格式中, 操作相同, 只是使用 DH1 和 DL1 字段替代 D1 字段。在指令 ADDHALFWORD IMMEDIATE、 COMPARE HALFWORD IMMEDIATE、 LOAD HALFWORD IMMEDIATE 以及 MULTIPLY HALFWORDIMMEDIATE 的 RI 格式中, 指令的 16 位 I2 字段的内容直 接用作带符号的二进制整数, 并且 R1 字段指定第一操作数, 该操作数长度为 32 或 64 位, 具 体取决于指令。对于指令 TEST UNDER MASK(TMHH, TMHL, TMLH, TMLL) 中, I2 字段的内容用 作掩码, 并且 R1 字段指定长度为 64 位的第一操作数。
     对于指令 INSERT IMMEDIATE、 AND IMMEDIATE、 ORIMMEDIATE 以及 LOAD LOGICAL IMMEDIATE, I2 字段的内容用作无符号二进制整数或逻辑值, 并且 R1 字段指定长度为 64 位 的第一操作数。对于 RI 和 RSI 格式的相对分支指令, 16 位 I2 字段的内容用作指定半字数 的带符号二进制整数。此数值在与分支指令的地址相加时, 指定分支地址。对于 RIL 格式 的相对分支指令, I2 字段为 32 位并且按照相同的方式使用。
     对于 RI 和 RSI 格式的相对分支指令, 16 位 I2 字段的内容用作指定半字数的带符 号二进制整数。 此数值在与分支指令的地址相加时, 指定分支地址。 对于 RIL 格式的相对分 支指令, I2 字段为 32 位并且按照相同的方式使用。对于 RIE 格式指令 COMPARE IMMEDIATE AND BRANCHRELATIVE 和 COMPARE LOGICAL IMMEDIATE AND BRANCHRELATIVE, 8 位 I2 字段的 内容直接用作第二操作数。对于 RIE 格式指令 COMPARE IMMEDIATE AND BRANCH、 COMPARE IMMEDIATEAND TRAP、 COMPARE LOGICAL IMMEDIATE AND BRANCH 以 及 COMPARE LOGICAL IMMEDIATE AND TRAP, 16 位 I2 字段的内容直接用作第二操作数。 对于 RIE 格式指令 COMPARE AND BRANCHRELATIVE、 COMPARE IMMEDIATE AND BRANCH RELATIVE、 COMPARE LOGICAL AND BRANCH RELATIVE 以及 COMPARELOGICAL IMMEDIATE AND BRANCH RELATIVE, 16 位 I4 字段 的内容用作指定半字数的带符号二进制整数, 这些半字被与指令的地址相加以形成分支地 址。
     对于 RIL 格式指令 ADD IMMEDIATE、 ADD LOGICALIMMEDIATE、 ADD LOGICAL WITH SIGNED IMMEDIATE、 COMPARE IMMEDIATE、 COMPARE LOGICAL IMMEDIATE、 LOADIMMEDIATE 以 及 MULTIPLY SINGLE IMMEDIATE, 32 位 I2 字段的内容直接用作第二操作数。
     对于 RIS 格式指令, 8 位 I2 字段的内容直接用作第二操作数。在 SIL 格式中, 16 位 I2 字段的内容直接用作第二操作数。B1 和 D1 字段指定第一操作数, 如下所述。
     在 RSL、 SI、 SIL、 SSE 以及多数 SS 格式中, 由 B1 字段指定的通用寄存器的内容被 与 D1 字段的内容相加以形成第一操作数地址。在 RS、 RSY、 S、 SIY、 SS 以及 SSE 格式中, 由 B2 字段指定的通用寄存器的内容被与 D2 字段或 DH2 和 DL2 字段的内容相加以形成第二操 作数地址。在 RX、 RXE、 RXF 以及 RXY 格式中, 由 X2 和 B2 字段指定的通用寄存器的内容被 与 D2 字段或 DH2 和 DL2 字段的内容相加以形成第二操作数地址。在 RIS 和 RRS 格式以及 一种 SS 格式中, 由 B4 字段指定的通用寄存器的内容被与 D4 字段的内容相加以形成第四操 作数地址。
     在 具 有 单 个 8 位 长 字 段 的 SS 格 式 中, 对 于 指 令 AND(NC)、 EXCLUSIVE OR(XC)、 MOVE(MVC)、 MOVE NUMERICS、 MOVEZONES 以及 OR(OC), L 指定由第一操作数地址指定的字节 的右侧的附加操作数字节数。因此, 第一操作数以字节表示的长度是 1-256, 与 L 中的长度代码 0-255 对应。存储结果将替换第一操作数, 并且从不存储在由地址和长度指定的字 段的外部。在此格式中, 第二操作数与第一操作数具有相同的长度。上述定义具有应用到 EDIT、 EDIT AND MASK、 PACKASCII、 PACK UNICODE、 TRANSLATE、 TRANSLATE AND TEST、 UNPACK ASCII 以及 UNPACK UNICODE 的变型。
     在具有两个长度字段的 SS 格式中, 以及在 RSL 格式中, L1 指定由第一操作数地址 指定的字节的右侧的附加操作数字节数。因此, 第一操作数以字节表示的长度是 1-16, 与 L1 中的长度代码 0-15 对应。 类似地, L2 指定由第二操作数地址指定的位置的右侧的附加操 作数字节数。 结果将替换第一操作数, 并且从不存储在由地址和长度指定的字段的外部。 如 果第一操作数长于第二操作数, 则第二操作数在左侧使用 0 扩展直至达到第一操作数的长 度。这种扩展不会修改存储装置中的第二操作数。在具有两个 R 字段的 SS 格式中, 如 MOVE TO PRIMARY、 MOVE TO SECONDARY 以及 MOVE WITH KEY 指令所使用的, 由 R1 字段指定的通 用寄存器的内容是被称为实长度的 32 位无符号值。两个操作数都具有被称为有效长度的 长度。有效长度等于实长度或 256 中的较小者。指令将设置条件码以便于对循环进行编程 以便移动由实长度指定的总字节数。 还使用具有两个 R 字段的 SS 格式针对 LOAD MULTIPLE DISJOINT 指令指定寄存器范围以及两个存储操作数, 针对 PERFORM LOCKED OPERATION 指令 指定一个或两个寄存器以及一个或两个存储操作数。 B1、 B2、 X2 或 B4 字段中的任一字段中的 0 指示缺少对应的地址部分。对于缺少的 部分, 在形成中间和中使用 0, 与通用寄存器 0 的内容无关。位移 0 没有特殊的意义。
     当前 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 执行指令包括生成指令和操作数的地址。
     当从由当前 PSW 指定的位置取回指令时, 指令地址按指令中的字节数增加, 并执 行指令。 然后通过使用指令地址的新值以取回序列中的下一指令来重复相同的步骤。 在 24 24 位寻址模式下, 指令地址是环绕的, 指令地址 2 -2 处的半字后跟指令地址 0 处的半字。因 此, 在 24 位寻址模式下, 作为更新指令地址的结果, PSW 位位置 104 的任何进位都将丢失。 在 31 位或 64 位寻址模式下, 指令地址同样是环绕的, 指令地址 231-2 或 264-2 处的半字分别 后跟指令地址 0 处的半字。将分别丢失 PSW 位位置 97 或 64 的进位。
     引用存储装置的操作数地址从中间值得到, 该地址包含在通过指令中的 R 字段指 定的寄存器中, 或者从以下三个二进制数之和中计算得出 : 基地址、 索引和位移。基地址 (B) 是 64 位数, 包含在由程序在指令中的 4 位字段 ( 称为 B 字段 ) 中指定的通用寄存器中。 基地址可以用作为每个程序和数据区域单独寻址的手段。在数组型计算中, 它可以指定数 组的位置, 而在记录型处理中, 它可以标识记录。提供基地址以便为整个存储装置寻址。基 地址还可以用于编制索引。
     索引 (X) 是包含在由程序在指令中被称为 X 字段的 4 位字段中指定的通用寄存 器内的 64 位数。它只包括在由 RX-、 RXE- 和 RXY- 格式指令指定的地址中。RX-、 RXE- 和 RXY- 格式指令允许双索引 ; 也就是说, 所述索引可用于提供数组内元素的地址。
     位移 (D) 是包含在指令中被称为 D 字段的字段内的 12 位或 20 位数。12 位位移是 无符号的并且提供基地址指定的位置以外最多 4,095 字节的相对寻址。 20 位位移是带符号 的并且提供基地址位置以外最多 524,287 字节的相对寻址或提供该地址之前最多 524,288 字节的相对寻址。在数组型计算中, 可使用位移指定与元素关联的多个项 (item) 之一。在 处理记录时, 可使用位移标识记录中的项。12 位位移位于具有特定格式的指令的位位置 20-31。在具有某些格式的指令中, 第二 12 位位移还位于指令的位位置 36-47。
     20 位位移仅位于具有 RSY、 RXY 或 SIY 格式的指令中。在这些指令中, D 字段包括 位于位位置 20-31 中的 DL( 低 ) 字段和位于位位置 32-39 中的 DH( 高 ) 字段。如果安装了 长位移工具, 则通过在 DL 字段内容左侧附加 DH 字段内容来形成位移数值。如果未安装长 位移工具, 则通过在 DL 字段内容左侧附加 8 个 0 位来形成位移数值, 并且忽略 DH 字段的内 容。
     在形成中间和时, 基地址和索引被当作 64 位二进制整数进行处理。 12 位位移被当 作 12 位无符号二进制整数进行处理, 并且在左侧附加 52 个 0 位。20 位位移被当作 20 位带 符号二进制整数进行处理, 并且 44 个等于符号位的位被附加到左侧。3 个作为 64 位二进 制数进行添加, 忽略溢出。和始终为 64 位长并且用作中间值以形成生成的地址。中间值的 位被编号为 0-63。B1、 B2、 X2 或 B4 字段中的任一字段中的 0 都指示缺少对应的地址部分。 对于缺少的部分, 在形成中间和中使用 0, 与通用寄存器 0 的内容无关。位移 0 没有特殊的 意义。 当指令描述指定使用由 R 字段指定的通用寄存器的内容为存储装置中的操作数 寻址时, 寄存器内容被用作 64 位中间值。
     指令可指定同一通用寄存器用于地址计算和用作操作数地址两者。 地址计算在通 过运算更改寄存器 ( 如果有 ) 之前完成。除非在个别指令定义中指出, 否则所生成的操作 数地址指定存储装置中操作数的最左侧字节。
     所生成的操作数地址始终为 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。可以在索引和基地址寄存器中使用负值。这些值的位 0-32 在 31 位寻址模 式下被忽略, 并且位 0-39 在 24 位寻址模式下被忽略。
     对于分支指令, 发生分支时下一要执行的指令的地址被称为分支地址。取决于分 支指令, 指令格式可以为 RR、 RRE、 RX、 RXY、 RS、 RSY、 RSI、 RI、 RIE 或 RIL。在 RS、 RSY、 RX 和 RXY 格式中, 分支地址由基地址、 位移指定, 以及在 RX 和 RXY 格式中, 分支地址由索引指定。 在这些格式中, 中间值的生成所遵循的规则与生成操作数地址中间值的规则相同。在 RR 和 RRE 格式中, 由 R2 字段指定的通用寄存器的内容用作从其形成分支地址的中间值。通用寄 存器 0 不能被指定为包含分支地址。 R2 字段中的 0 值导致在不执行任何分支操作的情况下 执行指令。
     相对分支指令采用 RSI、 RI、 RIE 和 RIL 格式。在用于相对分支指令的 RSI、 RI 和 RIE 格式中, I2 字段的内容被当作指定多个半字的 16 位带符号二进制整数进行处理。在
     RIL 格式中, I2 字段的内容被当作指定多个半字的 32 位带符号二进制整数进行处理。分支 地址是 I2 字段指定的半字数与相对分支指令的地址的相加。
     采用 RSI、 RI、 RIE 或 RIL 格式的相对分支指令的 64 位中间值是两个加数之和, 并且忽略位位置 0 的溢出。在 RSI、 RI 或 RIE 格式中, 第一加数是 I2 字段的内容, 其中 1 个 0 位附加到右侧并且 47 个等于内容符号位的位附加到左侧, 但是对于 COMPARE AND BRANCH RELATIVE、 COMPARE IMMEDIATE AND BRANCH RELATIVE、 COMPARELOGICAL AND BRANCH RELATIVE 和 COMPARE LOGICALIMMEDIATE AND BRANCH RELATIVE, 第一加数是 I4 字段的内 容, 其中按照上文针对 I2 字段所述附加位。在 RIL 格式中, 第一加数是 I2 字段的内容, 其 中一个 0 位附加到右侧并且 31 个等于内容符号位的位附加到左侧。在所有格式中, 第二加 数是分支指令的 64 位地址。分支指令的地址是更新地址以便寻址下一顺序指令之前位于 PSW 中的指令地址, 或者是在使用 EXECUTE 时 EXECUTE 指令的目标的地址。如果在 24 位或 31 位寻址模式下使用 EXECUTE, 则分支指令的地址是左侧分别附加 40 或 33 个 0 的目标地 址。
     分支地址始终为 64 位长, 并且所述位编号为 0-63。分支地址替换当前 PWA 的位 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。
     对于若干分支指令, 分支操作依赖于满足指定条件。当条件不满足时, 不发生分 支, 继续正常的顺序指令执行, 并且不使用分支地址。当发生分支时, 分支地址的位 0-63 替 换当前 PSW 的位 64-127。不使用分支地址访问存储装置以作为分支操作的一部分。不会将 由于奇数分支地址导致的规范异常以及由取回分支位置处的指令导致的访问异常识别为 分支操作的一部分, 而是识别为与执行分支位置处的指令关联的异常。
     诸如 BRANCH AND SAVE 之类的分支指令可指定同一通用寄存器用于分支地址计算 并用作操作数位置。分支地址计算在执行操作的其余部分之前完成。
     第4章 “控制” 中说明的程序状态字 (PSW) 包含正确执行程序所需的信息。PSW 用 于控制指令顺序以及保存和指示与当前执行的程序相关的 CPU 状态。活动的或执行控制的 PSW 被称为当前 PSW。分支指令执行做出决策、 循环控制以及子例程链接的功能。分支指令 通过将新的指令地址引入当前 PSW 来影响指令排序。包含 16 位 I2 字段的相对分支指令 允许在不使用基寄存器的情况下, 转移到相对于所述分支指令的位置最大正负偏移分别为 64K-2 字节或 64K 字节的位置。包含 32 位 I2 字段的相对分支指令允许在不使用基寄存器 的情况下, 转移到相对于所述分支指令的位置最大正负偏移分别为 4G-2 字节或 4G 字节的 位置。
     用于做出决策的工具由 BRANCH ON CONDITION、 BRANCHRELATIVE ON CONDITION 和 BRANCH RELATIVE ON CONDITIONLONG 指令提供。这些指令检查影响算术、 逻辑和 I/O 运算 中大部分运算的结果的条件码。包括两个位的所述条件码提供四个可能的条件码设置 : 0、 1、 2 和 3。
     任何设置的具体含义都取决于设置条件码的操作。例如, 条件码反映诸如零、 非零、 第一操作数取高、 等于、 溢出和子通道忙之类的条件。 一旦被设置, 所述条件码就保持不 变, 直到被导致设置不同条件码的指令修改为止。
     可 通 过 使 用 BRANCH ON CONDITION、 BRANCH RELATIVE ONCONDITION 和 BRANCH RELATIVE ON CONDITION LONG 执行循环控制以测试地址算术和计数运算的结果。 对于某些 特别频繁的算术和测试组合, 提供了 BRANCH ON COUNT、 BRANCH ON INDEX HIGH、 BRANCH ON INDEX LOW OR EQUAL, 同时还提供了这些指令的相对分支等价指令。这些分支通过专门化 而提高了这些任务的性能。
     当不需要更改寻址模式时, 子例程链接通过 BRANCH AND LINK 和 BRANCH AND SAVE 指令提供。 ( 此处对 BRANCH AND SAVE 的描述也适用于 BRANCH RELATIVE AND SAVE 和 BRANCH RELATIVEAND SAVE LONG)。这两个指令不仅允许引入新的指令地址, 而且还允许保留返回 地址和关联的信息。所述返回地址是存储装置中分支指令后紧跟的指令的地址, 但是将分 支指令作为目标的 EXECUTE 指令后紧跟的指令的地址不是返回地址。
     BRANCH AND LINK 和 BRANCH AND SAVE 都包含 R1 字段。这两个指令通过字段 ( 取 决于指令 ) 形成分支地址。指令的操作被概述如下 : 在 24 位寻址模式下, 两个指令将返回 地址放置在通用寄存器 R1 的位位置 40-63 中并且使该寄存器的位 0-31 保持不变。BRANCH AND LINK 将指令的指令长度代码以及条件码和来自当前 PSW 的程序掩码放置在通用寄存 器 R1 的位位置 32-39 中, BRANCH AND SAVE 将 0 放置在这些位位置中。
     ●在 31 位寻址模式下, 两个指令将返回地址放置在通用寄存器 R1 的位位置 33-63 中以及将 1 放置在通用寄存器 R1 的位位置 32 中, 并且使该寄存器的位 0-31 保持不变。
     ●在 64 位寻址模式下, 两个指令将返回地址放置在通用寄存器 R1 的位位置 0-63 中。
     ●在任意寻址模式下, 两个指令都在当前寻址模式的控制下生成分支地址。所述 指令将分支地址的位 0-63 放置在 PSW 的位位置 64-127 中。在 RR 格式中, 如果指令的 R2 字段为 0, 则两个指令不执行分支操作。
     可以看到, 在 24 位或 31 位寻址模式下, BRANCH AND SAVE 将基本寻址模式位 (PSW 的位 32) 放置在通用寄存器 R1 的位位置 32 中。BRANCH AND LINK 在 31 位寻址模式下也 执行此操作。如果在链接期间需要更改寻址模式, 则需要使用指令 BRANCH AND SAVE AND SETMODE 和 BRANCH AND SET MODE。这些指令包含 R1 和 R2 字段。指令的操作被概述如下 :
     ● BRANCH AND SAVE AND SET MODE 将通用寄存器 R1 的内容设为与 BRANCH AND SAVE 相同。此外, 该指令将扩展寻址模式位 (PSW 的位 31) 放置在该寄存器的位位置 63 中。
     ● BRANCH AND SET MODE, 如果 R1 不为 0, 执行以下操作。 在 24 位或 31 位模式下, 该指令将 PSW 的位 32 放置在通用寄存器 R1 的位位置 32 中, 并且使该寄存器的位 0-31 和 33-63 保持不变。注意, 如果该寄存器包含指令地址, 则该寄存器的位 63 应该为 0。在 64 位模式下, 该指令将 PSW 的位 31(1) 放置在通用寄存器 R1 的位位置 63 中, 并且使该寄存器 的位 0-62 保持不变。
     ●当 R2 不为 0 时, 两个指令均设置寻址模式并执行分支操作, 如下所示。通用寄 存器 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 寄存器指定的结果相同。
     INTERRUPTIONS(CONTEXT SWITCH) :
     中断机制允许 CPU 根据配置外部、 配置内部或 CPU 本身内的条件更改其状态。为 了对高优先级条件做出快速响应以及迅速识别条件的类型, 将中断条件分为六类 : 外部、 输 入 / 输出、 机器检查、 程序、 重新启动和系统管理程序调用。
     中断包括将当前 PSW 存储为旧 PSW、 存储标识中断原因的信息, 以及取回新的 PSW。 处理根据新的 PSW 的指定恢复。在中断发生时存储的旧 PSW 一般包含如果中断不发生, 可 能接下来要执行的指令的地址, 因此允许恢复已中断的程序。对于程序中断和系统管理程 序调用中断, 所存储的信息还包含标识最后执行的指令的长度的代码, 因此允许程序对中 断原因做出响应。对于其正常响应是重新执行导致中断的指令的某些程序条件, 指令地址 直接标识最后执行的指令。
     除了重新启动以外, 仅当 CPU 处于运行状态时才可发生中断。当 CPU 处于停止或 运行状态时, 可发生重新启动中断。
     任何访问异常都被识别为与所述异常关联的指令执行的一部分。当 CPU 尝试从不 可用的位置执行预取或检测到某些访问异常状况, 但是分支指令或中断更改了指令顺序, 从而致使指令未被执行时, 将不会识别到访问异常。每个指令都可导致识别到由指令取回 造成的访问异常。 此外, 访问存储装置中的操作数可导致与指令执行关联的访问异常。 当在 没有遇到异常的情况下无法取回第一指令半字时, 将指示由取回指令造成的访问异常。当 指令的第一半字没有访问异常时, 可针对根据指令的前两位指定的指令长度的附加半字指 示访问异常 ; 但是, 当可在不访问指令的第二或第三半字的情况下完成操作时, 无法预测是 否针对未使用部分指示访问异常。由于指令取回访问异常指示是所有指令所共有的, 因此 其未包括在个别指令定义中。
     除了在个别指令描述中指出的情况之外, 以下规则适用于与访问操作数位置关联 的异常。对于取回型操作数, 仅需要针对完成操作所需的操作数部分指示访问异常。无法 预测是否针对那些并非完成操作所需的取回型操作数部分指示访问异常。
     对于存储型操作数, 即使能够在不使用无法访问的操作数部分的情况下完成操 作, 仍然会针对整个操作数识别到访问异常。 当存储型操作数的值被定义为无法预测时, 无 法预测是否指示访问异常。每当访问操作数位置可导致识别到访问异常时, 单词 “访问” 都 会包括在指令描述内的程序异常列表中。 该表项还指示哪个操作数可导致识别到异常以及 是在对该操作数位置执行取回还是存储访问操作时识别到异常。 仅针对为每个特定指令定 义的操作数部分识别访问异常。
     当 CPU 尝试使用无效操作码执行指令时, 将识别到操作异常。所述操作码可能未 赋值, 或者 CPU 上未安装具有所述操作码的指令。操作将被取消。指令长度代码为 1、 2或 3。将通过程序中断代码 0001hex( 或 0081hex, 如果指示并发 PER 事件 ) 指示操作异常。
     某些模型可提供本出版物中未介绍的指令, 例如出于协助目的或作为专用或自定 义功能一部分而提供的那些指令。因此, 本出版物中未介绍的操作码不一定导致识别到操 作异常。而且, 这些指令可导致设置操作模式或以其他方式更改机器以便影响后续指令的执行。 为了避免出现此类操作, 应仅当需要与本出版物中未介绍的操作码关联特定功能时, 才执行带有此类操作码的指令。
     当以下任一条件为真时, 将识别到规范异常 :
     1. 将 1 引入 PSW 的未赋值位位置 ( 也就是说, 位位置 0、 2-4、 24-30 或 33-36 中的 任意位置 )。将此异常作为早期 PSW 规范异常进行处理。
     2. 将 1 引入 PSW 的位位置 12。将此异常作为早期 PSW 规范异常进行处理。
     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 规范异常进行处理。
     4.PSW 包含奇数指令地址。
     5. 操作数地址未在需要整数边界指定的指令中指定此类整数边界。
     6. 通过需要偶数编号的寄存器指定的指令的 R 字段指定奇数编号的通用寄存器。
     7. 为扩展操作数指定 0、 1、 4、 5、 8、 9、 12 或 13 以外的浮点寄存器。
     8. 十进制算术中的乘数或除数的数位和符号超过 15 位。
     9. 在十进制乘法或除法中, 第一操作数字段的长度小于或等于第二操作数字段的 长度。
     10. 尝 试 执 行 CIPHER MESSAGE、 CIPHER MESSAGE WITHCHAINING、 COMPUTE INTERMEDIATE MESSAGEDIGEST、 COMPUTE LAST MESSAGE DIGEST 或 COMPUTE MESSAGE AUTHENTICATION CODE, 并且通用寄存器 0 的位 57-63 中的功能代码包含未赋值或未安装的 功能代码。
     11. 尝试执行 CIPHER MESSAGE 或 CIPHER MESSAGE WITHCHAINING, 并且 R1 或 R2 字段指定奇数编号的寄存器或通用寄存器 0。
     12. 尝 试 执 行 CIPHER MESSAGE、 CIPHER MESSAGE WITHCHAINING、 COMPUTE INTERMEDIATE MESSAGEDIGEST 或 COMPUTE MESSAGE AUTHENTICATIONCODE, 并且第二操作数 长度不是指定功能的数据块大小的倍数。此规范异常条件不适用于查询功能。
     13. 尝试执行 COMPARE AND FORM CODEWORD, 并且通用寄存器 1、 2 和 3 初始地不包 含偶数值。
     32. 尝试执行 COMPARE AND SWAP AND STORE, 并且存在以下任意条件 :
     ●功能代码指定未赋值的值。
     ●存储特征指定未赋值的值。
     ●功能代码为 0, 并且未在字边界上指定第一操作数。
     ●功能代码为 1, 并且未在双字边界上指定第一操作数。
     ●未在与存储值的大小对应的整数边界上指定第二操作数。
     33. 尝试执行 COMPARE LOGICAL LONG UNICODE 或 MOVELONG UNICODE, 并且通用寄 存器 R1+1 或 R3+1 的内容未指定偶数字节。
     34. 尝试执行 COMPARE LOGICAL STRING、 MOVE STRING 或 SEARCH STRING, 并且通 用寄存器 0 的位 32-55 不全为 0。
     35. 尝试执行 COMPRESSION CALL, 并且通用寄存器 0 的位 48-51 具有二进制值0000 和 0110-1111 中的任意一个值。
     36. 尝试执行 COMPUTE INTERMEDIATE MESSAGEDIGEST、 COMPUTE LAST MESSAGE DIGEST 或 COMPUTE MESSAGE AUTHENTICATION CODE, 并且满足以下任一条件 :
     ● R2 字段指定奇数编号的寄存器或通用寄存器 0。
     ●通用寄存器 0 的位 56 不为 0。
     37. 尝试执行 CONVERT HFP TO BFP、 CONVERT TO FIXED(BFP 或 HFP) 或 LOAD FP INTEGER(BFP), 并且 M3 字段未指定有效修改符。
     38. 尝试执行 DIVIDE TO INTEGER, 并且 M4 字段未指定有效修改福。
     39. 尝试执行 EXECUTE, 并且目标地址为奇数地址。
     40. 尝试执行 EXTRACT STACKED STATE, 并且当未安装 ASN 和 LX 重用工具时, 通用 寄存器 R2 的位位置 56-63 中的代码大于 4 ; 或者当安装所述工具之后, 所述代码大于 5。
     41. 尝试执行 FIND LEFTMOST ONE, 并且 R1 字段指定奇数编号的寄存器。
     42. 尝试执行 INVALIDATE DAT TABLE ENTRY, 并且通用寄存器 R2 的位 44-51 不全 为 0。
     43. 尝试执行 LOAD FPC, 并且与 FPC 寄存器中不支持的位对应的第二操作数的一 个或多个位为 1。
     44. 尝试执行 LOAD PAGE-TABLE-ENTRY ADDRESS 并且指令的 M4 字段包含二进制值 0000-0100 以外的任何值。
     45. 尝试执行 LOAD PSW 并且第二操作数地址处的双字的位 12 为 0, 是否识别到此 异常将取决于模型。
     46. 尝试执行 MONITOR CALL, 并且指令的位位置 8-11 不包含 0。
     47. 尝试执行 MOVE PAGE, 并且通用寄存器 0 的位位置 48-51 不包含 0 或者该寄存 器的位 52 和 53 均为 1。
     48. 尝试执行 PACK ASCII, 并且 L2 字段大于 31。
     49. 尝试执行 PACK UNICODE, 并且 L2 字段大于 63 或为偶数。
     50. 尝试执行 PERFORM FLOATING POINT OPERATION, 通用寄存器 0 的位 32 为 0, 并 且位 33-63 中的一个或多个字段无效或指定未安装的功能。
     51. 尝试执行 PERFORM LOCKED OPERATION, 并且以下任一条件为真 : ·通用寄存 器 0 的 T 位 ( 位 55) 为 0, 以及该寄存器的位 56-63 中的功能代码无效。 ·通用寄存器 0 的 位 32-54 不全为 0。 ·在存取寄存器模式下, 对于导致使用包含 ALET 的参数列表的功能代 码, R3 字段为 0。
     52. 尝试执行 PERFORM TIMING FACILITY FUNCTION, 并且以下任一条件为真 : · 通 用寄存器 0 的位 56 不为 0。 ·通用寄存器 0 的位 57-63 指定未赋值或未安装的功能代码。
     53. 尝试执行 PROGRAM TRANSFER 或 PROGRAMTRANSFER WITH INSTANCE, 并且以下 所有条件为真 : ·PSW 中的扩展寻址模式位为 0。 ·由指令的 R2 字段指定的通用寄存器中 的基本寻址模式位 ( 位 32) 为 0。 ·同一寄存器中的指令地址的位 33-39 不全为 0。
     54. 尝试执行 RESUME PROGRAM, 并且以下任一条件为真 : ·第二操作数中 PSW 字 段的位 31、 32 以及 64-127 对于当前 PSW 中的放置无效。如果以下任一条件为真, 将识别 到异常 : - 位 31 和 32 均为 0 并且位 64-103 不全为 0。- 位 31 和 32 分别为 0 和 1, 并且位64-96 不全为 0。- 位 31 和 32 分别为 1 和 0。- 位 127 为 1。
     ·参数列表的位 0-12 不全为 0。
     55. 尝试执行 SEARCH STRING UNICODE, 并且通用寄存器 0 的位 32-47 不全为 0。
     56. 尝试执行 SET ADDRESS SPACE CONTROL 或 SETADDRESS SPACE CONTROL FAST, 并且第二操作数地址的位 52 和 53 不全为 0。
     57. 尝试执行 SET ADDRESSING MODE(SAM24), 并且 PSW 中的未更新指令地址的位 0-39, PSW 的位 64-103 不全为 0。
     58. 尝试执行 SET ADDRESSING MODE(SAM31), 并且 PSW 中的未更新指令地址的位 0-32, PSW 的位 64-96 不全为 0。
     59. 尝试执行 SET CLOCK PROGRAMMABLE FIELD, 并且通用寄存器 0 的位 32-47 不 全为 0。
     60. 尝试执行 SET FPC, 并且与 FPC 寄存器中不支持的位对应的第一操作数的一个 或多个位为 1。
     61. 尝试执行 STORE SYSTEM INFORMATION, 通用寄存器 0 中的功能代码有效, 并 且以下任一条件为真 : ·通用寄存器 0 的位 36-55 以及通用寄存器 1 的位 32-47 不全为 0。 ·第二操作数地址未在 4K 字节边界上对齐。 62. 尝试执行 TRANSLATE TWO TO ONE 或 TRANSLATETWO TO TWO, 并且通用寄存器 R1+1 中的长度未指定偶数个字节。
     63. 尝试执行 UNPACK ASCII, 并且 L1 字段大于 31。
     64. 尝试执行 UNPACK UNICODE, 并且 L1 字段大于 63 或为偶数。
     65. 尝试执行 UPDATE TREE, 并且通用寄存器 4 和 5 的初始内容不是 8 的倍数 ( 在 24 位或 31 位寻址模式下 ) 或者不是 16 的倍数 ( 在 64 位寻址模式下 )。由旧 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。当异常由 SET ADDRESSINGMODE(SAM24, SAM31) 引入时, ILC 为 1, 或者如果 SET ADDRESSINGMODE 是 EXECUTE 的目标, 则 ILC 为 2。当异常 由 SET SYSTEM MASK 或 STORE THEN OR SYSTEM MASK 引入时, ILC 为 2。
     程序中断用于报告在程序执行过程中发生的异常和事件。程序中断导致将旧 PSW 存储在实位置 336-351 中并从实位置 464-479 取回新的 PSW。 中断的原因由中断代码标识。 中断代码放置在实位置 142-143 处, 指令长度代码放置在实位置 141 处的字节的位位置 5 和 6 中, 而其余的位被设为 0, 0 存储在实位置 140 处。出于某些原因, 标识中断原因的附加 信息存储在实位置 144-183 处。如果已安装 PER-3 工具, 则作为程序中断操作的一部分, 将中断 - 事件 - 地址寄存器的内容放置在实存储位置 272-279 中。除了 PER 事件和加密操 作异常之外, 导致中断的条件由放置在中断代码的最右侧 7 个位位置中的编码值指示。一 次只能指示一个条件。中断代码的位 0-7 被设为 0。通过将中断代码的位 8 设为 1 来指示 PER 事件。当这是唯一条件时, 位 0-7 和 9-15 也被设为 0。当与其他程序中断条件同时指 示 PER 事件时, 位 8 为 1, 而位 0-7 和 9-15 针对其他条件设置。加密操作异常由中断代码
     0119 hex 或 0199 hex( 如果还指示 PER 事件 ) 指示。
     当存在对应的掩码位时, 仅当此掩码位为 1 时才发生程序中断。 PSW 中的程序掩码 控制四种异常, FPC 寄存器中的 IEEE 掩码控制 IEEE 异常, 控制寄存器 0 中的位 33 控制 SET SYSTEM MASK 是否导致特殊操作异常, 控制寄存器 8 中的位 48-63 控制因监视事件导致的异 常, 掩码层次结构控制因 PER 事件导致的异常。当任何控制掩码位为 0 时, 将忽略条件 ; 条 件不会保持挂起状态。
     当用于程序中断的新的 PSW 具有 PSW 格式错误或导致在指令取回过程中识别到异 常时, 可能会发生一系列程序中断。
     被指示为程序异常的某些条件还可以由通道子系统识别, 在此情况下, 在子通道 状态字或扩展状态字中指示异常。
     当数据异常导致程序中断时, 数据异常代码 (DXC) 存储在位置 147 处, 0 存储在位 置 144-146 处。DXC 区分各种类型的数据异常条件。当 AFP 寄存器 ( 附加浮点寄存器 ) 控 制位 ( 控制寄存器 0 的位 45) 为 1 时, DXC 还放置在浮点控制 (FPC) 寄存器的 DXC 字段中。 当报告任何其他程序异常时, FPC 寄存器中的 DXC 字段保持不变。DXC 是指示数据异常的具 体原因的 8 位代码。
     DXC 2 和 3 相互排斥, 并且优先级高于任何其他 DXC。因此, 例如 DXC 2(BFP 指令 ) 优先于任何 IEEE 异常 ; 以及 DXC 3(DFP 指令 ) 优先于任何 IEEE 异常或模拟 IEEE 异常。作 为另一实例, 如果存在针对 DXC3(DFP 指令 ) 和 DXC 1(AFP 寄存器 ) 两者的条件, 则报告 DXC 3。当规范异常和 AFP 寄存器数据异常都适用时, 无法预测将报告哪个异常。
     当 CPU 尝试引用配置中不可用的主存储位置时, 将识别到寻址异常。当未安装位 置、 存储单元不在配置中、 或者存储单元断电时, 配置中的主存储位置不可用。指定配置中 不可用的存储位置的地址被称为无效地址。当指令的地址无效时, 将取消操作。类似地, 当 EXECUTE 的目标指令的地址无效时, 将取消操作。此外, 如果在访问表或表表项时遇到寻 址异常, 将取消操作单元。规则所应用的表和表表项包括可分派单元控制表、 主 ASN 第二 表表项, 以及访问列表、 区第一表、 区第二表、 区第三表、 段表、 页表、 链接表、 链接第一表、 链 接第二表、 表项表、 ASN 第一表、 ASN 第二表、 授权表、 链接栈和跟踪表中的表项。如果在引 用区第一表、 区第二表、 区第三表、 段表以及页表时遇到寻址异常, 并且所述引用包括动态 地址转换的隐式引用以及与执行 LOAD PAGE-TABLE-ENTRY ADDRESS、 LOAD REAL ADDRESS、 STORE REAL ADDRESS 以及 TESTPROTECTION 关联的引用, 则这些异常将导致操作取消。 类似 地, 如果在隐式执行访问寄存器转换或在作为 LOAD PAGE-TABLE-ENTRYADDRESS、 LOAD REAL ADDRESS、 STORE REAL ADDRESS、 TESTACCESS 或 TEST PROTECTION 的一部分执行访问寄存器 转换时遇到访问可分派单元控制表、 主 ASN 第二表表项、 访问列表、 ASN 第二表或授权表的 寻址异常, 则这些异常将导致操作取消。 除了取消其执行的某些特定指令之外, 将针对可进 行转换但指定不可用位置的操作数地址终止操作。为了终止, 只需更改结果字段。在此上 下文中, 术语 “结果字段” 包括条件码、 寄存器以及任何已提供并指定为由指令更改的存储 位置。
     EXTRACT CACHE ATTRIBUTE 指令 :
     参考图 8, 当取回 801 并执行 EXTRACT CACHE ATTRIBUTE 指令 ( 图 6) 时, 将有关 存储子系统 303 的指定属性 804 的信息 805 放置在第一操作数位置 806 中。所述指令包括8 位操作码 “EB” 、 8 位操作码扩展 “4C” 以及寄存器字段 R1、 R3 和 B2 及带符号的位移字段 D|H2|DL2。第一操作数是通过指令的 R1 寄存器字段指定的寄存器, 并且为 64 位。
     第二操作数地址并不用于寻址数据 ; 相反, 将 64 位地址 ( 图 7) 的最右侧 24 位视 为指定将哪个属性返回由 R1 指定的通用寄存器的代码 804。 通过将指令的带符号位移字段 (DH2‖DL2) 的符号扩展值与由指令的 B2 字段 ( 当 B2 字段不为 “0” 时 ) 指定的寄存器的值 进行代数相加, 计算 802 第二操作数地址 ( 当 B2 字段为 “0” 时, 带符号位移字段 (DH2‖DL2) 用作第二操作数地址 )。
     代码定义如下 :
     属性指示 (AI) : 第二操作数地址 ( 图 7) 的位位置 56-59 包含 4 位无符号整数, 指 示提取高速缓存属性, 如下所示 :
     0 提取拓扑摘要
     1 提取高速缓存的行大小 ( 以字节表示 )
     2 提取高速缓存的总大小 ( 以字节表示 )
     3 提取高速缓存的组关联性级别
     4-15 保留
     级别指示 (LI) : 第二操作数地址 ( 图 7) 的位位置 60-62 包含 3 位无符号整数, 指 示要提取其高速缓存属性的高速缓存的级别, 0 指示一级高速缓存, 1 指示二级高速缓存等 等。如果未在模型上实现高速缓存级别, 将保留其对应的级别指示。
     类型指示 (TI) : 第二操作数地址 ( 图 7) 的位 63 指示要针对其提取高速缓存属性 的高速缓存的类型, 0 指示数据高速缓存, 1 指示指令高速缓存。当高速缓存级别具有统一 的数据和指令高速缓存时, 将返回相同的结果, 无论类型指示为何。
     当属性指示为 0 时, 将忽略级别指示和类型指示。
     忽略第二操作数地址的位 0-39。保留第二操作数地址的位 40-55, 并且它们应包 含 0。如果第二操作数地址中的已保留位位置包含 1, 或者如果指定已保留的属性指示或级 别指示, 则通用寄存器 R1 的位 0-63 被设为 1。
     忽略通用寄存器 R3 的内容, 但 R3 字段应指定寄存器 0 ; 否则, 将来程序可能无法 兼容运行。
     当属性指示为 0 时, 将在通用寄存器 R1 中返回每个高速缓存级别的摘要。每个摘 要字段为 8 位, 其中寄存器的位 0-7 包含一级高速缓存的摘要, 位 8-15 包含二级高速缓存 的摘要等等。8 位摘要字段的内容如下所示 :
     摘要字段
     位 含义
     0-3 4-5 (00) (01) (10) (11)保留, 存储为 0 高速缓存范围, 如下所示 : 此级别处不存在高速缓存 高速缓存专用于 CPU 高速缓存可由多个 CPU 共享 保留6-7 当位位置 4-5 包含非零值时, 位位置 6-7 包含高速缓存类型,
     如下所示 :
     (00) 此级别处存在单独的指令高速缓存和数据高速缓存
     (01) 此级别处仅存在指令高速缓存
     (10) 此级别处仅存在数据高速缓存
     (11) 此级别处存在统一的指令和数据高速缓存
     当位位置 4-5 包含 0 时, 位位置 6-7 也包含 0。
     程序异常 :
     ●操作 ( 如果未安装通用指令扩展工具 )
     保留所有其他代码。如果指定了保留代码, 则通用寄存器 R1 的位 0-63 被设为 1。 忽略通用寄存器 R3 的内容, 但 R3 字段应指定寄存器 0 ; 否则, 将来程序可能无法兼容运行。
     当确定 PREFETCH DATA 和 PREFETCH DATA RELATIVE LONG 指令的放置时, 了解高 速缓存行大小非常有用。取决于模型, 一级高速缓存可以实现为包含数据和指令的统一高 速缓存 ( 相对于具有单独的指令高速缓存和单独的数据高速缓存的分离式高速缓存 )。在 此情况下, 功能代码 0 和 1 返回相同的大小, 该大小是统一高速缓存的行大小。如果模型未 提供数据高速缓存并且功能代码为 0, 或者如果模型未提供指令高速缓存并且功能代码为 1, 则将值 0 放置在第一操作数位置中。
     上述内容对于了解一个计算机系统实施例的术语和结构非常有用。 本发明并不限 于 z/Architecture 或其中提供的描述。通过此处的教导, 本发明可以有利地应用到其他计 算机制造商的其他计算机体系结构。

提取高速缓存属性工具及其指令.pdf_第1页
第1页 / 共40页
提取高速缓存属性工具及其指令.pdf_第2页
第2页 / 共40页
提取高速缓存属性工具及其指令.pdf_第3页
第3页 / 共40页
点击查看更多>>
资源描述

《提取高速缓存属性工具及其指令.pdf》由会员分享,可在线阅读,更多相关《提取高速缓存属性工具及其指令.pdf(40页珍藏版)》请在专利查询网上搜索。

在操作计算机系统的方法中,提供了一种工具以及具有计算机体系结构的高速缓存机器指令,所述高速缓存机器指令用于指定目标高速缓存的高速缓存级别以及目标高速缓存属性以便获取一个或多个目标高速缓存的高速缓存属性。所请求的所述目标高速缓存(多个)的高速缓存属性保存在寄存器中。 。

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

当前位置:首页 > 物理 > 计算;推算;计数


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