用于扩展可用于指令的通用寄存器的数目的方法和系统的制作方法

文档序号:6426751阅读:218来源:国知局
专利名称:用于扩展可用于指令的通用寄存器的数目的方法和系统的制作方法
技术领域
本发明涉及计算机系统,更具体地涉及计算机系统处理器指令功能性。
背景技术
商标IBM 是U. S. A(美国)纽约阿蒙克的国际商业机器公司的注册商标。S/390、 Z900、z990和ZlO以及其它产品名称可能是国际商业机器公司或其它公司的注册商标或产
品名称。IBM从二十世纪六十年代的公知IBM 系统360的机器开始至今,通过许多非常有才能的工程师的工作,已经创建了一种特殊的架构,由于其对于计算系统的本质特性而被公知为“大型机”,其操作原理通过描述已经由IBM发明人发明的指令来陈述机器的架构,可以在“大型机”实施所述指令时执行所述指令,并且由于它们对改进“大型机”所表示的计算机器的状态的显著贡献,而被选择包含在多年陈述的IBM的操作原理(IBM,s Principles of Operation)中作为显著贡献。2009 年 2 月出版的IBM z/Architecture 操作原理的第八版已经成为作为SA22-7832-07的标准出版的参考文献,并且被并入包括IBM系统zlO 企业级服务器的IBM的zlO 大型机服务器中。通过全文引用将 IBM Z/Architecture 操作原理(出版物SA22-7832-07)合并于此。参考图1A,描绘了主机计算机系统迎的典型组件。在计算机系统中也可以采用本领域众所周知的其它组件布置。典型的主机计算机迎包括一个或多个CPU 1,其与主存储器(计算机存储器2)通信;以及到存储装置11和网络10的1/0接口,用于与其它计算机或 SAN等通信。CPU 1与具有架构的(architected)指令集和架构的功能性的架构兼容。CPU 1可以具有动态地址转换(DAT) 3,用于将程序地址(虚拟地址)变换为存储器的真实地址。 DAT典型地包括用于高速缓存(cache)转换的转换后备缓冲器(TLB) 7,使得以后对计算机存储器2的块的访问不需要地址转换的延迟。典型地,在计算机存储器2与处理器1之间采用高速缓存9。高速缓存9可以是分层级的,具有对于多于一个CPU可用的大高速缓存以及在大高速缓存与每个CPU之间的较小、较快(较低级)的高速缓存。在一些实施方式中, 较低级的高速缓存被划分以提供用于指令取出和数据访问的分离低级高速缓存。在实施例中,由指令取出单元4经由高速缓存9从存储器2取出指令。在指令解码单元(6)中解码该指令,并且将该指令调度(dispatch)(在一些实施例中与其它指令一起)至指令执行单元8。典型地,采用几个执行单元8,例如,算术执行单元、浮点执行单元和分支指令执行单元。由执行单元执行指令,如需要则从指令指定的寄存器或存储器访问操作数。如果要从存储器2访问(加载或存储)操作数,则加载存储单元5典型地在被执行的指令的控制下处理访问。可以在硬件电路中、或在内部微代码(固件)中、或通过这两者的组合来执行指令。在图IB中,提供了仿真的主机计算机系统12的示例,其仿真主机架构的主机计算机系统迎。在仿真的主机计算机系统21中,主机处理器(CPU) 1是仿真的主机处理器(或虚拟主机处理器)并包括仿真处理器27,其具有与主机计算机50的处理器1不同的本地指令集架构。仿真的主机计算机系统21具有对于仿真处理器27可访问的存储器22。在该示例实施例中,存储器22被分割为主机计算机存储器2部分和仿真例程23部分。主机计算机存储器2对于根据主机计算机架构的仿真的主机计算机21的程序可用。仿真处理器27 执行与仿真的处理器1的架构不同的架构的架构指令集的本地指令(所述本地指令从仿真例程存储器23获得),并且可以通过采用在序列&访问/解码例程中获得的一个或多个指令来从主机计算机存储器2中的程序访问用于执行的主指令,所述序列&访问/解码例程可以解码所访问的主机指令,以确定本地指令执行例程,用于仿真所访问的主机指令的功能。可以通过架构的设施例程(Architected Facilities Routines)仿真为主机计算机系统迎的架构所定义的其它设施,例如,包括诸如通用寄存器、控制寄存器、动态地址转换和 I/O子系统支持和处理器高速缓存的设施。仿真例程还可以利用仿真处理器27中可用的功能(诸如通用寄存器和虚拟地址的动态转换)来增强仿真例程的性能。还可以提供特殊硬件和卸载(Off-Load)引擎来辅助处理器27仿真主机计算机迎的功能。 在大型机中,程序员(现今通常是“C”程序员)通常通过编译器应用使用架构的机器指令。可以在z/Architecture IBM服务器中本地地执行、或者可替代地在执行其它架构的机器中执行存储在存储介质中的这些指令。可以在现有的和未来的IBM大型机服务器中以及在IBM的其它机器(例如,pSeries 服务器和xSeries 服务器)上仿真它们。可以在使用由IBM 、Intel 、AMD 、Sun Microsystem (Sun微系统)等制造的硬件的多种机器上运行Linux的机器中执行它们。除了在Z/Architecture 下的该硬件上执行之外,还可以使用 Linux 以及通过 Hercules、UMX、FSI (基础软件公司(Fundamental Software, Inc.)) 或平台解决方案公司(Platform Solutions, Inc.) (PSI)使用仿真的机器,其中通常执行是在仿真模式中。在仿真模式中,通过本地处理器执行仿真软件以仿真所仿真的处理器的架构。本地处理器27典型地执行包括固件或本地操作系统的仿真软件巡来执行所仿真的处理器的仿真。仿真软件益负责取出并执行所仿真的处理器架构的指令。仿真软件益维持仿真程序计数器以跟踪指令边界。仿真软件益一次可以取出一个或多个仿真机器指令,并将一个或多个仿真机器指令转变为对应组的本地机器指令,用于由本地处理器27执行。这些经转变的指令可以被高速缓存,使得可以实现更快的转变。尽管如此,仿真软件必须维持仿真的处理器架构的架构规则,以便确保为仿真的处理器所写的操作系统和应用正确操作。此外,仿真软件必须提供由仿真的处理器1的架构识别的资源,其包括但不限于控制寄存器、通用寄存器、浮点寄存器、动态地址转换功能(例如,包括段表和页表)、中断机制、上下文切换机制、当日时间(TOD)时钟以及至1/0子系统的架构的接口,使得设计为在仿真的处理器上运行的操作系统或应用程序可以在具有仿真软件的本地处理器上运行。解码被仿真的特定指令,并且调用子例程来执行各个单独(individual)指令的功能。例如,在“C”子例程或驱动器中,或者在提供用于特定硬件的驱动器的某些其它方法中,实施仿真所仿真的处理器1的功能的仿真软件功能型,在理解优选实施例的描述之后,其将在本领域的技术人员的技艺内。各种软件和硬件仿真专利包括但不限于 US5551013 (Beausoleil 等人的“ Multiprocessor for hardware emulation,,)、 US6009261 (Scalzi 等人的"Preprocessing of stored target routines for emulating incompatible instructions on a target processor,,)、US5574873 (Davidian 等人的"Decoding guest instruction to directly access emulation routines that emulate the guest instructions”)、US6308255 (Gorishek等人的“Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system,,)、US6463582 (Lethin 等人的 “Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method,,)以及 US5790825 (Eric Traut 的“Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions,,);通过全文引用将每个上述专利合并在此。这些参考文献说明了针对本领域技术人员可用的目标机器、实现为不同机器而架构的指令格式的仿真的各种已知方式,以及上述这些参考文献所使用的商用软件技术。需要的是与现有架构一致的新指令功能性,其减轻对诸如通用寄存器的架构资源的依赖,增强采用新指令的软件版本的功能性和性能
发明内容
在高字(High-word)设施的实施例中,在具有第一数目的大通用寄存器(GPR) 的计算机中扩展对于程序的指令可用的GPR的有效数目,每个指令包括操作码(opcode、 OpCode、op code、Op Code)和用于指定对应GI3R的一个或多个GPR字段,每个大GPR包括第一部分和第二部分,所述大GI^R包括由第一部分组成的第一小GI^R和由第二部分组成的第二小GPR。其中,响应于小GI^R模式中的计算机,进行a)和b) :a)执行第一指令集的指令,第一指令集用于访问所述第一小GPR,所述执行包括基于所述第一小GPR生成用于访问存储器操作数的存储器地址或者访问第一小GI^R操作数,其中第一小GPR由所述第一部分组成;以及b)执行第二指令集的指令,第二指令集用于访问所述第二小GPR,所述执行包括基于所述第二小GPR生成用于访问存储器操作数的存储器地址或者访问第二小GPR操作数,其中所述第二小GPR由所述第二部分组成;并且响应于大GI^R模式中的计算机,执行第三指令集的指令,所述执行包括基于所述大GPR生成用于访问存储器操作数的存储器地址或者访问包括所述第一部分和所述第二部分的大GPR操作数。在实施例中,小GPR模式包括处于24位寻址模式或31位寻址模式之一中。在实施例中,第一部分是32位,第二部分是32位,并且第三部分是64位。在实施例中,第二指令集的指令的执行包括基于两个操作数执行对应操作码定义的功能,并且存储结果,对应操作码定义的功能由两个操作数的ADD (加)功能或者两个操作数的COMPARE (比较)功能组成。在实施例中,第二指令集的指令的执行包括基于两个操作数执行对应操作码定义的功能,并且存储结果,对应操作码定义的功能由从存储器LOAD (加载)操作数的功能或者将操作数STORE(存储)到存储器的功能组成。在实施例中,第二指令集的指令的执行包括基于两个操作数执行对应操作码定义的功能,并且存储结果,对应操作码定义的功能是ROTATE THEN INSERT SELECTED BITS (循环然后插入所选择的位)功能,包括将源操作数循环指令指定的量;并将所循环的源操作数的所选择的部分插入目标操作数的所选择部分中。
在实施例中,支持操作在大GI^R模式中的操作系统,其中在运行在小GI^R模式中的应用的上下文切换期间,保存并恢复大GPR。在实施例中,操作系统在大GI^R模式中操作,其中在运行在小GI^R模式中的应用的上下文切换期间,保存并恢复大GPR。

实施例的以上以及附加的目的、特征和优点将在下面所写的描述中变得明显。这里其它实施例和方面被详细描述,并被认为是所要求权利的本发明的一部分。 为了更好地理解优势和特征,参照描述和附图。


在说明书的结论处的权利要求中具体提出并清楚主张认为是本发明的主题。前述和其它目的、特征和优势依据下面结合附图的详细描述而明显,其中图IA是描绘示例主机计算机系统的图;图IB是描绘示例仿真主机计算机系统的图;图IC是描绘示例计算机系统的图;图2是描绘示例计算机网络的图;图3是描绘计算机系统的元件的图;图4A-4C描绘计算机系统的详细元件;图5A-5F描绘计算机系统的机器指令格式;图6描绘示例大GPR ;图7A-7B呈现示例高字实施例流;以及图8描绘示例上下文切换流。
具体实施例方式可以通过软件(有时指许可的内部代码、固件、微代码、毫代码(Milli-code)、微微代码(Pico-code)等,它们中的任何一个将与实施例一致)来实践实施例。参考图1A,典型地,由系统迎的处理器(还称为CPU (中央处理单元))1从诸如⑶-ROM驱动器、磁带驱动器或硬盘驱动器的长期存储介质11访问软件程序代码。可以在用于数据处理系统的多种已知介质(诸如,磁盘、硬盘驱动器、或⑶-ROM)的任何一种上包含软件程序代码。代码可以分布在这样的介质上,或者可以从一个计算机系统的计算机存储器2或存储器通过到其它计算机系统的网络10而分布至用户,用以由这种其它系统的用户使用。可替代地,程序代码可以包含在存储器2中,并且被处理器1使用处理器总线访问。这样的程序代码包括控制各种计算机组件和一个或多个应用程序的功能和交互的操作系统。通常将程序代码从密集存储介质11调页面(page)至高速存储器2,在存储器2中, 程序代码可用于处理器1的处理。用于将软件程序代码包含在存储器中、物理介质上以及/ 或者经由网络分布软件代码的技术和方法是已知的,这里将不再讨论。当在有形介质(包括但不限于电子存储器模块(RAM)、闪存、紧凑盘(00)、0¥0、磁带等)上创建并存储程序代码时,程序代码通常被称为“计算机程序产品”。计算机程序产品介质典型地可由优选地在计算机系统中的处理电路读取,用以通过该处理电路执行。图IC图示了典型的工作站或服务器硬件系统。图IC的系统100包括典型的计算机系统101,诸如个人计算机、工作站或服务器,包括可选的外围设备。工作站101包括一个或多个处理器106和总线,所述总线被用于根据已知技术将处理器106与系统101的其它组件连接,并使处理器106与系统101的其它组件之间能够通信。总线将处理器106连接至存储器105和长期存储器107,所述长期存储器107例如可包括硬盘驱动器(例如,包括磁介质、⑶、DVD和闪存中的任何一个)或磁带驱动器。系统101还可以包括用户接口适配器,其经由总线将微处理器106连接至一个或多个接口设备,诸如键盘104、鼠标103、打印机/扫描仪110和/或其它接口设备,其可以是任何用户接口设备,诸如触摸感应屏、数字化输入板等。总线还将显示设备102 (诸如LCD屏或监视器)经由显示器适配器连接至微处理器106。

系统101可以通过能够与网络109通信108的网络适配器与其它计算机或计算机网络通信。示例网络适配器是通信信道、令牌环、以太网或调制解调器。可替代地,工作站 101可以使用诸如⑶PD(蜂窝数字分组数据)卡的无线接口通信。工作站101可以与局域网(LAN)或广域网(WAN)中的其它这样的计算机相关联,或者工作站101可以是具有另一计算机的客户端/服务器布置中的客户端等。所有这些配置以及适当的通信硬件和软件在本领域中是已知的。图2图示了其中可以实践实施例的数据处理网络200。数据处理网络200可以包括多个单独网络,诸如无线网络和有线网络,它们中的每一个可以包括多个单独的工作站 101、201、202、203、204。此外,如本领域技术人员将理解的,可以包括一个或多个LAN,其中, LAN可以包括耦接至主机处理器的多个智能工作站。仍然参考图2,网络还可以包括大型机计算机或服务器,诸如网关计算机(客户端服务器206)或应用服务器(远程服务器208,其可以访问数据存储库(r印ository)并且还可以从工作站205直接访问该远程服务器208)。网关计算机206充当进入各个网络207 的点。当将一个网络协议连接至另一个网络协议时,需要网关。优选地,网关206可以通过通信链路耦接至另一网络(例如,因特网207)。网关206还可以使用通信链路直接耦接至一个或多个工作站101、201、202、203、204。可以利用可以从IBM公司得到的IBMeServer 、 zSeries 、z9 ,服务器实施网关计算机。典型地,由系统101的处理器106从长期存储介质107 (诸如⑶-ROM驱动器或硬盘驱动器)访问软件程序代码。软件程序代码可以包含在各种用于数据处理系统的已知介质的任何一种上,诸如磁盘、硬盘驱动器或⑶-ROM。所述代码可以分布在这样的介质上,或者可以从一个计算机系统的存储器或储存器通过至其它计算机系统的网络而分布至用户 210、211,用以由这样的其它系统的用户使用。可替代地,程序代码111可以包含在存储器105中,并且由处理器106使用处理器总线访问。这样的程序代码包括操作系统,其控制各种计算机组件以及一个或多个应用程序112的功能和交互。通常将程序代码从密集存储介质107调页面至高速存储器105,在存储器105中,程序代码可用于处理器106的处理。用于将软件程序代码包含在存储器中、物理介质上以及/或者经由网络分布软件代码的技术和方法是公知的,这里将不再讨论。当在有形介质(包括但不限于电子存储器模块(RAM)、闪存、紧凑盘(00)、0¥0、磁带等)上创建并存储程序代码时,程序代码通常被称为“计算机程序产品”。计算机程序产品介质典型地可由优选地在计算机系统中的处理电路读取,用以通过该处理电路执行。
最易用于处理器的高速缓存(通常比处理器的其它高速缓存更快且更小)是最低 (Li或等级一)高速缓存,且主储存器(主存储器)是最高级高速缓存(在存在3个等级的情况下为L3)。最低级高速缓存通常被划分为保持要被执行的机器指令的指令高速缓存 (I-高速缓存)和保持数据操作数的数据高速缓存(D-高速缓存)。 参考图3,描绘用于处理器106的示例性处理器实施例。典型地,采用一个或多个等级的高速缓存303来缓冲存储器块,以便增强处理器性能。高速缓存303是保持很可能被使用的存储器数据的高速缓存行(line)的高速缓冲器。典型的高速缓存行是64、128或 256字节的存储器数据。通常采用独立的高速缓存用于高速缓存指令,而非用于高速缓存数据。通常通过本领域公知的各种“窥探(Snoop) ”算法提供高速缓存一致性(存储器和高速缓存中的行的复制的同步)。处理器系统的主存储器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 中来允许程序进行判决或在程序内循环(loop)。典型地,采用指令取出单元305代表处理器106取出指令。取出单元取出“下个顺序(sequential)指令”、分支采取指令的目标指令、或跟随在上下文切换之后的程序的第一指令。现代的指令取出单元通常采用预取出技术,以基于可能使用预取出的指令的可能性推测性地(speculatively)预取出指令。例如,取出单元可以取出16字节的指令,其包括下个顺序指令和其它顺序指令的附加字节。随后由处理器106执行所取出的指令。在实施例中,将所取出的指令传递至取出单元的调度单元306。调度单元解码所述指令并将关于所解码的指令的信息转发至合适的单元307、308、310。执行单元307将典型地从指令取出单元305接收关于所解码的算术指令的信息,并且将根据指令的操作码执行对操作数的算术运算。优选地,从存储器105、架构的寄存器309或者从正被执行的指令的立即(immediate)字段,将操作数提供给执行单元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被设计用于标量操作,而某些ALU 402 被设计用于浮点。根据架构,数据可以是大端(Big EndianM其中,最低有效字节在最高字节地址处)或小端(Little Endian)(其中,最低有效字节在最低字节地址处)。IBM ζ/ Architecture是大端。根据架构,带符号的字段可以是符号和量值、1的补或2的补。2的补数的优势在于ALU不需要设计减法能力,因为2的补中的负值或正值仅需要ALU内的与加法。通常用简略的方法描述数,其中12位的字段定义4096字节的块的地址,其通常被描述为例如4Kbyte (千字节)块。三模式寻址“三模式寻址”指在24位、31位和64位寻址模式之间切换的能力。此切换可以通过以下指令来完成 旧指令BRANCH AND SAVE AND SET MODE (分支和保存和设置模式)和BRANCH AND SET MODE (分支和设置模式)。如果R2通用寄存器的位63是1,则这两个指令均设置 64位寻址模式。如果位63是0,则在寄存器的位32分别为0或1的情况下,所述指令分别设置24位或31位寻址模式。 新指令 SET ADDRESSING MODE (SAM24,SAM31 和 SAM64)(设置寻址模式(SAM24, SAM31和SAM64))。该指令如由操作码所确定地设置24位、31位、64位寻址模式。三模式指令三模式寻址仅以处理逻辑存储地址的方式影响通用指令,但以下除外。 指令 BRANCH AND LINK (分支和链接)、BRANCH AND SAVE (分支和保存)、BRANCH AND SAVE AND SET MODE,BRANCH AND SET MODE禾口 BRANCH RELATIVE AND SAVE (分支相对和保存)在24位或31位寻址模式中将信息放置(place)在通用寄存器Rl的比特位置32-39 中(如在ESA/390中),或者在64位寻址模式中将地址位放置在这些比特位置中。新指令 BRANCH RELATIVE AND SAVE LONG(分支相对和保存长)同样如此。參指令 BRANCH AND SAVE AND SET MODE 禾口 BRANCH AND SET MODE 在 64 位寻址模式中将1放置在通用寄存器Rl的比特位置63中。在24位或31位模式中,BRANCH AND SAVE AND SET MODE将位63设置为0,并且BRANCHAND SET MODE保持其不变。 某些指令在24位或31位寻址模式中保持通用寄存器的位0-31不变,但在64位寻址模式中放置或更新它们中的地址或长度信息。这些被列在页7-7上的编程说明1中, 并有时被称为模式指令。 对通用寄存器的位0-31的影响通过两种类型的指令改变通用寄存器的位0-31。第一种类型是当在64位寻址模式中执行指令时的模式指令(见前面的部分)。第二种类型是独立于寻址模式而在单个通用寄存器中具有64位结果操作数或者在偶-奇通用寄存器对中具有128位结果的指令。大部分第二种类型的指令在它们的助记符号中由“G”单独表示或者由“GF”中的“G”表示。所有第二种类型的指令有时都被称为“G类型”指令。如果程序不在64位寻址模式(大GPR 模式)中执行并且不包括G类型指令,则其无法改变任何通用寄存器的位0-31 (小GPR模式)。在某些环境中,应用程序的一部分可以在小GI^R模式中,而另一部分可以在大GI^R模式中。在实施例中,某些指令可以是小GI^R模式指令,而其它指令可以是大GI^R模式指令, 其中计算机的模式依赖于其正在执行小GPR模式指令还是大GPR模式指令。参考图4B,典型地将用于执行分支指令的分支指令信息发送至分支单元308,分支单元308通常采用诸如分支历史表432的分支预测算法来在其它条件操作完成之前预测分支结果。将在条件操作完成之前取出并推测性地执行当前分支指令的目标。当条件操作完成时,基于条件操作的条件和所推测的结果,完成或丢弃推测性地执行的分支指令。典型的分支指令可以测试条件码,并且如果条件码满足分支指令的分支要求,则分支到目标地址,例如,可以基于包括在指令的寄存器字段或立即字段中发现的数的几个数,计算目标地址。分支单元308可以采用具有多个输入寄存器电路427、428、429以及输出寄存器电路 430的ALU 426。例如,分支单元308可以与通用寄存器309、解码调度单元306或其它电路 425通信。可以由于各种原因(例如包括由操作系统启动的上下文切换、导致上下文切换的程序异常或错误、导致上下文切换的I/O中断信号、或多个程序的多线程行为(在多线程环境中))中断一组指令的执行。优选地,上下文切换动作保存关于当前执行的程序的状态信息并随后加载关于被调用的另一程序的状态信息。例如,可以将状态信息保存在硬件寄存器中或存储器中。状态信息优选地包括指向下个要被执行的指令的程序计数器值、条件码、 存储器转换信息和架构的寄存器内容。上下文切换行为可以由硬件电路、应用程序、操作系统程序或固件代码(微代码、微微代码或许可的内部代码(Lie))单独或组合地实现。处理器根据指令定义的方法访问操作数。所述指令可以使用指令的一部分的值提供立即操作数,可以提供显性地指向通用寄存器或专用寄存器(例如浮点寄存器)的一个或多个寄存器字段。所述指令可以利用由操作码字段识别的隐含的寄存器作为操作数。所述指令可以利用存储器位置用于操作数。操作数的存储器位置可以由寄存器、立即字段或者寄存器和立即字段的组合而提供,如z/Architecture长位移设施所例示的,其中所述指令定义基址寄存器、索引寄存器和立即字段(位移字段),它们被加在一起例如提供存储器中的操作数的地址。这里,位置典型地隐含为主存储器(主储存器)中的位置,除非另外表
7J\ ο
参考图4C,处理器使用加载/存储单元310访问存储器。加载/存储单元310可以通过获得目标操作数在存储器303中的地址并将该操作数加载在寄存器309或另一存储器303位置中来执行加载操作,或者可以通过获得目标操作数在存储器303中的地址并将从寄存器309或另一存储器303位置获得的数据存储在存储器303中的目标操作数位置中来执行存储操作。加载/存储单元310可以是推测性的,并且可以以相对于指令顺序无序地(out-of-order)访问存储器,然而,加载/存储单元310必须向程序维持指令被按顺序执行的表象。加载/存储单元310可以与通用寄存器309、解码/调度单元306、高速缓存 /存储器接口 303或其它元件455通信,并且包括各种寄存器电路、ALU458和控制逻辑463 以计算存储地址并提供流水线排序(pipeline sequencing)以保持操作有次序。某些操作可能无序,但是加载/存储单元提供使无序的操作对程序表现为已经被按次序执行的功能性,如本领域内所公知的。优选地,应用程序“看见”的地址通常称为虚拟地址。虚拟地址有时称为“逻辑地址”和“有效地址”。这些虚拟地址是虚拟的原因在于它们通过各种动态地址转换(DAT) 312 技术之一而被重新定向至物理存储器位置,所述动态地址转换(DAT)312技术包括但不限于简单地用偏移值对虚拟地址加前缀(prefixing)、经由一个或多个转换表转换虚拟地址, 所述转换表优选地至少单独地或组合地包括段表和页表,优选地,段表具有指向页表的条目(entry)。在z/Architecture中,提供转换的层级结构,其包括区域第一表、区域第二表、 区域第三表、段表和可选页表。通常通过利用包括将虚拟地址映射到关联的物理存储器位置的条目的转换后备缓冲器(TLB),来增强地址转换的性能。当DAT 312使用转换表转换虚拟地址时,创建所述条目。于是,随后对虚拟地址的使用可以利用快速TLB的条目,而非缓慢的顺序转换表访问。TLB内容可以由包括LRU(最久未使用)的各种替换算法来管理。在处理器是多处理器系统的处理器的情况下,每个处理器具有为了一致性而保持诸如I/O、高速缓存、TLB和存储器的共享资源互锁的责任。典型地,将在维持高速缓存一致性时利用“窥探”技术。在窥探环境中,每个高速缓存行(line)可以被标记为处于共享状态、排他状态、改变状态、无效状态等的任何一个中,以便促进共享。I/O单元304向处理器提供用于附接至外围设备(例如包括磁带、磁盘、打印机、 显示器和网络)的手段。通常通过软件驱动器将I/O单元呈现给计算机程序。在诸如来自 IBM的z/Series的大型机中,信道适配器和开放系统适配器是大型机的I/O单元,其提供操作系统与外围设备之间的通信。下面依据z/Architecture操作原理的说明描述计算机系统的架构视图存储器计算机系统包括主存储器中的信息,以及寻址、保护以及引用和改变记录。寻址的一些方面包括地址的格式、地址空间的概念、地址的各种类型、以及一种类型的地址转换为另一种类型的地址的方式。一些主存储器包括永久分配的存储位置。主存储器向系统提供对数据的直接可寻址的快速访问存储。数据和程序两者都必须在它们可以被处理之前(从输入设备)加载到主存储器中。主存储器可以包括一个或多个更小的、更快访问的缓冲存储器,有时称为高速缓存。典型地,高速缓存在物理上与CPU或I/O处理器关联。物理构造的效果(除了对性能的效果)以及不同存储介质的使用通常不可被程序观察到。
可以为指令和数据操作数维持独立的高速缓存。在被称作高速缓存块或高速缓存行(或者简称“行”)的完整边界上以连续字节维持高速缓存内的信息。模型可以提供 EXTRACT CACHE ATTRIBUTE(提取高速缓存属性)指令,其以字节为单位返回高速缓存行的大小。模型还可以提供PREFETCH DATA (预取出数据)和PREFETCH DATARELATIVE LONG (预取出数据相对长)指令,其导致存储器到数据或指令高速缓存中的预取出,或者数据从高速缓存的释放。存储器被看作长的水平位串。对于大部分操作,对存储器的访问以左至右的顺序进行。位串被细分为8比特单位。8比特单位被称为字节,其是所有信息格式的基本构建块。存储器中的每个字节位置由唯一的非负整数标识,该非负整数是该字节位置的地址,或者简单地是字节地址。相邻的字节位置具有连续地址,其在左侧以0开始并以左至右的顺序继续。地址是无符号二进制整数并且是24、31或64位。—次一个字节或一组字节地在存储器与CPU或信道子系统之间传送信息。除非另外指明,存储器中的一组字节由该组的最左侧字节寻址。该组中的字节数目由要执行的操作隐含或显性地指定。当在CPU操作中使用时,一组字节称为字段。在每组字节内,以从左至右的顺序对位编号。最左侧位有时称为“高阶”位,而最右侧位称为“低阶”位。然而,位编号不是存储器地址。仅可以寻址字节。为了对存储器中的字节的各个单独位操作,必须访问整个字节。字节中的位从左到右被编号为0至7。地址中的位对于24位地址可以被编号为8-31或40-63 ;或者对于31位地址可以被编号为1_31或33-63 ;对于64位地址它们被编号为0-63。在任何其它固定长度格式的多字节内,构成格式的位被从0开始连续编号。为了错误检测的目的,并且优选地为了校正,可以利用各个字节或一组字节传送一个或多个校验位。这样的校验位由机器自动生成并且不能被程序直接控制。以字节的数目表示存储器容量。当存储器_操作数字段的长度被指令的操作码隐含时,该字段被认为具有固定长度,其可以是一个、两个、四个、八个或十六个字节。对于某些指令,可以隐含更大的字段。当未隐含存储器_操作数字段的长度而是显性地表述其时,该字段被认为具有可变长度。可变长度操作数可以通过一字节的递增而改变长度。当将信息放置在存储器中时,尽管到存储器的物理路径的宽度可以大于被存储的字段的长度,也仅替换包括在所指派的字段中的那些字节位置的内容。某些信息单位必须在存储器中的完整边界上。边界被称为针对单位信息完整是当其存储地址是以字节为单位的单位长度的倍数时。将特殊名称赋予完整边界上的2、4、 8和16字节的字段。半字是两字节边界上的两个连续字节的组,且是指令的基本构建块。 字是四字节边界上的四个连续字节的组。双字是八字节边界上的八个连续字节的组。四字 (quadword)是16字节边界上的16个连续字节的组。当存储地址指派半字、字、双字和四字时,地址的二进制表示分别包括一个、两个、三个或四个最右侧0位。指令必须在两字节的完整边界上。大部分指令的存储器操作数不具有边界对齐要求。在为指令和数据操作数实施单独的高速缓存的模型上,如果程序存储到随后从其取出指令的高速缓存行中,则不管该存储是否改变随后取出的指令,都可能经历显著的延迟。指令典型地,CPU的操作由存储器中的指令控制,按存储器地址的升序从左至右一次一个地顺序执行所述指令。可以通过分支、LOAD PSW、中断、SIGNAL PROCESSOR(向处理器发信号)命令或手动干预来导致顺序操作的改变。优选地,指令包括两个主要部分 操作码(Op Code),其指定要执行的操作。 可选地,参与的操作数的指派(designation)。 图5A-5F中示出了 z/Architecture的指令格式。指令可以简单地提供操作码501、 或者操作码和各种字段,包括立即操作数或寄存器指定符(specifier),用于将操作数定位在寄存器或存储器中。操作码可以向硬件指示要使用隐含的资源(操作数等),诸如一个或多个特定的通用寄存器(GPR)。操作数可以被分组为三个类别位于寄存器中的操作数、立即操作数、以及存储器中的操作数。操作数可以被显性地或隐性地指派。寄存器操作数可以位于通用、浮点、访问或控制寄存器中,其中寄存器的类型由操作码识别。通过在指令中的四位字段(称为R字段)中标识寄存器来指定包含操作数的寄存器。对于某些指令,操作数位于隐性指派的寄存器中,该寄存器被操作码隐含。立即操作数包含在指令内,并且包含立即操作数的8位、16位或32位字段称为I字段。存储器中的操作数可以具有隐含的长度;由位掩码指定;由指令中的四位或八位长度规范(称为L字段)来指定;或者具有由通用寄存器的内容指定的长度。存储器中的操作数的地址通过使用通用寄存器的内容作为地址的一部分的格式来指定。这使得可以1.通过使用缩写符号指定完整地址2.使用采用用于操作数的通用寄存器的指令执行地址操纵3.在不改变指令流的情况下通过程序手段修改地址4.通过直接使用从其它程序接收的地址,独立于数据区域的位置而操作用于引用存储器的地址包含在由指令中R字段指派的寄存器中,或者从分别由指令中的B、X和D字段指定的基址、索引和位移计算。当CPU在访问-寄存器模式中时,B或 R字段除了被用于指定地址之外,还可以指派访问寄存器。为了描述指令的执行,优选地将操作数指派为第一和第二操作数,并且在某些情况下,为第三和第四操作数。一般而言,两个操作数参与指令执行,并且结果取代第一操作数。指令在长度上是一个、两个或三个半字,并且必须位于半字边界上的存储器中。参考描绘指令格式的图5A-5F,每个指令是25个基本格式之一E501、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、RSI 520、RSL 521、RSY 522 523、RX 524、RXE 525、RXF 526、RXY 527、S 530、 SI 531、SIL556、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 格式中,由 Rl
字段指派的寄存器的内容称为第一操作数。包含第一操作数的寄存器有时称为“第一操作数位置”,有时称为“寄存器Rl ”。在RR、RRE, RRF和RRR格式中,R2字段指派包含第二操作数的寄存器,并且R2字段可以指派与Rl相同的寄存器。在RRF、RXF、RS、RSY、RSI和RIE 格式中,R3字段的使用依赖于指令。在RS和RSY格式中,R3字段可以替代地为指定掩码的 M3字段。R字段在通用指令中指派通用或访问寄存器,在控制指令中指派通用寄存器,并且在浮点指令中指派浮点寄存器或通用寄存器。对于通用和控制寄存器,依赖于指令,寄存器操作数在64位寄存器的比特位置32-63中,或者占用整个寄存器。在I格式中,指令的八位立即数据字段(I字段)的内容被直接用作操作数。在SI 格式中,指令的八位立即数据字段(12字段)的内容被直接用作第二操作数。Bl和Dl字段指定第一操作数,其长度为一个字节。在SIY格式中,除了使用DHl和DLl字段代替Dl字段之外,操作相同。在用于指令ADD HALFffORD IMMEDIATE(加半字立即)、C0MPARE HALFffORD IMMEDIATE(比较半字立即)、LOAD HALFffORD IMMEDIATE(加载半字立即)和 MULTIPLY HALFffORD IMMEDIATE (乘半字立即)的RI格式中,指令的16位12字段的内容被直接用作带符号的二进制整数,并且Rl字段指定第一操作数,依赖于指令,其长度为32或64位。对于指令 TEST UNDER MASK (TMHH, TMHL, TMLH, TMLL)(掩码下测试(TMHH,TMHL, TMLH, TMLL)), 12字段的内容被用作掩码,并且Rl字段指定第一操作数,其长度为64位。对于指令INSERT IMMEDIATE (插入立即)、AND IMMEDIATE (与立艮口)、OR IMMEDIATE (或立即)和LOAD LOGICAL IMMEDIATE (加载逻辑立即),12字段的内容被用作无符号二进制整数或逻辑值,并且Rl字段指定第一操作数,其长度为64位。对于RI和RSI 格式中的相对分支指令,16位12字段的内容被用作指派半字的数目的带符号二进制整数。 当该数目被加到分支指令的地址上时,其指定分支地址。对于RIL格式中的相对分支指令, 12字段是32位并且被以相同方式使用。对于RI和RSI格式中的相对分支指令,16位12字段的内容被用作指派半字的数目的带符号二进制整数。当该数目被加到分支指令的地址时,其指定分支地址。对于RIL格式中的相对分支指令,12字段是32位并且被以相同方式使用。对于RIE格式指令COMPARE IMMEDIATE AND BRANCH RELATIVE (比较立即和分支相对)和 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE(比较逻辑立即和分支相对),8位12字段的内容被直接用作第二操作数。对于RIE格式指令COMPARE IMMEDIATE AND BRANCH(比较立即和分支)、COMPARE IMMEDIATE AND TRAP (比较立即和捕获)、COMPARE LOGICAL IMMEDIATE AND BRANCH (比较逻辑立即和分支)和COMPARE LOGICAL IMMEDIATE AND TRAP (比较逻辑立即和捕获), 16位12字段的内容被直接用作第二操作数。对于RIE格式指令COMPARE AND BRANCH RELATIVE (比较和分支相对)、COMPARE IMMEDIATE AND BRANCH RELATIVE (比较立即和分支相对)、COMPARE LOGICAL AND BRANCH RELATIVE (比较逻辑和分支相对)和 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE (比较逻辑立即和分支相对),16位14字段的内容被用作指派被加到指令的地址上形成分支地址的半字的数目的带符号二进制整数。
对于RIL 格式指令 ADD IMMEDIATE (力口立艮口)、ADD LOGICAL IMMEDIATE (加逻辑立即)、ADD LOGICAL WITH SIGNED IMMEDIATE (带有符号的立即的加逻辑)、 COMPARE IMMEDIATE(比较立即)、COMPARE LOGICAL IMMEDIATE(比较逻辑立即)、LOAD IMMEDIATE (加载立即)和MULTIPLY SINGLE IMMEDIATE (乘单个立即),32位12字段的内
容被直接用作第二操作数。对于RIS格式指令,8位12字段的内容被直接用作第二操作数。在SIL格式中,16 位12字段的内容被直接用作第二操作数。Bl和Dl字段指定第一操作数,如下文所述。在RSL、Si、SIL、SSE和大部分SS格式中,由Bl字段指派的通用寄存器的内容被加到Dl字段的内容上,以形成第一操作数地址。在RS、RSY、S、SIY、SS和SSE格式中,由B2 字段指派的通用寄存器的内容被加到D2字段或DH2和DL2字段的内容上,以形成第二操作数地址。在RX、RXE、RXF和RXY格式中,由X2和B2字段指派的通用寄存器的内容被加到 D2字段或DH2和DL2字段的内容上,以形成第二操作数地址。在RIS和RRS格式中,并在一个SS格式中,由B4字段指派的通用寄存器的内容被加到D4字段的内容上,以形成第四操作数地址。在具有单个八位长度字段的SS格式中,对于指令AND(与)(NC) ,EXCLUSIVE OR(异或)(XC)、MOVE (移动)(MVC)、MOVE NUMERICS (移动数值)、MOVE ZONES (移动区域)和 OR(或)(0C),L指定附加至由第一操作数地址指派的字节的右侧的操作数字节的数目。因此,第一操作数的字节长度是1-256,对应于L中的长度码为0-255。存储结果取代第一操作数并从不存储在由地址和长度指定的字段之外。在此格式中,第二操作数具有与第一操作数相同的长度。存在先前定义应用于EDIT(编辑)、EDIT AND MARK(编辑和标注)、PACK ASCII (封装 ASCII)、PACK UNICODE (封装 UNICODE)、TRANSLATE (转换)、TRANSLATE AND TEST (转换和测试)、UNPACK ASCII (解封装 ASCII)和 UNPACK UNICODE (解封装 UNICODE) 的变型。在具有两个长度字段的SS格式中,并且在RSL格式中,Ll指定附加至由第一操作数地址指派的字节的右侧的操作数字节的数目。因此,第一操作数的字节长度是1-16,对应于Ll中的长度码为0-15。类似地,L2指定附加至由第二操作数地址指派的位置的右侧的操作数字节的数目。结果取代第一操作数并从不存储在由地址和长度指定的字段之外。如果第一操作数比第二操作数长,则第二操作数在左侧用0扩展至第一操作数的长度。此扩展不修改存储器中的第二操作数。在具有两个R字段的SS格式中,如由MOVE TO PRIMARY(移动到初级)、MOVE TO SECONDARY (移动到次级)和MOVE WITH KEY (带键移动)指令所使用的,由Rl字段指定的通用寄存器的内容是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 位寻址模式中,指令地址回绕(wrap around),其中,指令地址224-2处的半字之后跟着指令地址0处的半字。因此,在24位寻址模式中,作为更新指令地址的结果,从PSW比特位置 104的任何进位输出丢失。在31位或64位寻址模式中,指令地址类似地回绕,其中指令地址231-2或264-2处的半字之后分别跟随指令地址0处的半字。从PSW比特位置97或64 的进位输出分别丢失。引用存储器的操作数地址从中间值得到,该中间值包含在由指令中的R字段指派的寄存器中或者从三个二进制数字(基址、索引和位移)的和计算。基址(B)是包含在由指令中的称为B字段的四位字段中的程序指定的通用寄存器中的64位数。可以使用基址作为独立寻址每个程序和数据区域的手段。在阵列型计算中,其可以指派阵列的位置,并且在记录型处理中,其可以识别该记录。基址用于寻址整个存储器。基址还可以用于索引。索引⑴是包含在由指令中的称为X字段的四位字段中的程序指派的通用寄存器中的64位数。其仅包括在由RX、RXE和RXY格式指令指定的地址中。RX、RXE、RXF和RXY 格式指令允许双索引;即,该索引可以用于提供阵列内的元素的地址。位移(D)是在指令中的称为D字段的字段中包含的12位或20位数。12位位移是无符号的,并用于在超过由基址指派的位置之外高达4095字节的相对寻址。20位位移是带符号的,并且用于在超过基址位置之外高达524287字节的相对寻址,或者在基址位置之前高达524288字节的相对寻址。在阵列型计算中,位移可以用于指定与元素关联的许多项之一。在记录的处理中,位移可以用于识别记录内的项。12位位移在某些格式的指令的比特位置20-31中。在某些格式的指令中,第二个12位位移也在该指令中,在比特位置36-47 中。20位位移仅在RSY、RXY或SIY格式的指令中。在这些指令中,D字段由比特位置 20-31中的DL(低)字段和比特位置32-39中的DH(高)字段组成。当长位移设施被安装时,通过在DL字段的内容的左侧附加DH字段的内容,而形成位移的数值。当未安装长位移设施时,通过在DL字段的内容的左侧附加八个0比特而形成位移的数值,并且DH字段的内容被忽略。在形成中间和时,基址和索引被处理为64位二进制整数。12位位移被处理为12 位无符号二进制整数,并且52个0比特被附加在左侧。20位位移被处理为20位带符号二进制整数,并且等于符号位的44个比特被附加在左侧。这三个被相加作为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。负值可以用在索引和基址寄存器中。在31位寻址模式中忽略这些值的位 0-32,并且在24位寻址模式中忽略位0-39。对于分支指令,当采取分支时要执行的下个指令的地址称为分支地址。依赖于分支指令,指令格式可以是 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格式中,12字段的内容被处理为指派半字的数目的16位带符号二进制整数。在RIL格式中,12字段的内容被处理为指派半字的数目的32位带符号二进制整数。分支地址是由加到相对分支指令的地址上的12字段指定的半字的数目。用于RSI、RI、RIE或RIL格式中的相对分支指令的64位中间值是两个加数的和, 其中忽略从比特位置0的溢出。在RSI、RI或RIE格式中,第一加数是12字段的内容,其中一个0比特附加在右侧,并且与内容的符号位相等的47个比特附加在左侧,但以下情况除外 对于 COMPARE AND BRANCH RELATIVE、COMPARE IMMEDIATE AND BRANCH RELATIVE、COMPARE LOGICAL AND BRANCH RELATIVE禾口 COMPARE LOGICAL IMMEDIATE AND BRANCH RELATIVE,第一加数是14字段的内容,其中如上面针对12字段所描述地附加比特。在RIL格式中,第一加数是12字段的内容,其中一个0比特被附加在右侧,并且与内容的符号位相等的31个比特附加在左侧。在所有格式中,第二加数是分支指令的64位地址。分支指令的地址是在该地址被更新来寻址下个顺序指令之前在PSW中的指令地址,或者其是在使用EXE⑶TE (执行)的情况下EXE⑶TE指令的目标的地址。如果在24位或31位寻址模式中使用EXE⑶TE, 则分支指令的地址是目标地址,其中分别将40个或33个0附加在左侧。分支地址总是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。对于一些分支指令,分支依赖于满足指定条件。当不满足该条件时,不采取分支,
18继续正常的顺序指令执行,并且不使用分支地址。当采取分支时,分支地址的位0-63取代当前PSW的位64-127。分支地址不被用于访问存储器作为分支操作的一部分。由于奇数 (odd)分支地址而导致的指定异常和由于取出在分支位置的指令而导致的访问异常不被辨识为分支操作的一部分,而是被辨识为与分支位置处的指令的执行关联的异常。诸如BRANCH AND SAVE的分支指令可以指派相同的通用寄存器用于分支地址计算和作为操作数的位置。在完成操作的剩余部分之前完成分支地址计算。在第4章“控制”中描述的程序状态字(PSW)包含合适的程序执行所需的信息。 PSW用于控制指令排序,以及保持和指示与当前被执行的程序有关的CPU的状态。活动的或控制的PSW称为当前PSW。分支指令执行进行判决、循环控制和子例程联接的功能。分支指令通过将新的指令地址引入当前PSW中来影响指令排序。具有16位12字段的相对分支指令允许分支到高达相对于分支指令的位置加64K-2个字节或减64K字节的偏移的位置,而不使用基址寄存器。具有32位12字段的相对分支指令允许分支到高达相对于分支指令的位置加4G-2个字节或减4G字节的偏移的位置,而不使用基址寄存器。通过BRANCH ON CONDITION (条件分支)、BRANCH RELATIVE ON CONDITION (条件分支相对)和BRANCH RELATIVE ON CONDITION LONG (条件分支相对长)指令提供用于进行判决的设施。这些指令检查反映算术、逻辑和1/0操作的大多数的结果的条件码。由两位组成的条件码提供四个可能的条件码设置0、1、2和3。任何设置的具体含义依赖于设置条件码的操作。例如,条件码反映诸如零、非零、 第一操作数高、相等、溢出和子信道忙的条件。一旦被设置,条件码保持不改变直到被导致设置不同的条件码的指令修改为止。可以通过使用BRANCH ON CONDITION、BRANCH RELATIVE ON CONDITION 禾口 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 RELATIVE AND SAVE LONG。)这两个指令均不仅允许引入新的指令地址,而且还允许保存返回地址和关联的信息。返回地址是跟在分支指令之后的指令在存储器中的地址, 除以下情况外其是跟在具有分支指令作为其目标的EXECUTE指令之后的指令的地址。BRANCH AND LINK和BRANCH AND SAVE两者具有Rl字段。它们通过依赖于该指令的字段形成分支地址。总结指令的操作如下 在24位寻址模式中,两个指令均将返回地址放置在通用寄存器Rl的比特位置 40-63中,并且保持该寄存器的位0-31不变。BRANCHAND LINK将用于指令的指令长度码、 条件码以及来自当前PSW的程序掩码放置在通用寄存器Rl的比特位置32-39中。BRANCH AND SAVE将0放置在这些比特位置中。 在31位寻址模式中,两个指令均将返回地址放置在通用寄存器Rl的比特位置 33-63中,并且将1放置在通用寄存器Rl的比特位置32中,并且它们保持该寄存器的位 0-31不变。
19
在64位寻址模式中,两个指令均将返回地址放置在通用寄存器Rl的比特位置 0-63 中。 在任何寻址模式中,两个指令均在当前寻址模式的控制下生成分支地址。所述指令将分支地址的位0-63放置在PSW的比特位置64-127中。在RR格式中,如果指令的R2字段为0,则两个指令均不执行分支。可以看出,在24 位或31位寻址模式中,BRANCH AND SAVE将基本寻址模式位(PSW的位32)放置在通用寄存器Rl的比特位置32中。BRANCH AND LINK在31位寻址模式中这样做。指令BRANCHAND SAVEAND SET MODE和BRANCH AND SET MODE用于当在联接期间需要改变寻址模式时使用。 这些指令具有Rl和R2字段。总结指令的操作如下· BRANCH AND SAVE AND SET MODE 设置通用寄存器 Rl 的内容与 BRANCH AND SAVE 相同。此外,所述指令将扩展的寻址模式位(PSW的位31)放置在寄存器的比特位置63中。 如果Rl为非零,则BRANCH AND SET MODE如下执行。在24或31位模式中,其将 PSff的位32放置在通用寄存器Rl的比特位置32中,并且其保持寄存器的位0-31和33-63 不变。注意,如果寄存器包含指令地址,则寄存器的位63应当为0。在64位模式中,所述指令将PSW的位31(1)放置在通用寄存器Rl的比特位置63中,并且其保持寄存器的位0_62 不变。 当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与Rl相同,则所指派的通用寄存器中的结果与为Rl寄存器所指定的一样。中断(上下文切换)中断机构允许CPU由于配置外部、配置内或CPU自身内的条件而改变其状态。为了允许对高优先级的条件的快速响应以及对条件类型的立即识别,中断条件被分组为六个类别外部、输入/输出、机器校验、程序、重启和管理程序调用(supervisor call)。中断包括存储当前PSW作为旧PSW、存储识别中断的原因的信息、以及取出新PSW。 处理如新PSW所指定地重新开始。中断时,存储的旧PSW通常包含在中断不发生的情况下接下来将被执行的指令的地址,因此允许被中断的程序重新开始。对于程序和管理程序调用中断,所存储的信息还包含识别最后执行的指令的长度的代码,因此允许程序响应于中断的原因。在正常响应是重新执行导致中断的指令的某些程序条件的情况下,指令地址直接识别最后执行的指令。除重启之外,仅当CPU在操作状态中时才可以发生中断。对于在停止或操作状态中的CPU,都可以发生重启中断。任何访问异常被识别为该异常所关联的指令的执行的一部分。访问异常在CPU尝试从不可用的位置进行预取出或检测到某些其它访问异常条件时不被辨识,而是由分支指令或中断改变指令顺序,使得不执行中断。每个指令可以由于指令取出而使访问异常被辨识。此外,与指令执行关联的访问异常可由于对存储器中的操作数的访问而发生。当在不遭遇异常的情况下无法取出第一个指令半字时,指示由于取出指令而导致的访问异常。当指令的第一个半字没有访问异常时,可以根据由指令的前两位指定的指令长度,为附加的半字指示访问异常;然而,当可以在不访问指令的第二或第三个半字的情况下执行操作时, 不可预测是否为未使用的部分指示访问异常。因为为指令取出指示访问异常对于所有指令是共同的,其不涵盖在各个单独的指令定义中。除了在各个单独的指令描述中另外指示外,以下规则适用于与对操作数位置的访问关联的异常。对于取出型操作数,仅必须为完成操作所需的操作数部分指示访问异常。不可预测是否为取出型操作数中那些完成操作所不需要的部分指示访问异常。对于存储型操作数,即使可以在不使用操作数的不可访问部分的情况下完成操作,也为整个操作数辨识访问异常。在将存储型操作数的值定义为不可预测的情形中,不可预测是否指示访问异常。在对操作数位置的访问可以导致访问异常被辨识的任何时候,在指令的描述中的程序异常的列表中都包括字“访问”。此条目还指示哪个操作数可以导致异常被辨识以及是在对该操作数位置的取出访问还是存储访问上辨识出的异常。仅针对各个特定指令所定义的操作数的部分辨识访问异常。当CPU尝试执行具有无效的操作码的指令时,辨识操作异常。该操作码可以是未分配的,或者具有该操作码的指令不能被安装在CPU上。该操作被抑制。指令长度码为1、 2或3。由十六进制的0001 (或者,在指示并发的PER事件的情况下为十六进制的0081)的程序中断代码来指示该操作异常。一些模型可以提供此公布中未描述的指令,诸如用于辅助或作为特殊或自定义特征的一部分而提供的指令。因此,在此公布中未描述的操作码不一定导致操作异常被辨识。 此外,这些指令可以使操作模式被设立,或者还可以改变机器以便影响后续指令的执行。为了避免导致这样的操作,应当仅当期望与该操作码所关联的特定功能时才执行具有在此公布中未描述的操作码的指令。当下列中的任何一个为真时,辨识出规范(specification)异常1. 1被引入PSW的未分配比特位置中(艮P,比特位置0、2-4、24_30或33-63中的任何一个)。这被处理为早先的PSW规范异常。2. 1被引入PSW的比特位置12中。这被处理为早先的PSW规范异常。3. PSff在下列任何一种方式中无效a. PSff的位31为1并且位32为0。b. PSff的位31和32为0,指示24位寻址模式,并且PSW的位64-103不全为0。c. PSff的位31为0 并且位32为1,指示31位寻址模式,并且PSW的位64-96不全为0。这被处理为早先的PSW
规范异常。4. PSff包含奇数指令地址。5.操作数地址在需要完整边界指派的指令中不指派这样的完整边界。6.需要指派偶编号的寄存器的指令的R字段指定指派奇编号的通用寄存器。7.为扩展的操作数指派除0、1、4、5、8、9、12或13之外的浮点寄存器。8.十进制算术中的乘数或除数超过15位数字和符号。9.在十进制乘法或除法中,第一操作数字段的长度小于或等于第二操作数字段的长度。10.尝试CIPHER MESSAGE (密码消息)、CIPHER MESSAGE WITH CHAINING(具有链的
21密码消息)、C0MPUTE INTERMEDIATE MESSAGE DIGEST (计算中间消息摘要)、C0MPUTE LAST MESSAGE DIGEST(计算最后的消息摘要)或COMPUTE MESSAGE AUTHENTICATION CODE(计算消息认证码)的执行,并且通用寄存器0的位57-63中的功能码包含未分配的或未安装的功能码。11.尝试 CIPHER MESSAGE 或 CIPHER MESSAGE WITH CHAINING 的执行,并且 Rl 或 R2字段指派奇编号的寄存器或通用寄存器0。12.尝试 CIPHER MESSAGE、CIPHER MESSAGE WITH CHAINING、COMPUTE INTERMEDIATE MESSAGE DIGEST 或 COMPUTE MESSAGE AUTHENTICATION CODE 的执行,并且第二操作数长度不是所指派的功能的数据块尺寸的倍数。此规范异常条件不适用于询问功能。13.尝试COMPARE AND FORM CODEWORD (比较和形成码字)的执行,并且通用寄存器1、2和3并非初始地包含偶值。32.尝试COMPARE AND SWAP AND STORE (比较和交换和存储)的执行,并且存在下列条件中的任何一个 功能码指定未分配的值。 存储特性指定未分配的值。 功能码为0,并且未在字边界上指派第一操作数。 功能码为1,并且未在双字边界上指派第一操作数。 未在与存储值的尺寸一致的完整边界上指派第二操作数。33.尝试 COMPARE LOGICAL LONG UNICODE (比较逻辑长 UNICODE)或 MOVE LONG UNICODE(移动长UNICODE)的执行,并且通用寄存器Rl+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 MESSAGE DIGEST,COMPUTE LASTMESSAGE DIGEST 或COMPUTE MESSAGE AUTHENTICATION CODE的执行,并且下列中的任一个为真· R2字段指派奇编号的寄存器或通用寄存器0。 通用寄存器0的位56不为0。37.尝试 CONVERT HFP TO BFP (将 HFP 转换为 BFP)、CONVERT TO FIXED (转换为固定的)(BFP或HFP)或LOAD FP INTEGER(加载FP整数)(BFP)的执行,并且M3字段不指派有效变址数(modifier)。38.尝试DIVIDE TO INTEGER(分为整数)的执行,并且M4字段不指派有效变址数。39.尝试EXE⑶TE的执行,并且目标地址为奇数。40.尝试EXTRACT STACKED STATE (提取堆栈的状态)的执行,并且通用寄存器R2 的比特位置56-63中的码在不安装ASN和LX重新使用(ASN-and-LX_reuse)设施时大于4, 或者在安装该设施时大于5。
41.尝试FIND LEFTMOST ONE (发现最左一个)的执行,并且Rl字段指派奇编号的
寄存器。42.尝试INVALIDATE DAT TABLE ENTRY (无效DAT表条目)的执行,并且通用寄存器R2的位44-51不全为0。43.尝试LOAD FPC的执行,并且第二操作数中与FPC寄存器中不支持的位对应的一个或多个位为1。44.尝试LOAD PAGE-TABLE-ENTRY ADDRESS (加载页面-表-条目地址)的执行, 并且该指令的M4字段包含除二进制0000-0100之外的任何值。45.尝试LOAD PSff的执行,并且第二操作数地址处的双字的位12是0。此异常是否被辨识到依赖于模型。46.尝试MONITOR CALL (监视调用)的执行,并且该指令的比特位置8_11不包含 O047.尝试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字段为 O052.尝试PERFORM TIMING FACILITY FUNCTION(执行定时设施功能)的执行,并且下列中的任何一个为真 通用寄存器0的位56不为0。 通用寄存器0的位57-63指定未分配或未安装的功能码。53.尝试PROGRAM TRANSFER (执行转移)或PROGRAM TRANSFER WITH INSTANCE (执行具有实例的转移)的执行,并且下列中的全部为真· PSW中的扩展的寻址模式位为0。 由该指令的R2字段指派的通用寄存器中的基本寻址模式位(位32)为0。 相同寄存器中的指令地址的位33-39不全为0。54.尝试RESUME PROGRAM (恢复程序)的执行,并且下列中的任一个为真 对于当前PSW中的布置,第二操作数中的PSW字段的位31、32和64-127无效。 如果下列中的任何一个为真,则辨识出该异常-位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 (搜索字符串UNICODE)的执行,并且通用寄存器 0的位32-47不全为0。56.尝试 SET ADDRESS SPACE CONTROL (设置地址空间控制)或 SET ADDRESS SPACE CONTROL FAST (快速设置地址空间控制)的执行,并且第二操作数地址的位52和53不都为 O057.尝试SET ADDRESSING MODE (SAM24)的执行,并且PSW中未更新的指令地址的位0-39 (PSff的位64-103)不全为0。58.尝试SET ADDRESSING M0DE(SAM31)的执行,并且PSW中未更新的指令地址的位0-32 (PSff的位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字节边界上对齐(align)。62.尝试 TRANSLATE TWO TO ONE (将 2 转变为 1)或 TRANSLATE TWO TO TWO (将 2 转变为2)的执行,并且通用寄存器Rl+1中的长度不指定偶数个字节。63.尝试UNPACK ASCII的执行,并且Ll字段大于31。64.尝试UNPACK UNICODE的执行,并且Ll字段大于63或者是偶数。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 PSff,LOAD PSff EXTENDED (加载PSW扩展)、PROGRAM RETURN(程序返回)或中断引入时,ILC是0。当由SETADDRESSING M0DE(SAM24, SAM31)引入异常时,ILC 为 1,或者如果 SET ADDRESSING MODE 是 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设施,则作为程序中断动作的一部分,将阻断事件地址(breaking-event-address)寄存器的内容放置在实际存储位置272-279中。除PER事件和加密操作异常外,通过放置在中断代码的最右侧的七个比特位置中的编码的值来指示导致中断的条件。一次仅可以指示一个条件。将中断代码的位0-7设置为0。通过将中断代码的位8设置为1来指示PER事件。当这是唯一条件时,位0-7和9-15也被设置为0。当与另一程序中断条件并发地指示PER事件时,位8是1,并且对于另一条件设置位0-7和9-15。通过十六进制0119的中断代码指示加密操作异常,或者,如果也指示PER事件,则是十六进制0199。当存在对应的掩码位时,程序中断可以仅当该掩码位为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 异常。作为另一示例,如果存在针对DXC 3 (DFP指令)和DXC 1 (AFP寄存器)两者的条件, 则报告DXC 3。当规范异常和AFP寄存器数据异常都适用时,不可预测哪一个被报告。当CPU尝试引用在配置中不可用的主存储器位置时,寻址异常被辨识。当主存储器位置未安装时,当该存储器单元未在该配置中时,或者当该存储器单元断电时,该主存储器位置在该配置中不可用。指派在配置中不可用的存储器位置的地址被称为无效。当指令的地址无效时,抑制操作。类似地,当EXE⑶TE的目标指令的地址无效时,抑制操作。而且, 当在访问表或表条目时遭遇寻址异常时,抑制操作单元。适用该规则的表和表条目是可调度单元控制(dispatchable-unit-control)表、主ASN第二表条目、以及访问列表、区域第一表、区域第二表、区域第三表、段表、页表、联接表、联接第一表、联接第二表、条目表、ASN 第一表、ASN第二表、权职(authority)表、联接栈和踪迹表中的条目。当在用于动态地址转换的隐性引用和与 LOADPAGE-TABLE-ENTRY ADDRESS,LOAD REAL ADDRESS (加载实际地址)、 STORE REAL ADDRESS (存储实际地址)和TEST PROTECTION(测试保护)的执行关联的引用两者中,对于引用区域第一表、区域第二表、区域第三表、段表和页表而遭遇寻址异常时, 该寻址异常导致抑制。类似地,当在隐性地或作为LOAD PAGE-TABLE-ENTRY ADDRESS,LOAD REAL ADDRESS,STORE REAL ADDRESS,TEST ACCESS(测试访问)或 TEST PROTECTION(测试保护)的一部分而完成的访问寄存器转换中遭遇访问可调度单元控制表、主ASN第二表条目、访问列表、ASN第二表或权职表的寻址异常时,它们导致抑制。除执行被抑制的一些特定指令外,终止针对可以被转换但指派不可用位置的操作数地址的操作。对于终止,仅结果字段会发生改变。在此上下文中,术语“结果字段”包括条件码、寄存器和任何所提供的且被指派为由指令改变的存储器位置。 前述内容有益于理解一个计算机系统实施例的术语和结构。实施例不限于ζ/ Architecture或所提供的对其的描述。利用这里的教导,实施例可以有利地应用于其它计算机厂商的其它计算机架构。 不同的处理器架构提供有限数目的通用寄存器(GR),其被所架构的指令集的指令显性地(和/或隐性地)识别。IBM z/Architecture及其前身架构(回溯至大约1964年的原始系统360)为每个中央处理单元(CPU)提供16个通用寄存器(GR)。GR可以被处理器(中央处理单元(CPU))的指令如下使用 作为算术或逻辑运算的源操作数。 作为算术或逻辑运算的目标操作数。 作为存储器操作数的地址(基址寄存器、索引寄存器或者直接)。 作为存储器操作数的长度。 其它使用,诸如向和从指令提供功能码或其它信息。直到在2000年引入IBM z/Architecture大型机为止,大型机通用寄存器由32位组成;通过z/Architecture的引入,通用寄存器由64位组成,然而,为了兼容性的原因,许多z/Architecture指令继续支持32位。类似地,其它架构(诸如,来自Intel 的X86)例如提供兼容性模式,使得具有例如 32位寄存器的当前机器提供用于仅访问32位GR的前8位或16位的指令模式。甚至在早期的IBM系统360环境中,16个寄存器(例如由指令中的4位寄存器字段识别)被证实对于汇编程序员和编译器设计者来说使人畏缩。适度大小的程序可能需要几个基址寄存器来寻址代码和数据,从而限制可用于保持活动变量的寄存器数目。某些技术已经被用于寻址有限数目的寄存器 帮助最小化基址寄存器过度利用的程序设计(与模块化编程一样简单)。 编译器已经使用诸如寄存器“染色(coloring),,的技术来管理寄存器的动态再分配。 可如下减少基址寄存器的使用 具有立即常量的较新的算术和逻辑指令(在该指令内)。 具有相对立即操作数地址的较新指令。 具有长位移的较新指令。然而,当存在比CPU中的寄存器的数目可容纳的活动变量和寻址范围更多的活动变量和寻址范围时,保持恒定的寄存器压力。z/Architecture提供三个程序可选寻址模式24、31和64位寻址。然而,对于既不需要64位值也不采用64位存储器寻址的程序,具有64位GR的益处有限。下面的公开描述采用64位寄存器用于一般不使用64位寻址或变量的程序的技术。在此公开内,使用这样的约定从左到右以升序对寄存器的比特位置进行编号 (大端)。在64位寄存器中,位0(最左侧位)表示最高有效值(263),而位63 (最右侧位) 表示最低有效值(2°)。这样的寄存器的最左侧的32位(位0-31)称为高字,且寄存器的最右侧的32位(位32-63)称为低字,其中字是32位。高字设施当CPU在32位模式中时,引入一套新的通用指令(即,可用于应用程序的指令) 来利用64位通用寄存器的高字(最高有效的32位)。在继续被限制于低字的旧指令之外, 程序还可以采用新指令来访问GI^R的隐藏(先前不可用的)高字。参考图8,写入到具有16或32位寄存器的架构中的程序可以运行在支持64位寄存器的架构的较新版本上。所书写的用于例如32位模式的程序仅获知32位寄存器、以及典型地,32或更少的逻辑地址位。64位架构的计算机系统中的操作系统(OS)SOl可以支持为64位模式而书写的程序803以及为32位模式而书写的程序802。这样的机器中的上下文切换操作804无论应用程序802、803是在32还是64位模式中,都将当在程序和/或操作系统之间切换时,保存(805)64位寄存器以及程序状态字(PSW)。因此,运行在64位操作系统的控制下的64位机器上的32位模式中的32位程序将在某些上下文切换期间保存并恢复其寄存器。即使经历上下文切换的程序正运行在32位模式中,计算机系统和操作系统也可以在上下文切换期间实际保存和恢复805通用寄存器的全部64位。因此,程序仅看到寄存器的一半,(仅每个寄存器的64位中的32位)。所实施的寄存器的其它32位从32位程序中“隐藏”。已知寄存器的32位可以用于寻址,并且即使计算机系统支持64位寻址,OS 也可以经由动态地址转换来管理,使得地址中的仅32位由32位模式中的32位程序操纵。 32位模式可被看作低字模式,因为程序仅利用双字(64位)寄存器的低字(32位字)。应用程序在OS的控制下操作,并且调用OS以便使OS执行特定功能。此“调用”通过保存应用程序的状态并加载要被执行的OS的状态805的上下文切换804来执行,其中OS在由上下文切换提供的地址处开始执行。OS随后可以通过上下文切换804调用应用程序之一以允许该应用程序运行。在一些应用中,通过允许每个应用(操作的时间片)来支持资源的使用,并且上下文切换804被用于在逝去时间之后“中断”活动的程序,以便允许OS为另一时间片调度另一应用程序。可以通过必须被设置为使能高字设施的机器中的位或字段来控制高字设施的可用性。当高字设施被使能时,32位程序可以通过执行新的“高字设施”指令,而利用寄存器的“隐藏”部分。可以提供向使用低字寄存器的指令提供新功能的其它新“高字设施”指令。在这些指令的大多数中,仅操纵寄存器的高字。在某些指令中,提供变型来操纵一个源寄存器的高字与另一源寄存器的低字,结果被放置在目标寄存器(例如,AHHLR)的高字中。RISBLG提供类似于高字RISBHG指令的低字。RISBHG和RISBLG在实施多个伪指令 (利用来自汇编程序的辅助)中提供极大的灵活性。如上所述,处理器架构采用通用寄存器(GPR),其可用于架构的指令集。为了比数据存储在较慢的主存储器(其通常由复杂的动态地址转换机制实施)中具有更快的性能, 程序可以利用可以在高速存储器(诸如芯片上的嵌入式锁存)中实施的GPR中的数据。在诸如具有64个GPR的x86的某些架构中,每个GPR的大小已经演进地从8位增加到16位、 32位和当前的64位。然而,可用于指令的GPR的数目((x86为64个),由指令内的GPR字段的位的数目(x86为6个)确定)保持相同,使得为例如具有8位GPR的旧指令书写的程序仍然将运行在例如具有32位GPR的较新架构上。因此,具有在8位模式中操作的32位 GPR的机器将仅提供对每个32位GPR的低8位的访问。然而,在上下文切换期间,32位操作系统(OS)将总是保存和恢复每个GPR的全部32位。在IBM z/Architecture实施中,机器可以具有16个GPR,每个GPR由64位(位 0-63)组成,但可以运行为32位模式中的32位寄存器书写的应用程序。所述32位可以是 GPR的低阶32位(位32-63),其中高阶32位(位0_31)在32位操作模式中不可用(隐藏)。应用程序无法利用GPR的高阶32位,因为它们对于程序是不可见的。在示例中,可能已经为仅具有32位寄存器且对存储器寻址24或32位的逻辑地址的前代机器的32位机器书写了应用程序。32位模式使得该示例的32位应用程序能够运行在较新的机器上,该较新的机器具有支持64位GPR的架构、具有64位操作系统(OS)并支持64位模式中的64 位应用程序。在为32位GI^R定义的另一机器架构中,可以提供对于应用程序不可见的一组 32位的“隐藏GPR”。提供使得指令的子集能够访问隐藏的或高阶GPR的“高字设施模式”,同时剩余的指令集可以访问架构的或低阶GPR。优选地,在“高字设施模式”中,指令的该子集在一个实施中可以仅访问高阶GPR, 但在另一实施中,指令的该子集可以将GPR字段定义为指向高阶GPR并且将另一 GPR字段定义为指向低阶GPR。在另一优选实施中,在“高字设施模式”中,可以仅使用低阶GI^R用于生成主存储器地址。在实施中,在“高字设施模式”中执行的应用可以与不在“高字设施模式”中执行的应用共同存在。不在高字设施模式中的应用可以是32位GI3R应用或64位GI3R应用。在此示例中,用为利用32位的GI3R书写的应用来利用具有64位的机器的GPR,然而,本实施例将提供如下优势具有任意位数(16、24、32、48、64、128)的机器的GI5R运行为具有较少位数 (8、16、24、32、48、64)的GI3R而书写的应用。此外,高字设施模式隐藏的寄存器可以仅利用隐藏GPR的指派的部分,使得在前述示例的32位应用程序中,在某些指令的高字设施模式中可用的隐藏寄存器可以是64位GPR的高阶32位中的低阶8或16位,而其它隐藏寄存器可以是例如65位GPR的高阶32位中的高阶8或16位。使用z/Architecture和/或x86 架构陈述实施例的教导,然而,根据这里的教导,其它实施对于普通技术人员来说也是显然易见的。在示例z/Architecture实施例中,对于所选的32位指令,高字设施通过利用十六个64位通用寄存器(位0-63)的先前不可用的高阶位0-31,有效地提供十六个附加的32位寄存器(高字寄存器)。在实施例中,高字设施可以利用指示功能的助记符号(例如,AHHHR 用于ADD HIGH(加高))来实现下列指令。 參 ADD HIGH (力口高)(AHHHR, AHHLR)· ADD IMMEDIATE HIGH(加立即高)(AIH)· ADD LOGICAL HIGH(加逻辑高)(ALHHHR, ALHHLR)· ADD LOGICAL WITH SIGNED IMMEDIATE HIGH(具有符号的立即高的加逻辑) (ALSIH, ALSIHN)參 BRANCH RELATIVE ON COUNT HIGH (计数高分支相对)(BRCTH)· COMPARE HIGH(比较高)(CHHR,CHLR, CHF)· COMPARE IMMEDIATE HIGH(比较立即高)(CIH)
· COMPARE LOGICAL HIGH(比较逻辑高)(CLHHR, CLHLR, CLHF)· COMPARE LOGICAL IMMEDIATE HIGH (比较逻辑立即高)(CLIH)· LOAD BYTE HIGH(加载字节高)(LBH)· LOAD HALFffORD HIGH(加载半字高)(LHH)· LOAD HIGH(加载高)(LFH)· LOAD LOGICAL CHARACTER HIGH(加载逻辑字符高)(LLCH)· LOAD LOGICAL HALFffORD HIGH(加载逻辑半字高)(LLHH)· ROTATE THEN INSERT SELECTED BITS HIGH(循环然后插入所选择的位高) (RISBHG)· ROTATE THEN INSERT SELECTED BITS LOW(循环然后插入所选择的位低) (RISBLG)· STORE CHARACTER HIGH(存储字符高)(STCH)· STORE HALFffORD HIGH(存储半字高)(STHH)· STORE HIGH(存储高)(STFH)參 SUBTRACT HIGH(减高)(SHHHR,SHHLR)· SUBTRACT LOGICAL HIGH(减逻辑高)(SLHHHR,SLHHLR)下列附加的通用指令在互锁访问设施被安装时可能可用參 LOAD AND ADD (加载和加)(LAA, LAAG)· LOAD AND ADD LOGICAL (加载和加逻辑)(LAAL, LAALG)· LOAD AND AND (加载和与)(LAN,LANG)· LOAD AND EXCLUSIVE 0R(加载和异或)(LAX,LAXG)· LOADAND OR (加载和或)(LAO,LAOG)· LOAD PAIR DISJOINT (加载对解体)(LPD,LPDG)下列附加的通用指令在条件加载/存储(load/store-on-condition)设施被安装时可能可用· LOAD ON CONDITION (条件加载)(L0C, LGOC, LGROC, LR0C)· STORE ON CONDITION (条件存储)(ST0C,STG0C)下列附加的通用指令在独特操作数设施被安装时可能可用
· ADD (ARK, AGRK)參 ADD IMMEDIATE (AHIK, AGHIK)· ADD LOGICAL (ALRK,ALGRK)· ADD LOGICAL WITH SIGNED IMMEDIATE(ALHSIK,ALGHSIK)· AND (NRK, NGRK)· EXCLUSIVE 0R(XRK, XGRK)· 0R(0RK, OGRK)· SHIFT LEFT SINGLE (左移单个)(SLAK)· SHIFT LEFT SINGLE LOGICAL (左移单个逻辑)(SLLK)· SHIFT RIGHT SINGLE (右移单个逻辑)(SRAK)· SHIFT RIGHT SINGLE LOGICAL (右移单个逻辑)(SRLK)
29
· SUBTRACT (减)(SRK,SGRK)· SUBTRACT LOGICAL (减逻辑)(SLRK, SLGRK)示例高字指令下面是可以采用高字设施的示例指令。ADD HIGH (RRF 格式)当由计算机系统执行指令时,第二操作数被加至第三操作数,并且将和放置在第一操作数位置。操作数以及和被处理为32位带符号二进制整数。第一和第二操作数分别在通用寄存器Rl和R2的位0-31中;通用寄存器Rl的位32-63不变,并且忽略通用寄存器 R2的位32-63。对于AHHHR操作码,第三操作数在通用寄存器R3的位0-31中;忽略寄存器的位32-63。对于AHHLR操作码,第三操作数在通用寄存器R3的位32-63中;忽略寄存器的位0-31。当存在溢出时,通过允许任何对符号比特位置的进位而忽略任何从符号比特位置的进位输出而获得结果,并且设置条件码3。如果定点溢出掩码是1,则发生针对定点溢出的程序中断。结果条件码0结果零;无溢出1结果小于零;无溢出2结果大于零;无溢出3 溢出程序异常·定点溢出·操作(如果未安装高字设施)ADD IMMEDIATE HIGH (RIL 格式)当由计算机系统执行指令时,第二操作数被加到第一操作数上,并且将和放置在第一操作数位置处。操作数以及和被处理为32位带符号二进制整数。第一操作数在通用寄存器Rl的位0-31中;寄存器的位32-63不变。当存在溢出时,通过允许任何对符号比特位置的进位输入并忽略任何从符号比特位置的进位输出而获得结果,并且设置条件码3。如果定点溢出掩码是1,则发生针对定点溢出的程序中断。结果条件码0结果零;无溢出1结果小于零;无溢出2结果大于零;无溢出3 溢出程序异常·定点溢出·操作(如果未安装高字设施)ADD LOGICAL HIGH (RRF 格式)当由计算机系统执行指令时,第二操作数被加到第三操作数上,并且将和放置在第一操作数位置。操作数以及和被处理为32位无符号二进制整数。第一和第二操作数分别在通用寄存器Rl和R2的位0-31中;通用寄存器Rl的位32-63不变,并且忽略通用寄存器R2的位32-63。对于ALHHHR操作码,第三操作数在通用寄存器R3的位0_31中;忽略寄存器的位32-63。对于ALHHLR操作码,第三操作数在通用寄存器R3的位32-63中;忽略寄存器的位0-31。结果条件码0结果零;无进位1结果非零;无进位2结果零;进位3结果非零;进位程序异常·操作(如果未安装高字设施)ADD LOGICAL WITH SIGNED IMMEDIATE HIGH (RIL 格式)当由计算机系统执行指令时,第二操作数被加到第一操作数上,并且将和放置在第一操作数位置。第一操作数以及和被处理为32位无符号二进制整数。第二操作数被处理为32位带符号二进制整数。第一操作数在通用寄存器Rl的位0-31中;寄存器的位32-63 不变。结果条件码对于ALSIH,如下设置该码0结果零;无进位1结果非零;无进位2结果零;进位3结果非零;进位对于ALSIHN,该码保持不变。程序异常·操作(如果未安装高字设施)BRANCH RELATIVE ON COUNT HIGH (RI、RIL 格式)当由计算机系统执行指令时,从第一操作数减去1,并且将结果放置在第一操作位置。对于BRANCH RELATIVE ON COUNT(BRCT操作码),第一操作数和结果被处理为通用寄存器Rl的位32-63中的32位二进制整数,并且忽略溢出;寄存器的位0_31不变。对于 BRANCH RELATIVE ON COUNT HIGH(BRCTH操作码),第一操作数和结果被处理为通用寄存器 Rl的位0-31中的32位二进制整数,并且忽略溢出;寄存器的位32-63不变。对于BRANCH RELATIVE ON COUNT (BRCTG操作码),第一操作数和结果被处理为64位二进制整数,并且忽略溢出。当结果为0时,利用更新的指令地址,继续正常的指令排序。当结果为非零时,当前PSW中的指令地址被分支地址取代。12字段的内容是带符号二进制整数,其指定被加到指令的地址上以生成分支地址的半字数。条件码该码保持不变。程序异常·操作(如果未安装高字设施,则BRCTH)编程说明1.除了指定分支地址的手段之外,该操作与BRANCH ON COUNT指令的操作相同。
31
2.可以将第一操作数和结果当作带符号或无符号的二进制整数,因为二进制减法的结果在两种情况下相同。3. 1的初始计数产生0,且不发生分支;0的初始计数产生-1,且使得分支被执行;-1的初始计数产生_2,且使得分支被执行;等等。在循环中,每次执行指令时发生分支, 直到结果再次为0为止。注意,对于BRCT,由于数的范围,-231的初始计数产生正值231_1,或者,对于 BRCTG,463的初始计数产生正值沈3-1。4.当指令是执行型指令的目标时,分支相对于目标地址。COMPARE HIGH (RRE、RXY 格式)、COMPARE IMMEDIATE HIGH (RIL 格式)当由计算机系统执行该指令时,将第一操作数与第二操作数比较,并且在条件码中指示结果。操作数被处理为32位带符号二进制整数。第一操作数在通用寄存器Rl的比特位置0-31中;忽略寄存器的比特位置32-63。对于COMPARE HIGH(CHHR操作码),第二操作数在通用寄存器R2的比特位置0-31中;忽略该寄存器的比特位置32-63。对于COMPARE HIGH(CHLR操作码),第二操作数在通用寄存器R2的比特位置32-63中;忽略该寄存器的比特位置0-31。CHF的位移被处理为20位带符号二进制整数。结果条件码0操作数相等1第一操作数低2第一操作数高3 —程序异常·访问(仅CHF的操作数2)·操作(如果未安装高字设施)COMPARE LOGICAL HIGH (RRE、RXY 格式)、COMPARE LOGICAL IMMEDIATE HIGH (RIL 格式)当由计算机系统执行该指令时,将第一操作数与第二操作数比较,并在条件码中指示结果。操作数被处理为32位无符号二进制整数。第一操作数在通用寄存器Rl的比特位置0-31中;忽略寄存器的比特位置32-63。对于COMPARE LOGICAL HIGH (CLHHR操作码), 第二操作数在通用寄存器R2的比特位置0-31中;忽略该寄存器的比特位置32-63。对于 COMPARE LOGICAL HIGH (CLHLR操作码),第二操作数在通用寄存器R2的比特位置32-63中; 忽略该寄存器的比特位置0-31。CLHF的位移被处理为20位带符号二进制整数。结果条件码0操作数相等1第一操作数低2第一操作数高3 —程序异常·访问(仅CLHF的操作数2)·操作(如果未安装高字设施)
LOAD BYTE HIGH (RXY 格式)当由计算机系统执行该指令时,第二操作数被符号扩展(sign extended)并被放置在第一操作数位置。第二操作数的长度为1字节并且被处理为8位带符号二进制整数。 第一操作数被处理为通用寄存器Rl的位0-31中的32位带符号二进制整数;该寄存器的位 32-63不变。位移被处理为20位带符号二进制整数。条件码该码保持不变。程序异常 访问(取出,操作数2)·操作(如果未安装高字设施)LOAD HALFWORD HIGH (RXY 格式)当由计算机系统执行该指令时,第二操作数被符号扩展并被放置在第一操作数位置处。第二操作数的长度为2个字节并被处理为16位带符号二进制整数。第一操作数被处理为通用寄存器Rl的位0-31中的32位带符号二进制整数;该寄存器的位32-63不变。 位移被处理为20位带符号二进制整数。条件码该码保持不变。程序异常 访问(取出,操作数2)·操作(如果未安装高字设施)LOAD HIGH (RXY 格式)当由计算机系统执行该指令时,第二操作数被未改变地放置在第一操作数位置处。第二操作数是32位,并且第一操作数在通用寄存器Rl的位0-31中;该寄存器的位 32-63不变。位移被处理为20位带符号二进制整数。条件码该码保持不变。程序异常 访问(取出,操作数2)·操作(如果未安装高字设施)LOAD LOGICAL CHARACTER HIGH (RXY 格式)当由计算机系统执行该指令时,将1字节的第二操作数放置在通用寄存器Rl的比特位置M-31中,并且将0放置在通用寄存器Rl的比特位置0-23中;通用寄存器Rl的比特位置32-63不变。位移被处理为20位带符号二进制整数。条件码该码保持不变。程序异常 访问(取出,操作数2) ·操作(如果未安装高字设施)LOAD LOGICAL HALFffORD HIGH (RXY 格式)当由计算机系统执行该指令时,将2字节的第二操作数放置在通用寄存器Rl的比特位置16-31中,并且将0放置在通用寄存器Rl的比特位置0-15中;通用寄存器Rl的比特位置32-63不变。位移被处理为20位带符号二进制整数。条件码该码保持不变。
程序异常 访问(取出,操作数2)·操作(如果未安装高字设施)ROTATE THEN INSERT SELECTED BITS HIGH (RIE 格式)、ROTATE THEN INSERT SELECTED BITS LOW (RIE 格式)当由计算机系统执行该指令时,将64位的第二操作数循环(rotate)左移第五操作数中指定的位的数目。从该操作数的最左侧比特位置移出的每个比特重新进入该操作数的最右侧比特位置中。经循环的第二操作数的所选位取代第一操作数的对应比特位置的内容。对于ROTATE THEN INSERT SELECTED BITS HIGH,第一操作数在通用寄存器Rl的位 0-31 中,且该寄存器的位 32-63 不变。对于 ROTATE THEN INSERT SELECTED BITS LOW,第一操作数在通用寄存器Rl的位32-63中,且该寄存器的位0-31不变。第二操作数在通用寄存器R2中保持不变。对于ROTATE THEN INSERT SELECTED BITS HIGH, 13和14字段的位3-7 (分别为指令的位19-23和27-31)与附加在每个字段左侧的二进制0 —起形成6位无符号二进制整数,其指定第一操作数中和循环之后的第二操作数中的所选位范围的起始和结束比特位置(包括端点)。当结束比特位置小于起始比特位置时,所选位范围从位31 向位0回绕。因此,所选的位范围的起始和结束比特位置总在0与31之间。对于ROTATE THEN INSERT SELECTED BITS LOW,13和14字段的位3_7与附加在每个字段左侧的二进制 1 一起形成6位无符号二进制整数,其指定第一操作数中和循环之后的第二操作数中的所选位范围的起始和结束比特位置(包括端点)。当结束比特位置小于起始比特位置时,所选位范围从位63向位32回绕。因此,所选的位范围的起始和结束比特位置总在32与63之间。15字段的位2-7(该指令的位34-59)包含指定第二操作数循环左移的位数目的无符号二进制整数。14字段的位0(该指令的位24)包含零剩余位(zero-remaining-bits)控制(Z)。Z位控制显示设置第一操作数的剩余位(S卩,在所指定范围之外的那些位(如果存在))。当Z位为0时,第一操作数的剩余位不变。当Z位为1时,第一操作数的剩余位被设置为0。刚刚描述的立即字段为如下13字段的位0-2和14字段的位1_2(该指令的位 16-19和25-26)被保留并应当包含0 ;否则,程序未来可能无法兼容地操作。忽略15字段的位0-1(该指令的位32-33)。条件码该码保持不变。程序异常·操作(如果未安装高字设施)编程说明1.虽然将15字段的位2-7定义为包含指定第二操作数循环左移的位数目的无符号二进制整数,但是可以编写有效地指定向右循环量的负值的码。2.总是以其未循环的形式使用第一操作数。当Rl和R2字段指派相同寄存器时, 首先循环寄存器中所包含的值,随后将经循环的值的所选位插入到未循环的寄存器内容的对应位中。3.在汇编语法中,包含循环量的15操作数被认为是可选的。当未编码15字段时, 隐含循环量为0。4. 14字段包含零剩余位控制(在位0中)和结束比特位置值(在位2-7中)。例如,为了将寄存器7的位40-43插入寄存器5的对应位中(无循环)并且将0插入寄存器 5的右半侧中的剩余位中,程序员可进行编码X ‘80’表示添加到结束比特位置以形成14 字段的零剩余位控制。高级汇编(HLASM)分别以RISBHGZ和RISBLHZ的形式为RISBHG和 RISBLG的零剩余位版本提供替代的助记符号。所述助记符号的“Z”后缀指示当生成对象代码时,所指定的14字段是具有值X’ 80’的ORed。上面所示的使用Z后缀的助记符号的示例的相当物如下5.在某些模型上,可以通过将零剩余位控制设置为1(或者使用Z助记符号后缀) 实现RISBHG和RISBLG的增强性能。6.与设置条件码的 ROTATE THEN INSERT SELECTED BITS 不同,ROTATE THEN INSERT SELECTED BITS HIGH 和 ROTATE THEN INSERT SELECTED BITS LOW 不设置条件码。STORE CHARACTER HIGH (RXY 格式) 当由计算机系统执行该指令时,将通用寄存器Rl的位M-31不改变地放置在第二操作数位置处。第二操作数的长度为1字节。位移被处理为20位带符号二进制整数。条件码该码保持不变。程序异常 访问(存储,操作数2)·操作(如果未安装高字设施)STORE HALFTORD HIGH (RXY 格式)当由计算机系统执行该指令时,将通用寄存器Rl的位16-31不改变地放置在第二操作数位置处。第二操作数的长度为2字节。位移被处理为20位带符号二进制整数。条件码该码保持不变。程序异常 访问(存储,操作数2) ·操作(如果未安装高字设施)STORE HIGH (RXY 格式)当由计算机系统执行该指令时,将第一操作数不改变地放置在第二操作数位置处。第一操作数在通用寄存器Rl的位0-31中,并且第二操作数在存储器中是32位。位移被处理为20位带符号二进制整数。条件码该码保持不变。程序异常 访问(存储,操作数2)·操作(如果未安装高字设施)SUBTRACT HIGH (RRF 格式)当由计算机系统执行该指令时,从第二操作数中减去第三操作数,并且将差放置在第一操作数位置。操作数和差被处理为32位带符号二进制整数。第一和第二操作数分别在通用寄存器Rl和R2的位0-31中;通用寄存器Rl的位32-63不变,并且忽略通用寄存器R2的位32-63。对于SHHHR操作码,第三操作数在通用寄存器R3的位0_31中;忽略寄存器的位32-63。对于SHHLR操作码,第三操作数在通用寄存器R3的位32-63中;忽略该寄存器的位0-31。当存在溢出时,通过允许任何对符号比特位置的进位输入并忽略任何从符号比特位置的进位输出而获得结果,并且设置条件码3。如果定点溢出掩码是1,则发生针对定点溢出的程序中断。结果条件码0结果零;无溢出1结果小于零;无溢出2结果大于零;无溢出3 溢出程序异常·定点溢出·操作(如果未安装高字设施)SUBTRACT LOGICAL HIGH (RRF 格式)当由计算机系统执行该指令时,从第二操作数中减去第三操作数,并且将差放置在第一操作数位置。操作数和差被处理为32位无符号二进制整数。第一和第二操作数分别在通用寄存器Rl和R2的位0-31中;通用寄存器Rl的位32-63不变,并且忽略通用寄存器R2的位32-63。对于SLHHHR操作码,第三操作数在通用寄存器R3的位0_31中;忽略寄存器的位32-63。对于SLHHLR操作码,第三操作数在通用寄存器R3的位32-63中;忽略该寄存器的位0-31。结果条件码0 —1结果非零;借位2结果零;无借位3结果非零;无借位程序异常·操作(如果未安装高字设施)参考图6,示出了示例通用寄存器(GPR),其具有16个GPR (每个GI3R在小GI3R模式中包括位32-63,并且在大GI^R模式中包括位0-63)。可以在具有第一数目(16)的大GPR 的计算机中扩展可用于程序的指令的通用寄存器(GPR)的有效数目,每个指令包括操作码和用于指定对应的GPR的一个或多个GI3R字段,每个大GPR由第一部分(31-6 和第二部分(0-31)组成。参考图7A,计算机取出用于执行的指令,包括来自第一集(set)701、第二集702或第三集710的指令。第一集仅访问任何GPR的第一部分,第二集访问任何GPR的第二部分,第三集访问整个GPR,包括第一部分和第二部分。当703计算机在例如小GI^R模式中,并正执行第一指令集的指令707用于访问第一部分时,所述执行包括708基于所述小 GI3R生成用于访问存储器操作数的存储器地址或访问小GI^R操作数,其中每个所述小GI^R由所述第一部分组成707。当703计算机在小GPR模式中时,当705计算机正执行高字指令, 执行第二指令集的指令706时,第二指令集用于访问指令指定的第二部分,其中708所述执行包括基于所述小GPR生成用于访问存储器操作数的存储器地址或访问小GI^R操作数,其中小GPR由所述指令指定的第二部分组成。当704计算机在大GI^R模式中时(其中每个大 GPR由第一部分和第二部分组成),计算机执行第三指令集的指令,所述执行包括基于所述大GI^R生成用于访问存储器操作数的存储器地址或访问大GI^R操作数,其中每个所述大GPR由所述第一部分和所述第二部分组成。响应于处于小GI^R模式中的计算机,该计算机可以生成709响应于执行第二指令集的指令的操作异常。第二指令集的指令的执行可以基于两个操作数执行751对应操作码定义的功能, 并且存储结果,该对应的操作码定义的功能由两个操作数的ADD (加)功能、两个操作数的 COMPARE(比较)功能或两个操作数的0R(或)功能组成752。第二指令集的指令的执行可以基于两个操作数执行对应操作码定义的功能,并且存储结果,该对应的操作码定义的功能由从存储器LOAD (加载)操作数的功能或将操作数 STORE (存储)到存储器的功能组成753。第二指令集的指令的执行可以基于两个操作数执行对应操作码定义的功能,并且存储结果,该对应的操作码定义的功能是ROTATE THEN INSERT SELECTED BITS (循环然后插入所选位)功能754,其包括将源操作数循环指令指定的量,然后将经循环的源操作数的所选部分插入目标操作数的所选部分中。虽然这里已经图示并描述了优选实施例,但是应当理解,所述实施例不限于这里公开的准确构造,而且保留所附权利要求限定的本发明的范围内的所有改变和修改的权利。
权利要求
1.一种计算机实施的方法,用于扩展具有第一数目的大通用寄存器(GPR)的计算机中的可用于程序指令的GPR的有效数目,每个指令包括操作码和用于指定对应的GPR的一个或多个GPR字段,每个大GPR包括第一部分和第二部分,所述大GPR包括由第一部分组成的第一小GPR和由第二部分组成的第二小GPR,所述方法包括响应于所述计算机在小GPR模式中,执行a) -b)a)执行第一指令集的指令,所述第一指令集用于访问所述第一小GPR,所述执行包括基于所述第一小GPR生成用于访问存储器操作数的存储器地址或者访问第一小GI^R操作数,其中所述第一小GPR由所述第一部分组成;以及b)执行第二指令集的指令,所述第二指令集用于访问所述第二小GPR,所述执行包括基于所述第二小GPR生成用于访问存储器操作数的存储器地址或者访问第二小GPR操作数,其中所述第二小GPR由所述第二部分组成;以及响应于所述计算机在大GH 模式中,执行第三指令集的指令,所述执行包括基于所述大GPR生成用于访问存储器操作数的存储器地址或者访问包括所述第一部分和所述第二部分的大GI^R操作数。
2.如权利要求1所述的方法,其中,所述小GPR模式包括处于24位寻址模式或31位寻址模式之一中。
3.如权利要求2所述的方法,其中,所述第一部分是32位,所述第二部分是32位,并且所述第三部分是64位。
4.如权利要求2所述的方法,其中,所述第二指令集的指令的执行包括基于两个操作数执行对应操作码定义的功能,并存储结果,所述对应操作码定义的功能由两个操作数的 “加”功能或者两个操作数的“比较”功能组成。
5.如权利要求2所述的方法,其中,所述第二指令集的指令的执行包括基于两个操作数执行对应操作码定义的功能,并且存储结果,所述对应操作码定义的功能由从存储器“加载”操作数的功能或者将操作数“存储”到存储器的功能组成。
6.如权利要求2所述的方法,其中,所述第二指令集的指令的执行包括基于两个操作数进行对应操作码定义的功能,并且存储结果,所述对应操作码定义的功能是“循环然后插入所选择的位”功能,包括将源操作数循环指令指定的量;以及将经循环的源操作数的所选择的部分插入目标操作数的所选择部分。
7.如权利要求2所述的方法,包括支持在大GI^R模式中操作的操作系统,其中在运行在小GPR模式中的应用的上下文切换期间,保存和恢复大GPR。
8.如权利要求7所述的方法,其中,所述第三指令集包括所述第一指令集和所述第二指令集。
9.一种计算机系统,用于扩展具有第一数目的大通用寄存器(GPR)的计算机中的可用于程序指令的GPR的有效数目,每个指令包括操作码和用于指定对应的GPR的一个或多个 GPR字段,每个大GPR包括第一部分和第二部分,所述大GPR包括由第一部分组成的第一小 GI^R和由第二部分组成的第二小GPR,所述计算机系统包括存储器;与所述存储器通信的处理器,所述处理器包括用于从存储器取出指令的指令取出单元和用于执行所取出的指令的一个或多个执行单元;其中,所述计算机系统被配置为执行如下方法,其包括响应于所述计算机在小G PR模式中,执行a) -b)a)执行第一指令集的指令,所述第一指令集用于访问所述第一小GPR,所述执行包括基于所述第一小GPR生成用于访问存储器操作数的存储器地址或者访问第一小GPR操作数,其中所述第一小GPR由所述第一部分组成;以及b)执行第二指令集的指令,所述第二指令集用于访问所述第二小GPR,所述执行包括基于所述第二小GPR生成用于访问存储器操作数的存储器地址或者访问第二小GPR操作数,其中所述第二小GPR由所述第二部分组成;以及响应于所述计算机在大GH 模式中,执行第三指令集的指令,所述执行包括基于所述大GPR生成用于访问存储器操作数的存储器地址或者访问包括所述第一部分和所述第二部分的大GI^R操作数。
10.如权利要求9所述的计算机系统,其中,所述小GI^R模式包括处于24位寻址模式或 31位寻址模式之一中。
11.如权利要求10所述的计算机系统,其中,所述第一部分是32位,所述第二部分是 32位,并且所述第三部分是64位。
12.如权利要求10所述的计算机系统,其中,所述第二指令集的指令的执行包括基于两个操作数进行对应操作码定义的功能,并且存储结果,所述对应操作码定义的功能由两个操作数的“加”功能或者两个操作数的“比较”功能组成。
13.如权利要求10所述的计算机系统,其中,所述第二指令集的指令的执行包括基于两个操作数进行对应操作码定义的功能,并且存储结果,所述对应操作码定义的功能由从存储器“加载”操作数的功能或者将操作数“存储”到存储器的功能组成。
14.如权利要求10所述的计算机系统,其中,所述第二指令集的指令的执行包括基于两个操作数进行对应操作码定义的功能,并且存储结果,所述对应操作码定义的功能是“循环然后插入所选择的位”功能,包括将源操作数循环指令指定的量;以及将经循环的源操作数的所选择的部分插入到目标操作数的所选择部分中。
15.如权利要求10所述的计算机系统,包括支持在大GI^R模式中操作的操作系统,其中在运行在小GPR模式中的应用的上下文切换期间,保存和恢复大GPR。
16.如权利要求15所述的计算机系统,其中,所述第三指令集包括所述第一指令集和所述第二指令集。
全文摘要
计算机采用一组通用寄存器(GPR)。每个GPR包括多个部分。在大GPR模式中操作的诸如操作系统和应用的程序访问整个GPR,然而在小GPR模式中操作的诸如应用的程序一次仅有权访问一个部分。小GPR模式中的指令操作码可以确定访问哪个部分。
文档编号G06F9/30GK102314333SQ20111016821
公开日2012年1月11日 申请日期2011年6月22日 优先权日2010年6月22日
发明者丹.F.格雷纳, 蒂莫西.J.斯莱格尔, 马塞尔.米特兰 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1