单片机的小问题,关于sp的值

来源:百度知道 编辑:UC知道 时间:2024/09/25 02:24:30
如果DPTR=507BH,SP=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,则执行下列指令后:
POP DPH
POP DPL
POP SP
则:DPH=( ),DPL=( ),SP=( )
答:DPH=3CH , DPL=5FH , SP=4FH

我的问题是SP=4FH是怎么算出来的啊,请高手指教~!

答:
PUSH POP 这类指令的执行过程举例:
PUSH ACC
把ACC的值推进堆栈SP,然后SP的值加一,指向下一个地址;
POP ACC
把SP的值推进ACC,然后SP的值减一,指向前一个地址;
阁下注意执行的过程和先后次序。

DPTR=507BH,SP=32H,(30H)=50H,(31H)=5FH,(32H)=3CH,
POP DPH ;把SP里的数据赋给DPH,然后SP减一,Sp地址32H,存放的是3cH,所以DPH是3CH
POP DPL ;把SP里的数据赋给DPH,然后SP减一,Sp地址31H,存放的是5FH,所以DPL是5FH

POP SP ;这句:当前SP的地址已变成30H,30H里存放50H,把50H这个数赋给Sp后,SP变成50H,然后Sp要减一,50H减一是4FH,所以SP就变成4FH。

答:DPH=3CH , DPL=5FH , SP=4FH

阁下要搞清的是Sp加一减一的次序。

此题纯粹为搞清堆栈概念而用,现实中用此编程,只会引起混乱。

POP指令是先弹出,再SP=SP-1
这样弹出时SP=50H ,在减1就是4FH了