MVCL命令の要約
By 神居 - Posted: 2008/10/22 Last updated: 2010/01/21
- Leave a Comment
----+----1----+----2----+----3----+----4----+----5----+----6----+----7-- MVCL r1,r2 R1 <<=== R2
命令実行前のレジスター
-
r1 ・・・・ 転送先アドレス
r1+1 ・・・ 転送先レングス(下位3バイト)
r2 ・・・・ 転送元アドレス
r2+1 ・・・ 転送元レングス(下位3バイト)、上位1バイトは埋め込み文字コード
転送先のレングス分、転送した時点で命令は終了する。転送先が長い時、余った領域にはPADキャラクターが埋まる。転送先レングスが0の時、何も起こらない。レジスターの内容は変わらない。ただし条件コードは1が設定される。
-
実行結果(条件コード)
BZ ・・・・ 1オペと2オペの長さが等しい
BL ・・・・ 1オペが短い
BH ・・・・ 1オペが長い
BO ・・・・ 不正なオペランド重複
命令実行後のレジスター
-
r1 ・・・・ 転送先アドレス+転送レングス
r1+1 ・・・ 0
r2 ・・・・ 転送元アドレス+転送レングス
r2+1 ・・・ 転送元レングス—転送レングス
コピー先の長さ ≦ コピー元の長さ の場合
-
コピー先を示すレジスター(1オペ)
-
コピー先レングスはコピー先レングス分減って必ず0になる。
コピー先アドレスはコピー先レングス分増える。
-
コピー元を示すレジスター(2オペ)
-
コピー元レングスはコピー先レングス分減って残る、または0。
コピー元アドレスはコピー先レングス分増える。
結果としてコピー元の残りのデータポインタとレングスになる。
コピー先の長さ > コピー元の長さ の場合
-
コピー先を示すレジスター(1オペ)
-
コピー先レングスはコピー先レングス分減って必ず0になる。
コピー先アドレスはコピー先レングス分増える。
これはMVCL命令の使用でコピー先領域が大きいときはPad文字が埋め込まれるためで、このPadの埋め込みもデータ移動の一環として処理され、その分もレングスに含まれてしまうため。したがって次にMOVEすべきコピー先ポインタと残り領域長にはならない。
-
コピー元を示すレジスター(2オペ)
-
コピー元レングスはコピー元レングス分減って必ず0になる。
コピー元アドレスはコピー元レングス分増える。
Posted in MVS実践アセンブラー・プログラミング • • Top Of Page