堆栈指针SP的问题,很奇怪,大家进来看一下,谢谢

[复制链接]
2675|5
 楼主| mb4555 发表于 2012-1-8 23:22 | 显示全部楼层 |阅读模式
ov, hm, ps, pdp, pd
本帖最后由 mb4555 于 2012-1-8 23:24 编辑

堆栈指针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   ?
highgear 发表于 2012-1-9 00:03 | 显示全部楼层
是先减,然后再赋值。
 楼主| mb4555 发表于 2012-1-9 00:08 | 显示全部楼层
51指令系统
堆栈操作指令的解释是这样的:
(1)进栈
PUSH  direct                 ; (SP)+1→SP,(direct)→(SP)
(2)推栈
POP   direct                  ; ((SP))→direct,(SP)-1→(SP)
dengm 发表于 2012-1-9 00:26 | 显示全部楼层
POP   direct            ; 是2周期指令, 第一周期就 ((sp))-->内部工作临时空间, (sp)-1 --> (sp)
                              ;                       第二周期才            内部工作临时空间-->direct
highgear 发表于 2012-1-9 01:41 | 显示全部楼层
顶 dengm.

pop 对于 sp-1 的操作是通过直接微指令硬件改写,不通过地址总线和数据总线,而 pop 中的赋值操作必须通过内部地址总线和数据总线改写寄存器,这一操作相对于前一操作要慢上若干时钟周期,所以即便 sp-1操作在后,也会提前完成。
 楼主| mb4555 发表于 2013-5-19 20:20 | 显示全部楼层
先结贴了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

30

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部