1.知っておくべき命令




システムプログラムを作る上でいったいいくつの命令を覚えたらいいのか?
筆者の経験から、習熟しなければならないものは次のとおり、(42個)

     A,AH,AR,                             加算
          BAL,BALR,BAS,BASR,BASSM,BC,BCR,      ブランチ
          C,CL,CH,CLC,CLI,                     比較
          EX,                                  エグゼキュート
          ICM,IC,                              1バイトロード
          L,LH,LR,LTR,LM,                      ロード
          LA                                   アドレス計算
          MVC,MVI,                             データ移動
          NC,NI,OC,OI,XR,XC                    AND,OR,XOR
          PACK,UNPK,                           パック,アンパック
          SLL,SRL,                             シフト
          ST,STC,STCM,STM,                     ストア
          TM,                                  テスト
          TR                                   トランスレート


即座には書けないがなにをやってるかすぐに思い浮かべられるべきもの(14個)

      BXH,BXLE,CLR,CLCL,CS,CVB,CVD,ED,MVCL,N,NR,O,OR,SAC

一度は調べておきたい、特別な用途の命令

          仮想アドレスをリアルアドレスに変換   LRA(Load Real Address)
          各ページのキーを知る                 IVSK(Insert Virtual Storage Key)
          メモリースイッチを伴うブランチ       PC(Program Call)
          (最近のマクロは、これをよく使う。EX:STORAGE macro)
          マルチタスクでの逐次化命令           CS(Compare and Swap)

あとは必要に応じて調べればよい、と思われる。

アセンブラにおいて命令について注意しなくてはならないことは、命令の名前と実際の用途が異なることが
多い、ということである。単なる呼名としてとらえ、その意味に固執しないことが大切である。例えば、LA
(Load Address)命令はアドレスの計算以外に、バイナリーの演算としても使われる。また、SYSTEM/370での
NOP(なにもしない)命令は、'BCR 0,0'(どこにもブランチしない)である。(命令長:4BYTE)

なお、浮動小数点命令はシステムプログラミングで使うことは、めったにないのでここでは触れない。