PSWには次に実行すべき命令のアドレスが保持されている。しかしながら、割込みが生じた際にはその時点で実行していた命令のアドレスを求めたい場合がある。その時に使用されるのがILC(Instruction-Length Code)フラグである。PSWが示す命令アドレスからILCが示す命令長を引けば、実際に実行していた命令のアドレスがわかるようになっている。
ILCには命令長が長さそのものではなくフラグで長さが示されており、下記のように設定される。
ILC | 命令長 |
---|---|
x00 | 命令長は不明 |
x01 | 2バイト命令 |
x10 | 4バイト命令 |
x11 | 6バイト命令 |
そのため、24ビット・アドレッシング・モードでBAL/BALR命令を実行すると、第1オペランドが示すレジスターの先頭ビットはBAL命令なら1、BALR命令なら0になる。これは、24ビット・アドレッシング・モードでのBAL/BALR命令では第1オペランドの先頭バイトにILC+CC+PGMmaskをセットするというS/360との互換性を保つ為の動作仕様によるもの。この動きを応用して、パラメーターに対してのフラグ・ビット設定や値の正負を示す為にBAL命令を利用する手法もある。例えば、GETMAIN Rマクロがそうである。領域アドレスが負数ならGETMAIN、そうでなければFREEMAINというインターフェースになっている。