CPY 命令 (Compare Index Register Y and Memory)

インデクスレジスタYとメモリを比較し、結果をステータスフラグへ返します。

CPYオーバーロード

オペコード構文アドレッシングモードバイト数命令サイクル注
C0CPY #constImm.2/ 321, 3
C4CPY dpDP.231, 2
CCCPY absAbs.341

注

  1. インデクスフラグクリア時は1サイクル追加
  2. ダイレクトページの開始アドレスがページ境界になっていない場合1サイクル追加
  3. インデクスフラグクリア時は3バイト。インデクスフラグセット時は2バイト。

フラグ変化

n-----zc

n: 比較結果のMSBがセットされる
z: 比較結果が0の場合にセットされる
c: 比較結果において符号なし借り(桁下がり)が発生しない場合にセットされる (これは内部演算で算術オーバーフローが発生した場合と等価)

解説

CPY命令はオペコードによって指定されたアドレッシングモードに従って、オペランドで指定された値とYレジスタを比較し、その結果をステータスフラグへ返します。
比較には減算が用いられ、Yレジスタからメモリの値を引きます。この命令によってYレジスタおよびメモリの状態は変更されません。

結果が0の場合、すなわち、Yレジスタとメモリの値が等しい場合にはZフラグがセットされます。また、借りが発生しない場合、すなわちYレジスタの値がメモリの値以上である場合はキャリーフラグがセットされます。

使用例

文字列の終わりまで読む

    ; ポインタ $00~$02 の指す文字列を、終端の$00まで処理する(Aは8ビット、Yは16ビット)
    LDY.w #$0000
.loop
    LDA [$00],Y
    BEQ .end        ; 終端に達した
    ; ... 1文字分の処理 ...
    INY
    CPY.w #$0100
    BCC .loop       ; 念のため256文字で打ち切る
.end

参照

SBC命令
CMP命令
CPX命令