xzquan 发表于 2011-5-6 00:22:55

小甲鱼来一下啊。关于栈的问题

本帖最后由 xzquan 于 2011-5-6 01:58 编辑

栈每次push时,会先-2,然后再放数据,但是当栈为空的时候,为什么sp指向的是规定的栈地址+1呢?

比如10000H---1000FH为一个栈时,当栈为空时,为什么sp的值需要为10010呢?怎么不加2,为1000f呢?

小甲鱼 发表于 2011-5-6 00:28:06

没错哈,+2之后就刚好是腾出一个空间,即1000EH。

xzquan 发表于 2011-5-6 00:50:08

不是啊。老大,你好像没明白我的意思啊

我的意思是说,10000H---1000FH为一个栈时,当栈为空时,你视频上说的是sp指向
10010,即1000FH + 1 = 10010.

当每次push一个值的时候,sp为-2,指向新的栈顶。

我想问的是,为什么当栈为空的时候,不是1000FH + 2 = 10011H 呢?

这样,他push第一个元素的时候,-2的时候,刚好就指向1000FH,取的时候(pop),就从1000F开始取

另外补充一下,可不可以push AL , 这样,他是不是sp每次会自动-1??因为我想push AX的时候,他是-2嘛。

小甲鱼 发表于 2011-5-6 01:51:18

朋友您想想看,栈的第一个数据地址应该是多少呢?
对了,就是1000EH,因为一个元素是16位,占了两个字节。

因此初始化的时候栈中并没有数据,所以指向10010H。
第一个数据入栈,SP = SP - 2,接着数据放进1000EH~1000FH两个字节的单元。

想明白了吗?{:5_93:}

loop 发表于 2011-5-6 07:41:09

本帖最后由 loop 于 2011-5-6 08:51 编辑

出栈前,最后指向的是1000EH,因为是2个字节,需要+2,不是1000F,+2后指向10010。

另外:PUSH 操作的是字,操作不了AL,AH字节。
如下图。
页: [1]
查看完整版本: 小甲鱼来一下啊。关于栈的问题