单片机,程序执行

来源:百度知道 编辑:UC知道 时间:2024/05/05 14:42:12
已知程序执行前有A=02H,SP=52H,(51H)=FFH,(52H)=FFH。下述程序执行后:
POP DPH
POP DPL
MOV DPTR,#4000H
RL A
MOV B,A
MOVC A,@A+DPTR
PUSH A
MOV A,B
INC A
MOVC A,@A+DPTR
PUSH A
RET

ORG 4000H
DB 10H,80H,30H,50H,30H,50H
请问:A=( ),SP=( ),(51H)=( ),(52H)=( ),PC=( )。
请问此题该怎么一步一步的往下做?

RL A这步是不是能得出A=04H?

答:
POP DPH ;DPH出栈,sp=51H
POP DPL ;DPL出栈,sp=50H
MOV DPTR,#4000H ;DPH=40H,DPL=00H
RL A ;A=04H
MOV B,A ;B=04H
MOVC A,@A+DPTR ;A+DPTR为4004H,@A+DPTR为30H,所以A为30H
PUSH A ;A入栈,sp=51H
MOV A,B ;A=04H
INC A ;A=05H
MOVC A,@A+DPTR ;A+DPTR为4005H,@A+DPTR为50H,所以A为50H
PUSH A ;A入栈,SP=52H
RET ;子程序返回

ORG 4000H
DB 10H,80H,30H,50H,30H,50H
A=50H,
SP=52H,
(51H)=30H见:
PUSH A ;A入栈,sp=51H这句

(52H)=50H ,
见PUSH A ;A入栈这句,
SP=52H
pc指向进入该子程序时的语句的下一句。