CPX 命令 (Compare Index Register X and Memory)

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

CPXオーバーロード

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

注

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

フラグ変化

n-----zc

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

解説

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

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

使用例

ループの終わりを判定する

    ; 16ビットの値の表を順に処理する(Xは16ビット)
    LDX.w #$0000
.loop
    LDA.l Table,X
    ; ... 1要素分の処理 ...
    INX
    INX
    CPX.w #TableEnd-Table
    BCC .loop       ; X < 表の大きさ なら繰り返す

参照

SBC命令
CMP命令
CPY命令