EOR 命令 (Exclusive OR with Memory)

アキュムレータとメモリの間で排他的論理和を取り、結果をアキュムレータに返します。

EORオーバーロード

オペコード構文アドレッシングモードバイト数命令サイクル注
49EOR #constImm.2/ 321, 4
45EOR dpDP.231, 2
52EOR (dp)DP. Ind251, 2
47EOR [dp]DP. Ind long261, 2
55EOR dp, XDP. Idx X241, 2
41EOR (dp, X)DP. Idx Ind X261, 2
51EOR (dp), YDP. Ind Idx Y251, 2, 3
57EOR [dp], YDP. Ind long Idx Y261, 2
4DEOR absAbs.341
5DEOR abs, XAbs. Idx X341, 3
59EOR abs, YAbs. Idx Y341, 3
4FEOR longAbs. long451
5FEOR long, XAbs. long Idx X451
43EOR sp, SSR.241
53EOR (sp, S), YSR. Ind Idx Y271

注

  1. メモリモードフラグクリア時は1サイクル追加
  2. ダイレクトページの開始アドレスがページ境界になっていない場合1サイクル追加
  3. インデクス加算時にページ境界を超える場合、またはインデクスレジスタが16ビット長の場合は1サイクル追加
  4. メモリモードフラグクリア時は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         ; = 今回新しく押されたボタン

参照

AND命令
ASL命令
LSR命令
ORA命令
ROL命令
ROR命令