小旭哥0922 发表于 2013-4-7 20:51:32

堆栈指针的移动

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


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


如果我说的不对,请指教。(小甲鱼,你好 )
页: [1]
查看完整版本: 堆栈指针的移动