单片机散转程序看不懂呀求大神!!
答案:2 悬赏:50
解决时间 2021-04-20 22:06
- 提问者网友:白柏唇蜜
- 2021-04-20 12:19
根据(R3,R2)转向不同处理程序
MOV DPTR,#J_TAB
MOV A,R3
MOV B,#3
MUL AB
ADD A,DPH
XCH A,DPH
MOV A,R2
MOV B,#3
MUL AB
XCH A,B
ADD A,DPH
XCH A,DPH
MOV A,B
JMP @A+DPTR
J_TAB:LJMP PROC0
LJMP PROC1
: :
LJMP PROCN
为什么要把A和DPH相加呢?又为什么交换呢?后边的又都什么意思呢?看不懂啊啊啊!!!
最佳答案
- 二级知识专家网友:转身→时光静好
- 2021-04-20 12:52
只要说明如下问题即可:
1、LJMP指令占三个字节,故跳转公式为:(J_TAB)+3*(R3R2)
2、(R3R2)*3 = (R3*3 << 8)+ R2*3 + 进位
MOV A,R3
MOV B,#3
MUL AB
ADD A,DPH
XCH A,DPH
得到: R3*3<<8
MOV A,R2
MOV B,#3
MUL AB
XCH A,B
ADD A,DPH
XCH A,DPH
得到: 进位
MOV A,B
到底: R2*3
3、LJMP @A+DPTR即跳转到:(J_TAB)+3*(R3R2)位置去
假如:(R3R2) = 12那么LJMP就跳转到LJMP PROC12,
而LJMP PROC12又能跳转到PROC12位置去。
这就是跳转,懂了吧!!!!呵呵
1、LJMP指令占三个字节,故跳转公式为:(J_TAB)+3*(R3R2)
2、(R3R2)*3 = (R3*3 << 8)+ R2*3 + 进位
MOV A,R3
MOV B,#3
MUL AB
ADD A,DPH
XCH A,DPH
得到: R3*3<<8
MOV A,R2
MOV B,#3
MUL AB
XCH A,B
ADD A,DPH
XCH A,DPH
得到: 进位
MOV A,B
到底: R2*3
3、LJMP @A+DPTR即跳转到:(J_TAB)+3*(R3R2)位置去
假如:(R3R2) = 12那么LJMP就跳转到LJMP PROC12,
而LJMP PROC12又能跳转到PROC12位置去。
这就是跳转,懂了吧!!!!呵呵
全部回答
- 1楼网友:懂得ㄋ、沉默
- 2021-04-20 13:52
应该是DPL,而且这里根据R3R2的值来计算散转是没有意义的,A最大超不过一个字节,怎么可能靠16位数乘3得到散转结果来。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯