跳转到主内容
Knowledgebase
Home
Renesas Electronics China - Knowledgebase

(代码举例) 如何实现跳转表程序控制? [2008/03/11]

最新更新:03/11/2008

Question:

(代码举例)  如何实现跳转表程序控制? [2008/03/11]

Answer:

采用零页间接跳转寻址模式。(适用指令:JMP与JSR)
在操作数中指定零页地址,并以该地址与下一连续地址中的2个字节数据(JUMP_ADDR) 作为程序跳转的绝对地址。
这些程序跳转地址可通过地址表(ADDR_TABLE)的方式来设定。具体内容请参阅740族软件手册。

使用JSR指令的示例代码如下所示:

	
         .section Z	
	.org  $0040	

M_MODE:	.BLKB 1		; Index (0=MODE_1, 2=MODE_2, 4=MODE_3)
			; Since the jump destination address is
			; allocated in units of 2 bytes, 
			; the index data is 0, 2 and 4.
JUMP_ADDR:.BLKB 2		; The stored memories of the table jump
			; destination address


	.section P	
	.org  $F000	

	LDX  M_MODE	; Read index
	LDA  ADDR_TABLE,X	; Store the low-order address of the jump destination
			; to the memory
	STA  JUMP_ADDR	
	INX	
	LDA  ADDR_TABLE,X	; Store the high-order address of the jump destination
			; to the memory
	STA  JUMP_ADDR+1	
	JSR  (JUMP_ADDR)	; Jump to each subroutine

	...

MODE_1:			; Execute when M_MODE=0
	RTS	
MODE_2:			; Execute when M_MODE=2
	RTS	
MODE_3:			; Execute when M_MODE=4
	RTS	


	.section TBL	
	.org  $FE00	

ADDR_TABLE:		
	.WORD MODE_1	
	.WORD MODE_2	
	.WORD MODE_3	

注意:将JSR指令换为JMP指令时,跳转目的地处无需RTS指令。  

(#106923)

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