昔は数ワードの保管域を作業域に確保したり、GR13がポイントするRSAを一時的に使ったりしたが、24または31ビット・アドレッシング・モードのプログラムであればz/Architecture以降なら64ビットGPRの高位ワードやアクセス・レジスターを利用することもできる。(アクセス・レジスターはESA/390以降で利用可)下記に示す命令はモーダル命令ではないのでアドレッシング・モードは関係ない。
GPRの下位ワードを全く別の値に変更して使用し、使い終わったら元に戻す
1 2 3 |
SLLG R2,R2,32 SAVE GPR2 : SRLG R2,R2,32 RESTORE GPR2 |
GPRの下位ワードを上位ワードに移動する。下位ワードはゼロになるので、そこに別の値をロードして使う。使い終わったら逆にシフトして元の下位ワードの値を元に戻す。
GPRの下位ワードをARにコピーしてから元の値を使用し、使い終わったら元に戻す
1 2 3 |
SAR AR14,R2 SAVE GPR2(32-63) TO AR14 : EAR R2,AR14 RELOAD GPR2(32-63) FROM AR14 |
GPRの下位ワードをARに複写する。下位ワードは変わらないので、そのまま使うことができる。使い終わったらARから逆コピーして元の下位ワードの値を元に戻す。
モジュール間連携にリンケージ・スタックを使っていれば、復帰時のPR命令でGPRとARの2番~14番の内容は復元される(15番~1番は必要に応じてEREGG命令で復元できる)。リンケージ・スタックを使っていなくても、64ビットでもなくクロスメモリーも使わない一般的なプログラムであれば、64ビットGPRの高位ワードやアクセス・レジスターを壊してもその実行に支障が出ることは基本的にない。