20bit長変位命令

長変位機能(*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長変位命令の使用例

従来の命令だけのソース・コード

データ領域に10KB近い大きさの領域を追加したので、当然ながら従来のRX命令やSS命令ではアドレスできずアセンブル・エラーになります。

Y付きニーモニック命令を使用したソース・コード

上記のようにY付きニーモニックに変更することで、同じベース・レジスターで4KBを超える範囲にアドレスすることができるようになります。ただし、元々6バイト命令であったMVCなどのSS命令にはY付きニーモニックが追加されていないので、シンボルでの参照ではなくレジスターでオペランドを相対アドレス表記する必要があります。