打印

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

[复制链接]
1442|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

使用特权

评论回复
5
highgear| | 2012-1-9 01:41 | 只看该作者
顶 dengm.

pop 对于 sp-1 的操作是通过直接微指令硬件改写,不通过地址总线和数据总线,而 pop 中的赋值操作必须通过内部地址总线和数据总线改写寄存器,这一操作相对于前一操作要慢上若干时钟周期,所以即便 sp-1操作在后,也会提前完成。

使用特权

评论回复
6
mb4555|  楼主 | 2013-5-19 20:20 | 只看该作者
先结贴了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

30

帖子

1

粉丝