- 「メインフレーム・コンピューター」で遊ぼう - http://www.arteceed.net -

MVCL命令の要約

    ----+----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になる。
      コピー元アドレスはコピー元レングス分増える。