DEC 命令 (Decrement Memory)
オペランドに指定された値をデクリメントします。アキュムレータを指定した場合はアキュムレータの値が変更され、メモリを指定した場合はメモリのみが変更されます。
DEA は DEC A の簡易構文です。
DECオーバーロード
| オペコード | 構文 | アドレッシングモード | バイト数 | 命令サイクル | 注 |
|---|---|---|---|---|---|
| 3A | DEC A DEA | Acc. | 1 | 2 | |
| C6 | DEC dp | DP. | 2 | 5 | 1, 2 |
| D6 | DEC dp, X | DP. Idx X | 2 | 6 | 1, 2 |
| CE | DEC abs | Abs. | 3 | 6 | 1 |
| DE | DEC abs, X | Abs. Idx X | 3 | 7 | 1 |
注
- メモリモードフラグクリア時は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