長変位機能(*1)は、20ビットの符号付き変位によりベースレジスターまたはベース+インデックスレジスターが示すアドレスから4KBを超える最大511KB(+524,287Byte)もしくは前方(マイナス変位)の最大512KB(+524,288Byte)の相対アドレス指定を可能にします。LやLAに対してLY、LAY、STに対してSTY、AHに対してAHYのように既存のニーモニックにYが付加されたY付き命令として拡張されている他、LB(Load Byte)などの新しい命令も追加されています。
長変位命令を使用することで、サイズの大きなモジュールの作成において複数のベース・レジスター設定が不要になりプログラミングは容易になります。プログラム保守においても、要件変更などで命令コードやデータ領域が増加した結果、既存のベース・レジスターでアドレスできる範囲を超えてしまうような際の対応も容易になります。モジュール分割やベース・レジスターの追加といった、既存のプログラム論理に大きな影響を及ぼすような大幅な改修を伴うことなく保守作業ができるようになります。また、相対アドレスにマイナスの値の変位が指定できることでのプログラム設計の自由度も拡がります。
*1 z/Architecture 3rd.Edition(2003年6月)にて実装された。
拡張されたニーモニック(Y付きニーモニック)
20bit長変位命令のニーモニックは、従来の命令のニーモニックにYが付加されたものです(以下Y付きニーモニックと記す)。全ての命令にY付きニーモニックが追加されたのではなく、4バイト命令であったRX、RS及びSI形式の命令のみです(それぞれ6バイト命令のRXY、RSY、SIY形式として追加された)。元々6バイト命令であったSS形式命令では20bit長変位はサポートされていません。その他、新たに追加された命令の1部は最初から20bit長変位になっています。例えば、LB(Load Byte)やLRV(Load Reversed)命令などです。
20bit長変位命令の使用例
従来の命令だけのソース・コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
MAINENTR CSECT , DEFINE CONTROL SECTION USING *,12 DEFINE OUR BASE REGISTER=R12 LR 12,15 ESTABLISH OUR BASE ADDRESS *********************************************************************** * MAIN LINE PROCESSING * *********************************************************************** L R2,FWORD AH R2,HWORD ST R2,FWORD MVC WORKAREA(32),TEXTAREA EX 0,* ABENDS0C3 AT HERE FOR DIAGNOSIS *********************************************************************** ENDPROC DS 0H SLR 15,15 SET CC=0 SVC 3 EXIT TO MVS *********************************************************************** * DATA AREA * *********************************************************************** DS 0D DC CL8'DATAAREA' EYE-CATCHER ******************* ----+----1----+----2----+----3-- DS XL10000 <== ここに故意に10000バイトの大きな領域を追加 FWORD DC F'0' HWORD DC H'0' TEXTAREA DC CL32'IBM MAINFRAME COMPUTER.' WORKAREA DS CL256 *********************************************************************** YREGS , EXPAND GPR EQUATIONS END |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
000000 00000 0285E 6 MAINENTR CSECT , DEFINE CONTROL SECTION R:C 00000 7 USING *,12 DEFINE OUR BASE REGISTER=R12 000000 18CF 8 LR 12,15 ESTABLISH OUR BASE ADDRESS 9 *********************************************************************** 10 * MAIN LINE PROCESSING * 11 *********************************************************************** 000002 0000 0000 00000 12 L R2,FWORD ** ASMA034E Operand FWORD beyond active USING range by 5945 bytes ** ASMA435I Record 12 in Z87321.Z87321@A.JOB08417.D0000101.? on volume: 000006 0000 0000 00000 13 AH R2,HWORD ** ASMA034E Operand HWORD beyond active USING range by 5949 bytes ** ASMA435I Record 13 in Z87321.Z87321@A.JOB08417.D0000101.? on volume: 00000A 0000 0000 00000 14 ST R2,FWORD ** ASMA034E Operand FWORD beyond active USING range by 5945 bytes ** ASMA435I Record 14 in Z87321.Z87321@A.JOB08417.D0000101.? on volume: 00000E 0000 0000 0000 00000 00000 15 MVC WORKAREA(32),TEXTAREA ** ASMA034E Operand WORKAREA(32) beyond active USING range by 5983 bytes ** ASMA034E Operand TEXTAREA beyond active USING range by 5951 bytes ** ASMA435I Record 15 in Z87321.Z87321@A.JOB08417.D0000101.? on volume: 000014 4400 C014 00014 18 EX 0,* ABENDS0C3 AT HERE FOR DIAGNOSIS 19 *********************************************************************** 000018 20 ENDPROC DS 0H 000018 1FFF 21 SLR 15,15 SET CC=0 00001A 0A03 22 SVC 3 EXIT TO MVS 23 *********************************************************************** 24 * DATA AREA * 25 *********************************************************************** 000020 26 DS 0D 000020 C4C1E3C1C1D9C5C1 27 DC CL8'DATAAREA' EYE-CATCHER 28 ******************* ----+----1----+----2----+----3-- 000028 29 DS XL10000 002738 00000000 30 FWORD DC F'0' 00273C 0000 31 HWORD DC H'0' 00273E C9C2D440D4C1C9D5 32 TEXTAREA DC CL32'IBM MAINFRAME COMPUTER.' 00275E 33 WORKAREA DS CL256 34 *********************************************************************** 35 YREGS , EXPAND GPR EQUATIONS |
データ領域に10KB近い大きさの領域を追加したので、当然ながら従来のRX命令やSS命令ではアドレスできずアセンブル・エラーになります。
Y付きニーモニック命令を使用したソース・コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
MAINENTR CSECT , DEFINE CONTROL SECTION USING *,12 DEFINE OUR BASE REGISTER=R12 LR 12,15 ESTABLISH OUR BASE ADDRESS *********************************************************************** * MAIN LINE PROCESSING * *********************************************************************** LY R2,FWORD Y付きニーモニックに変更 AHY R2,HWORD Y付きニーモニックに変更 STY R2,FWORD Y付きニーモニックに変更 LAY R14,WORKAREA 送り元と送り先アドレスをレジスターに LAY R15,TEXTAREA 格納(Y付きニーモニック使用) MVC 0(32,R14),0(R15) MVC WORKAREA(32),TEXTAREA EX 0,* ABENDS0C3 AT HERE FOR DIAGNOSIS *********************************************************************** ENDPROC DS 0H SLR 15,15 SET CC=0 SVC 3 EXIT TO MVS *********************************************************************** * DATA AREA * *********************************************************************** DS 0D DC CL8'DATAAREA' EYE-CATCHER ******************* ----+----1----+----2----+----3-- DS XL10000 <== 追加された10000バイトの大きな領域 FWORD DC F'0' HWORD DC H'0' TEXTAREA DC CL32'IBM MAINFRAME COMPUTER.' WORKAREA DS CL256 *********************************************************************** YREGS , EXPAND GPR EQUATIONS END |
上記のようにY付きニーモニックに変更することで、同じベース・レジスターで4KBを超える範囲にアドレスすることができるようになります。ただし、元々6バイト命令であったMVCなどのSS命令にはY付きニーモニックが追加されていないので、シンボルでの参照ではなくレジスターでオペランドを相対アドレス表記する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
000000 00000 0286E 6 MAINENTR CSECT , DEFINE CONTROL SECTION R:C 00000 7 USING *,12 DEFINE OUR BASE REGISTER=R12 000000 18CF 8 LR 12,15 ESTABLISH OUR BASE ADDRESS 9 *********************************************************************** 10 * MAIN LINE PROCESSING * 11 *********************************************************************** 000002 E320 C748 0258 02748 12 LY R2,FWORD 000008 E320 C74C 027A 0274C 13 AHY R2,HWORD 00000E E320 C748 0250 02748 14 STY R2,FWORD 000014 E3E0 C76E 0271 0276E 16 LAY R14,WORKAREA 00001A E3F0 C74E 0271 0274E 17 LAY R15,TEXTAREA 000020 D21F E000 F000 00000 00000 18 MVC 0(32,R14),0(R15) MVC WORKAREA(32),TEXTAREA 000026 4400 C026 00026 21 EX 0,* ABENDS0C3 AT HERE FOR DIAGNOSIS 22 *********************************************************************** 00002A 23 ENDPROC DS 0H 00002A 1FFF 24 SLR 15,15 SET CC=0 00002C 0A03 25 SVC 3 EXIT TO MVS 26 *********************************************************************** 27 * DATA AREA * 28 *********************************************************************** 000030 29 DS 0D 000030 C4C1E3C1C1D9C5C1 30 DC CL8'DATAAREA' EYE-CATCHER 31 ******************* ----+----1----+----2----+----3-- 000038 32 DS XL10000 002748 00000000 33 FWORD DC F'0' 00274C 0000 34 HWORD DC H'0' 00274E C9C2D440D4C1C9D5 35 TEXTAREA DC CL32'IBM MAINFRAME COMPUTER.' 00276E 36 WORKAREA DS CL256 37 *********************************************************************** 38 YREGS , EXPAND GPR EQUATIONS |