MVP 命令 (Block Move Positive Destination)
指定したバンクにあるデータを、指定したバンクへ移動します。

MVPオーバーロード
オペコード 構文 アドレッシングモード バイト数 命令サイクル
44
MVP src, dest
Block Move
 3
7n
1


1. 1バイトの転送につき7サイクルを要する
 
フラグ変化
--------

この命令はステータスフラグを変更しない。

解説
MVP命令は転送元のデータから見てプラス方向へのデータ移動を行います。すなわち、転送元と転送先のアドレスを比較した場合、後者の方が大きくなる場合にMVP命令が使用されます。

MVP命令のオペランドは、転送元のデータバンクと転送先のデータバンクを指定し、また、A,X,Yそれぞれのレジスタの値に従ってアドレスと移動するデータサイズを指定します。
転送開始前にAレジスタには移動するデータサイズから1を減じた値を、Xレジスタには転送元のデータの終了アドレスを、そしてYレジスタには転送先の終了アドレスを指定します。
1回のMVP命令の実行で、A,X,Yレジスタは1デクリメントされ、1バイトを転送します。この操作には7サイクルの時間を要します。
そしてAレジスタがデクリメントの結果#$FFFFへとオーバーフローするまでMVP命令は反復実行されます。
このことからわかるように、MVP命令は指定されたデータの最後のバイトから順に移動を行います。

インデクスレジスタが8ビットモード(x = 1)になっている場合、またはエミュレーションモード時は、インデクスレジスタの上位バイトは0とされるため、0ページの範囲内に限って移動可能です。

実際にMVP命令を使用する場合は、次のように行います。MVP命令はデータバンクレジスタを変更するため、MVPの開始前に必ずデータバンクレジスタを退避する必要があります。

; MVP Sample

PHB			; DB -> Stack
LDA	#$000F		; Data size (16 bytes)
LDX	#$000F		; Source end address
LDY	#$800F		; Destination end address
MVP	$7E, $7F	; $7E:0000 - $7E:000F -> $7F:8000 - $7F:800F
PLB			; DB <- Stack 
参照