关于单片机堆栈指针sp变化的问题

问题描述:

关于单片机堆栈指针sp变化的问题
1.如果(DPTR)=507BH,(SP)=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后:
POP\x05\x05DPH;
POP\x05\x05DPL;
POP\x05\x05SP;
则:(DPH)= ___3CH___;(DPL)=___5FH___;(SP)=___50H___;
如上题,我不理解为什么sp=50h,执行POP\x05SP首先把(30H)=50H的内容给SP,然后因为是出栈所以要减一不是吗?为什么不是(SP)=4FH
还有进栈的时候设一开始sp=50H,A=01H然后执行PUSH ACC,指针SP先加一,再把A=01H放入51H,
还是先再把A=01H放入51H,再加一?
如果是第一种,那50H岂不是没利用到?
我试过了,第一问却是是等于50h,很奇怪,不理解
org 0000h
ajmp main
org 0050h
main:mov sp,#32h
\x05 mov 30h,#50h
\x05 mov 31h,#5fh
\x05 mov 32h,#3ch
\x05 POP DPH;
\x05 POP DPL;
\x05 POP SP;
\x05 nop
\x05 end
1个回答 分类:综合 2014-10-25

问题解答:

我来补答
为什么不是(SP)=4FH ?
应该是4FH.
问题二:那50H岂不是没利用到?
50H是不用的.
复位后,SP=07H. 但是,07H就从来不用于堆栈.第一次压栈,是压入了08H单元.
再问: 问题一我试验过了 org 0000h ajmp main org 0050h main:mov sp,#32h mov 30h,#50h mov 31h,#5fh mov 32h,#3ch POP DPH; POP DPL; POP SP; nop end 你试试,运行到nop后SP是等于50H的
再答: 实验了,确实是50H。 弹出到SP后,SP没有减一。不理解。
 
 
展开全文阅读
剩余:2000