EOR 命令 (Exclusive OR with Memory)
アキュムレータとメモリの間で排他的論理和を取り、結果をアキュムレータに返します。
EORオーバーロード
| オペコード | 構文 | アドレッシングモード | バイト数 | 命令サイクル | 注 |
|---|---|---|---|---|---|
| 49 | EOR #const | Imm. | 2/ 3 | 2 | 1, 4 |
| 45 | EOR dp | DP. | 2 | 3 | 1, 2 |
| 52 | EOR (dp) | DP. Ind | 2 | 5 | 1, 2 |
| 47 | EOR [dp] | DP. Ind long | 2 | 6 | 1, 2 |
| 55 | EOR dp, X | DP. Idx X | 2 | 4 | 1, 2 |
| 41 | EOR (dp, X) | DP. Idx Ind X | 2 | 6 | 1, 2 |
| 51 | EOR (dp), Y | DP. Ind Idx Y | 2 | 5 | 1, 2, 3 |
| 57 | EOR [dp], Y | DP. Ind long Idx Y | 2 | 6 | 1, 2 |
| 4D | EOR abs | Abs. | 3 | 4 | 1 |
| 5D | EOR abs, X | Abs. Idx X | 3 | 4 | 1, 3 |
| 59 | EOR abs, Y | Abs. Idx Y | 3 | 4 | 1, 3 |
| 4F | EOR long | Abs. long | 4 | 5 | 1 |
| 5F | EOR long, X | Abs. long Idx X | 4 | 5 | 1 |
| 43 | EOR sp, S | SR. | 2 | 4 | 1 |
| 53 | EOR (sp, S), Y | SR. Ind Idx Y | 2 | 7 | 1 |
注
- メモリモードフラグクリア時は1サイクル追加
- ダイレクトページの開始アドレスがページ境界になっていない場合1サイクル追加
- インデクス加算時にページ境界を超える場合、またはインデクスレジスタが16ビット長の場合は1サイクル追加
- メモリモードフラグクリア時は3バイト。メモリモードフラグセット時は2バイト。
フラグ変化
n-----z-
n: 結果のMSBが格納される。
z: 結果が0の場合にセットされ、それ以外の場合はクリアされる。
解説
EOR命令はオペコードによって指定されたアドレッシングモードに従って、アキュムレータとメモリの値との間のビットごとの排他的論理和を計算し、アキュムレータに結果を返します。
アキュムレータが16ビット幅の場合は16ビットで計算を行い、8ビットの場合は8ビットで計算を行います。
使用例
ビットを反転する
LDA $10
EOR.b #$01 ; ビット0を反転する(フラグの切り替え)
STA $10
符号を反転する(2の補数)
; A = -A (Aは16ビット)
EOR.w #$FFFF ; すべてのビットを反転する
INC A ; 1を足すと符号が反転する
新しく押されたボタンを調べる
; $10 = 今回の入力、$12 = 前回の入力 (Aは16ビット)
LDA $12
EOR.w #$FFFF ; 前回押されていなかったボタン
AND $10 ; のうち、今回押されているもの
STA $14 ; = 今回新しく押されたボタン