CMP 命令 (Compare)
指定された2つの値を比較し、結果をステータスフラグへ返します。

CMPオーバーロード
オペコード 構文 アドレッシングモード バイト数 命令サイクル
68
CMP A, #const
CMP #const
Immediate
2
2
 
66
CMP A, (X)
CMP (X)
Indirect Page
1
3
 
64
CMP A, dp
CMP dp
Direct Page
2
3
 
74
CMP A, dp+X
CMP dp, X
Direct Page X-Indexed
2
4
 
65
CMP A, !abs
CMP abs
Absolute
3
4
 
75
CMP A, !abs+X
CMP abs, X
Absolute X-Indexed
3
5
 
76
CMP A, !abs+Y
CMP abs, Y
Absolute Y-Indexed
3
5
 
67
CMP A, (dp+X)
CMP dp, X
Direct Page X-Indexed Indirect
2
6
 
77
CMP A, (dp)+Y
CMP (dp), Y
Direct Page Indirect Y-Indexed
2
6
 
79
CMP (X), (Y)
Intirect Page to Indirect Page
1
5
 
69
CMP dp, dp
Direct Page to Direct Page
3
6
 
78
CMP dp, #const
Immediate to Direct Page
3
5
 
C8
CMP X, #const
CPX #const
Immediate
2
2
 
3E
CMP X, dp
CPX dp
Direct Page
2
3
 
1E
CMP X, !abs
CPX abs
Absolute
3
4
 
AD
CMP Y, #const
CPY #const
Immediate
2
2
 
7E
CMP Y, dp
CPY dp
Direct Page
2
3
 
5E
CMP Y, !abs
CPY abs
Absolute
3
4
 


フラグ変化
n-----zc

n: 比較結果のMSBがセットされる
z: 比較結果が0の場合にセットされる
c: 比較結果において符号なしボロー(桁下がり)が発生しない場合にセットされる (これは内部演算で算術オーバーフローが発生した場合と等価)
解説
CMP命令は指定された2つの値を比較し、その結果をステータスフラグへ返します。
比較には減算が用いられ、第1オペランドから第2オペランドの値を引いて評価します。この命令によってステータスフラグ以外のレジスタおよびメモリの状態は変更されません。

結果が0の場合、すなわち、2つのの値が等しい場合にはZフラグがセットされます。また、ボローが発生しない場合、すなわち第1オペランドの値が第2オペランドの値以上である場合はキャリーフラグがセットされます。

参照