很奇怪,堆栈指针SP的问题!!

2020-02-04 09:35发布

堆栈指针SP的问题,很奇怪,大家进来看一下,谢谢
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
运行完以上程序后,我不理解为什么sp=50h,执行POP SP首先把(30H)=50H的内容给SP,然后因为是出栈所以要减一不是吗?为什么不是(SP)=4FH   ?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
4555
1楼-- · 2020-02-04 13:11
51指令系统
堆栈操作指令的解释是这样的:
(1)进栈
PUSH  direct      ;      (SP)+1→SP,(direct)→(SP)
(2)推栈
POP   direct      ;((SP))→direct,(SP)-1→(SP)
614229816
2楼-- · 2020-02-04 16:14
回复【楼主位】4555  
-----------------------------------------------------------------------
实验证明的确有问题,但是你这样做有意义吗?

你这样的堆栈没多少实用价值啊。
BDXing6
3楼-- · 2020-02-04 16:52
当然是50H,因为你前面有一句mov 30h,#50h
当执行到pop sp时,会把30H单元内容送入SP
BDXing6
4楼-- · 2020-02-04 17:16
 精彩回答 2  元偷偷看……
4555
5楼-- · 2020-02-04 22:08
POP   direct                  ; ((SP))→direct,(SP)-1→(SP)
操作【1】:pop SP 产生 sp-1 的操作是由硬件直接改写,没有通过地址总线和数据总线,
操作【2】:而【((SP))→direct】中的赋值操作必须通过内部地址总线和数据总线读取【((SP))】改写【→direct】寄存器,
这一操作【2】相对于前一操作【1】要慢上若干时钟周期,
所以即使 sp-1操作在后,也会提前完成。
614229816
6楼-- · 2020-02-05 03:00
mark

一周热门 更多>