鱼C论坛

 找回密码
 立即注册
查看: 1650|回复: 0

[技术交流] 堆栈指针的移动

[复制链接]
发表于 2013-4-7 20:51:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
虽然我也不喜欢去纠结一门语言的来龙去脉,不过我今天貌似还是想明白了一个问题:为什么在数据进栈的时候,是先将SP-2,而数据出栈的时候,是把数据POP之后,才进行SP-2.不知道这个细节问题有没有人想过。如果你觉得去思考这个问题很没意思,那就算了。


个人认为,
栈,只是一个抽象的概念,本质上来说,只是内存中的一小块而已,我们所说的栈,只是我们将这块内存称之为栈,并人为地赋予这块内存一些特殊的或是说必须的操作,也就是先进后出。
但是,设计计算机有个很基本的理念——整齐,简单。计算机设计者将CPU读取内存的方式,一律规定为从低地址到高地址,你将数据放入栈中,每次占用两个字节。虽然宏观上来看,是将这个数据放入栈中的最高位置,占两个字节。但是,在存放这两个字节的时候,依然是按照从低到高的顺序进行访问的。
假设,我的猜想是正确的, 将很好地理解开始提出的问题。
我们从反面来思考这个问题
如果,在放数据进栈的时候,先放数据,后移动指针,那么出现什么问题呢?——进栈的数据,覆盖了栈顶数据(我不知道什么是栈顶,什么是栈底,我的意思就是SP指向的那个位置。这些术语真TM烦人)。因为,我的猜想就是,CPU读取内存始终是从低到高。
相反,只有先把SP-2,才可以将数据放入正确的位置。
至于,POP,为什么后-2,自己思考下吧。


如果我说的不对,请指教。(小甲鱼,你好 )
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 20:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表