单片机程序分析题

单片机程序分析题,第1张

设R0=20H,R1=25H,(20H)=70H,(21H)=80H,(22H)=A0H,(22H)=A0H,(25H)=A0H(26H)=6FH,(27H)=76H,下列程序执行后,

CLR C CY=0

MOV R2,#3 R2=03H R2=02HR2=01H

LOOP:

MOV A,@R0 A=70H A=80H A=A0H

ADDC A,@R1CY=1,A=10H CY=0,A=F0HCY=1,A=16H

MOV @R0,A (20H)=10H (21H)=F0H (22H)=16H

INCR0 R0=21H R0=22HR0=23H

INCR1 R1=26H R1=27HR1=28H

DJNZ R2,LOOP

JNCNEXT

MOV @R0,#01H 23H=01H

SJMP $

NEXT: DECR0

SJMP $

结果:(20H)=10H ,(21H)=F0H ,(22H)=16H ,(23H)=01H ,(A)=16H ,(CY)=1 .

分析过程参照注释

POP DPHPOP DPL ;d出堆栈2次,SP=50H

MOV DPTR,#4000H ;DPTR=4000H

RL A ;A由02变成04H

MOV B,A ;A的数据送到B暂存

MOVC A,@A+DPTR ;将4+4000H(也就是4004)的数据送到A 最后两行表示DB后面的数据依此在4000H开始的单元中,30H在4004H单元。所以A=30H

PUSH A ;将A的数据压入51H,(51H)=30H

MOV A,B ;B的数据送回A,A=04H

INC A;A=A+1,A=05H

MOVC A,@A+DPTR ;将5+4000H(也就是4005H)的数据送到A,所以A=50H

PUSH A ;将A的数据压入52H,(52H)=50H

RET ;52H、51H的数据d出,成为PC地址

最后结果:A=50H、SP=50H、(51H)=30H、(52H)=50H、PC=3050H

天哪,我也晕了,堆栈是压栈+1还是-1忘记了,堆栈d出是先PCL还是PCH也忘了,你自己再好好看看书吧!总之堆栈你可以理解成一个放空白光盘的盒子,放一张光盘,再放第二张就只能放在第一张上面,拿的时候要先拿第二张,再拿第一张。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11834478.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存