单片机AJMP问题

来源:百度知道 编辑:UC知道 时间:2024/06/21 12:05:01
MOV DPTR,#M_TAB
JMP @A+DPTR
M_TAB: AJMP 100H
AJMP 200H
AJMP 300H
AJMP 400H
上面的程序中,跳转原理是什么?怎么判断跳转到了AJMP 100H ;AJMP 200H ;AJMP 300H ;AJMP 400H 里面的那个?其中100H,200H,300H,400H又表示的是什么意思?
mov dptr,#tab
mov a,r2
rl a
jmp @a+dptr
tab:ajmp add00
ajmp add01
.
.
.
ajmp add7f
128路分支出口转移程序。

这是数上的一段程序,没有讲解的,不太明白,才拿出来问问的,这块知识比较模糊。刚才问了一个师哥他说是看a的相对地址的偏移量,呵呵感谢电子飞龙,分数给你了

我想,你最关心的是,A到底是多少呢?
A的具体数值,由前面的程序来决定,你得结合前面的程序来具体分析。你顺着这段程序往前找,找到哪里有如下语句:
MOV A,???
A的数值就从那里来。

希望能够解除你的疑惑,祝你成功。
------------------------------
加入前面有条指令:mov a,#92H,那是怎么跳,?
------------------------------
不可能有这样的指令,或者是这样的指令与你的问题无关。你最好把完整的程序给出来,让大家帮你。

------------------------------
问题补充:mov dptr,#tab
mov a,r2
rl a
jmp @a+dptr
tab:ajmp add00
ajmp add01
.
.
.
ajmp add7f
128路分支出口转移程序。
------------------------------
继续找R2,然后把R2的数值右移一位,就是跳转的具体出口
比如,得到02aH,那么就跳转到ADD2A

你这样提问,会让回答者无所适从,事实上,R2到底是多少,也许你现在仍然无法知道,那么,还得继续分析整个程序。

分析别人的程序,不能只凭那么一小段就能够得到准确的结果。

一个字:累!

M_TAB是下面四个跳转指令的首地址,到底执行哪个跳转指令由A中的内容确定,AJMP后面的数字都是表示地址

根据A中的值跳转,即
A=0,第一个(AJMP 100H);
A=1,第二个......

100H,200H表示地址,

意思是:
如果A=0,就跳到从地址100H开始写的程序段执行,

如果A=1,就跳到从地址200H开始写的程序段执行,
如此类推....

程序中DPTR这个