鱼C论坛

 找回密码
 立即注册
查看: 3802|回复: 4

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

[复制链接]
发表于 2011-5-6 00:22:55 | 显示全部楼层 |阅读模式

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

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

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

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

比如10000H---1000FH为一个栈时,当栈为空时,为什么sp的值需要为10010呢?怎么不加2,为1000f呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-6 00:28:06 | 显示全部楼层
没错哈,+2之后就刚好是腾出一个空间,即1000EH。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 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嘛。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-6 01:51:18 | 显示全部楼层
朋友您想想看,栈的第一个数据地址应该是多少呢?
对了,就是1000EH,因为一个元素是16位,占了两个字节。

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

想明白了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-5-6 07:41:09 | 显示全部楼层
本帖最后由 loop 于 2011-5-6 08:51 编辑

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

另外:PUSH 操作的是字,操作不了AL,AH字节。
如下图。
POP1.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-18 20:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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