CPU > 命令セット > MVP

MVP (Move Positive destination > source)

[プラス方向へブロック移動]

MVP と MVN 命令は、ユーザが調整することなく メモリ位置からメモリ位置へデータを移動する。

これら 2 つの命令は、負の方向へデータを移動する時には それ自身は上書きされない。

転送元アドレスは X レジスタから、 転送先アドレスは Y レジスタから取得する。 転送するデータの長さは、ステータスフラグの m の 設定に関わらず、アキュームレータから 16 ビット分取得する。 この値は、実際に転送する量より 1 バイト少ない値を指定する (a=$0000 だと、 1 バイト転送する)。

2 つのオペランドは、転送元 64K バンクと、 転送先 64K バンクを指定する。 アセンブラでは、転送元, 転送先の順でオペランドを書くが、 バイナリ出力コードでは、MVN の MVP オペコードは、 転送先バンクバイト, 転送元バンクバイトの順で配置される。

MVN は、転送元アドレスが転送先アドレスより大きい時に指定する。 逆に言えば、転送先範囲が、転送元範囲より低位にある時に指定する。

MVN 命令では、X,Y レジスタはアドレスの底を開始位置とする。 データは X から Y へ移動される。 X と Y はインクリメントされ、アキュームレータは $FFFF へ アンダーフローを起こすまでデクリメントされる。

MVP は、転送元アドレスが転送先アドレスより小さい時に指定する。 逆に言えば、転送先範囲が、転送元範囲より高位にある時に指定する。

MVP 命令では、X,Y レジスタはアドレスの天井を開始位置とする。 データは X から Y へ移動される。 X と Y はデクリメントされ、アキュームレータは $FFFF へ アンダーフローを起こすまでデクリメントされる。

インデックスレジスタが 8 ビットモード (x=1) になっているか、 プロセッサが 6502 エミュレーションモードになっている時、 上位バイトはデフォルト値として 0 が使われるので、 転送範囲はページ 0 の範囲に限られる。

サブルーチンでブロック移動命令を使い、 動的に MVP と MVN を切り替えるようにすることで コードサイズの削減が容易になる。

フラグ変化

なし

コード一覧

アドレッシングモード 文法 オペコード バイト数 命令サイクル
Block Move MVP src,dest 44 3 *
*1 バイト移動するごとに 7 サイクル要する
最終更新:2017年02月20日 17:22