用散轉表
直接用LJMP指令組成轉移表.由於LJMP是3位元組的指令,在組成指令轉移表時,當執行JMP @A+DPTR指令時,可能出現DPTR低8位向高8位的進位,用加法指令對DPTR直接修改來實現.
程式如下:
ORG 0000H
PJ2: MOV DPTR,#TAB2
CLR C
MOV R5,#0
MOV A,R6
RLC A ;R6*2
JNC AD1
INC R5 ;有進位,高8位加1
AD1: ADD A,R6 ;R6*3
JNC AD2
AD2: MOV A,R5
ADD A,DPH ;DPTR高8位調整
JMP @A+DPTR ;得散轉地址
TAB2: LJMB LOP0
LJMP LOP1
……
LJMP LOPn
END
用AJMP組成的散轉表為二位元組一項,而用LJMP組成的散轉表則為三位元組一項,根據R6中的內容或乘2,或乘3得每一處理程式的入口地址表指標.
應該不難理解吧,耐心點看
用散轉表
直接用LJMP指令組成轉移表.由於LJMP是3位元組的指令,在組成指令轉移表時,當執行JMP @A+DPTR指令時,可能出現DPTR低8位向高8位的進位,用加法指令對DPTR直接修改來實現.
程式如下:
ORG 0000H
PJ2: MOV DPTR,#TAB2
CLR C
MOV R5,#0
MOV A,R6
RLC A ;R6*2
JNC AD1
INC R5 ;有進位,高8位加1
AD1: ADD A,R6 ;R6*3
JNC AD2
INC R5 ;有進位,高8位加1
AD2: MOV A,R5
ADD A,DPH ;DPTR高8位調整
MOV A,R6
JMP @A+DPTR ;得散轉地址
TAB2: LJMB LOP0
LJMP LOP1
……
LJMP LOPn
END
用AJMP組成的散轉表為二位元組一項,而用LJMP組成的散轉表則為三位元組一項,根據R6中的內容或乘2,或乘3得每一處理程式的入口地址表指標.
應該不難理解吧,耐心點看