单片机AJMP的问题

2024-11-16 17:31:20
推荐回答(3个)
回答(1):

MOV DPTR,#TABLE

JMP @A+DPTR----转移到:A+DPTR,即:TABLE+A

TABLE: ;AJMP 占用两个字节,存放地址如下:

AJMP ROUT0--存在:TABLE+0
AJMP ROUT1--存在:TABLE+2
AJMP ROUT2--存在:TABLE+4
AJMP ROUT3--存在:TABLE+6

当(A)=00H时,转移到TABLE+0,即去执行:AJMP ROUT0;
当(A)=02H时,转移到TABLE+2,即去执行:AJMP ROUT1;
当(A)=04H时,转移到TABLE+4,即去执行:AJMP ROUT2;
当(A)=06H时,转移到TABLE+6,即去执行:AJMP ROUT3。

--为什么ROUT1和ROUT2的地址相差02H?

因为 AJMP XXXX,这条指令,占用两个字节。

回答(2):

ROUT0123 什么的是个标号,随便放在哪都可以的.

这段程序的意思是程序跳转到离TABLE标号偏移为A的地方继续执行,
下边的TABLE标号那里是一连串的跳转语句,每个语句两字节,所以编译后AJMP ROUT1、AJMP ROUT2、AJMP ROUT3是连续的六个字节。
要用JMP @A+DPTR跳转到AJMP ROUT2,A要先赋值为02H,
跳转到AJMP ROUT3,A就得是04H,以此类推。

回答(3):

TABLE: AJMP ROUT0
AJMP ROUT1
AJMP ROUT2
AJMP ROUT3

两条指令之间地址之差为02,因为是双字节指令