Renesas Synergy™

FAQ 106923 : 【参考プログラム】 テーブルジャンプをするには、どうすればよいか? [2008/03/11]

ゼロページ間接ジャンプアドレッシングモードを使用します。(該当命令:JMP,JSR)
オペランドでゼロページ領域内の連続する2バイトのメモリ(JUMP_ADDR)を指定し、
さらにこれらのメモリの内容で示される番地にジャンプします。
これらのメモリの内容はテーブル(ADDR_TABLE)を使用して設定します。
詳細については、「740ファミリソフトウェアマニュアル」をご参照ください。

以下に、JSR命令を使ったサンプルコードを示します。


.section Z .org $0040 M_MODE: .BLKB 1 ; インデックス (0=MODE_1, 2=MODE_2, 4=MODE_3) ; ジャンプ先アドレスは2バイト単位で配置されるので ; インデックスのデータは0,2,4とする。 JUMP_ADDR: .BLKB 2 ; テーブルジャンプ先アドレスの格納メモリ .section P .org $F000 LDX M_MODE ; インデックスを読み込み LDA ADDR_TABLE,X ; ジャンプ先の下位アドレスを読み込み、メモリに格納 STA JUMP_ADDR INX LDA ADDR_TABLE,X ; ジャンプ先の上位アドレスを読み込み、メモリに格納 STA JUMP_ADDR+1 JSR (JUMP_ADDR) ; 各サブルーチンへジャンプ ・・・ MODE_1: ; M_MODE=0時、実行 RTS MODE_2: ; M_MODE=2時、実行 RTS MODE_3: ; M_MODE=4時、実行 RTS .section TBL .org $FE00 ADDR_TABLE: .WORD MODE_1 .WORD MODE_2 .WORD MODE_3

注:JSR命令をJMP命令に変更する場合、ジャンプ先でRTS命令は不要です。
(#106924)

適用製品

3803H
3803L
3823
3850A
3858
38D2
38D5
7544
7545
7546
7547
7548
7549

 

他にご質問がございましたら、リクエストを送信してください