菜鸟求助关于 POP SP 的问题

WEIYI0126 2012-10-21 10:39:28
(SP)=30H, (30H)=50H,

POP SP

最后得到的结果是 (SP)= 50H, 不理解。。
为什么弹栈后SP没有自动减1
...全文
2682 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
WEIYI0126 2012-11-11
  • 打赏
  • 举报
回复
看看标准解释: The contents of the internal RAM location addressed by the Stack Pointer is read, and the Stack Pointer is decremented by one. The value read is then transferred to the directly addressed byte indicated. No flags are affected. ------------------ POP direct 的内部操作应该是: (temp) ← ((SP)) (SP) ← (SP) - 1 (direct) ← (temp)
WEIYI0126 2012-11-11
  • 打赏
  • 举报
回复
[quote=引用 11 楼 heyorhey 的回复:] 答案:http://bbs.21ic.com/viewthread.php?tid=386541&highlight=
heyorhey 2012-11-06
  • 打赏
  • 举报
回复
引用 9 楼 WEIYI0126 的回复:
引用 8 楼 的回复:这是在问十万个为什么吗? 任何一本讲汇编的书里都不可能看到pop sp 这条语句,至于为什么sp不加1,或许还是要你自己多补习下组成原…… 这是单片机里的汇编,嘿嘿 小妹一直以为汇编都是同一类,没有本质区别的,所以才在这里发帖。 问题已经解决了,详见:http://bbs.21ic.com/viewthread.php?action=pa……
看不出,我也有这个问题,能不能给我说下,谢谢拉
Daisy__Ben 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:

这是在问十万个为什么吗? 任何一本讲汇编的书里都不可能看到pop sp 这条语句,至于为什么sp不加1,或许还是要你自己多补习下组成原……


这是单片机里的汇编,嘿嘿 小妹一直以为汇编都是同一类,没有本质区别的,所以才在这里发帖。
问题已经解决了,详见:http://bbs.21ic.com/viewthread.php?action=paypoint……
[/Quote]
单片机?pop sp这种语法真的好奇怪,已经不记得单片机的东西了,如果执行了我猜也可能是sp+1之后再执行[sp]->sp,sp里面的内容被覆盖了所以你不知道,有的时候,汇编语句翻译成真实的指令码之间可能有点差距,也要看单片机的指令是怎么设计的。
WEIYI0126 2012-10-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

这是在问十万个为什么吗? 任何一本讲汇编的书里都不可能看到pop sp 这条语句,至于为什么sp不加1,或许还是要你自己多补习下组成原……
[/Quote]

这是单片机里的汇编,嘿嘿 小妹一直以为汇编都是同一类,没有本质区别的,所以才在这里发帖。
问题已经解决了,详见:http://bbs.21ic.com/viewthread.php?action=paypoint&fid=11&tid=386541&pid=

感谢您的参与,为了不使分浪费,我还是给你吧
Daisy__Ben 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:
pop 隐含就是修改sp 不需要你自己去修改的,不正常的修改esp程序会崩溃的。


我只想知道 SP为什么是50H,而不是4FH,而且可以肯定告诉你的是,答案就是50H,不信的话你可以自己编程试
[/Quote]
这是在问十万个为什么吗? 任何一本讲汇编的书里都不可能看到pop sp 这条语句,至于为什么sp不加1,或许还是要你自己多补习下组成原理之类的基础课才知道。
顶了帖子要给分啊,不然白顶了……
WEIYI0126 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
pop 隐含就是修改sp 不需要你自己去修改的,不正常的修改esp程序会崩溃的。
[/Quote]

我只想知道 SP为什么是50H,而不是4FH,而且可以肯定告诉你的是,答案就是50H,不信的话你可以自己编程试
Daisy__Ben 2012-10-21
  • 打赏
  • 举报
回复
pop 隐含就是修改sp 不需要你自己去修改的,不正常的修改esp程序会崩溃的。
Daisy__Ben 2012-10-21
  • 打赏
  • 举报
回复
只需要pop就可以了。为什么pop sp?编译没有错?你这样肯定是50
  • 打赏
  • 举报
回复
对于pop sp、pop esp操作,先减栈指针,再修改目标寄存器。
WEIYI0126 2012-10-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
sp指向栈顶[30h]的值是50h,pop sp以后不是把栈顶的值出栈给sp吗、sp的值不是改变了吗?
[/Quote]



对于指令 POP direct 执行后,SP指示的内容送入direct字节单元中,栈指针SP减1
但此处的50H送入SP后,为什么SP没有再减1,如果减1后,(SP)=4FH
  • 打赏
  • 举报
回复
sp指向栈顶[30h]的值是50h,pop sp以后不是把栈顶的值出栈给sp吗、sp的值不是改变了吗?
WJN92 2012-10-21
  • 打赏
  • 举报
回复
(30H)=50H ???

21,496

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧