永发信息网

MCS-51 单片机指令系统LCALL指令问题

答案:1  悬赏:20  手机版
解决时间 2021-02-14 20:50
  • 提问者网友:末路
  • 2021-02-13 20:00
ORG 2000H

MOV SP, #40H
MOV A, #30H
LCALL SUBR
ADD A, #10H
MOV B, A
L1: SJMP L1

SUBR: MOV DPTR, #200AH
PUSH DPL
PUSH DPH
RET

请问执行后SP,A , B, PC,等于多少?具体怎么来的。特别是调用子程序回来继续这一步 的详细过程?
多谢大神回答
最佳答案
  • 五星知识达人网友:杯酒困英雄
  • 2021-02-13 21:16
容易造成困惑的有两个地方:
1、PUSH DPL 和 PUSH DPH
这里压栈了 DPTR 的值,这两条指令之后就是 RET 指令,RET 将会弹出这个值作为返回地址,于是SUBR 子程序返回到了 #200AH,就是 MOV B, A 那条指令,而不是 LCALL 紧接着的指令 ADD A, #10H,相当于这个 ADD A,#10H 指令没有被执行。
2、LCALL 指令压入的地址,没有被弹出
由于 SUBR 子程序 RET 弹出的地址,是压入的 DPTR 值,真正的 LCALL 指令压入的地址,还留在栈顶,所以 SUBR 子程序返回后的 SP 的值,也比原值 #40H 大了两个字节,变成了 #42H。

执行后,SP=#42H,A=#30H,B=#30H,PC=#200CH (注意 ADD A,#10H)没有执行)。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯