DEC 命令 (Decrement Memory)

オペランドに指定された値をデクリメントします。アキュムレータを指定した場合はアキュムレータの値が変更され、メモリを指定した場合はメモリのみが変更されます。
DEA は DEC A の簡易構文です。

DECオーバーロード

オペコード構文アドレッシングモードバイト数命令サイクル注
3ADEC A
DEA
Acc.12
C6DEC dpDP.251, 2
D6DEC dp, XDP. Idx X261, 2
CEDEC absAbs.361
DEDEC abs, XAbs. Idx X371

注

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

フラグ変化

n-----z-

n: デクリメントした結果のMSBがセットされる
z: デクリメントした結果が0の場合にセットされる

解説

DEC命令はオペコードによって指定されたアドレッシングモードに従って、オペランドで指定されたメモリの値をデクリメントし、メモリに返します。
オペランドにアキュムレータを指定した場合にはアキュムレータをデクリメントし、アキュムレータに返します。
いずれの場合も、デクリメントした結果によってステータスレジスタが変更されます。

使用例

タイマーのカウントダウン

    DEC $10         ; タイマーを1減らす
    BNE .notyet     ; まだ0になっていない
    ; ここに0になったときの処理を書く
.notyet

8ビットモードで16ビットのカウンタを減らす

    LDA $10
    BNE .low        ; 下位バイトが0でなければ借りは発生しない
    DEC $11         ; 下位バイトが0なら、先に上位バイトを減らす
.low
    DEC $10

参照

DEX命令
DEY命令
INC命令
INX命令
INY命令