[PR] この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

DKC hacks
Dev Doc
Development support
Others
Inquiries
External links
You can change the side menu width by clicking or dragging
English translation of this page is currentry unavailable. Sorry.
DBNZ 命令 (Decrement and Branch if not Zero)
指定されたループカウンタをデクリメントし、結果がゼロでない場合に、指定された場所へアセンブリの実行位置を変更します。

DBNZ オーバーロード
オペコード 構文 アドレッシングモード バイト数 命令サイクル
6E
DBNZ dp, near
Direct Page PC Relative
3
5
1
FE
DBNZ Y, near
Y-Index Register PC Relative
2
4
1


1. 実際に分岐した場合、2サイクル追加
 
フラグ変化
-------

この命令はステータスフラグを変更しない。

解説
DBNZ命令は、第1オペランドに指定されたループカウンタの値をデクリメントし、ゼロと等しくなかった場合に現在のプログラムカウンタを基準に、第2オペランドに指定された符号付8ビットオフセットの示すアドレスへプログラムの実行位置を変えます。
この命令は for ループを簡潔に書くための命令で、ループカウンタとしてはYレジスタまたはダイレクトページ内のメモリを使用できます。


次の例はDBNZ命令を利用した簡易的な for ループの実装です。1から指定された数 n までの整数の和を計算します。
ループカウンタであるYレジスタに n を代入し、ADC命令とDBNZ命令によって毎回デクリメントされながら1まで加算されていることを確認してください。

; DBNZ for-Loop Sample
; Calculate sum[k=0 to n] k

MOV	Y, #$n	;
MOV	A, #$00	;

loop:
MOV	$00, Y	;
CLRC		;
ADC	A, $00	;
DBNZ	Y, loop	;
参照