小甲鱼来一下啊。关于栈的问题
本帖最后由 xzquan 于 2011-5-6 01:58 编辑栈每次push时,会先-2,然后再放数据,但是当栈为空的时候,为什么sp指向的是规定的栈地址+1呢?
比如10000H---1000FH为一个栈时,当栈为空时,为什么sp的值需要为10010呢?怎么不加2,为1000f呢? 没错哈,+2之后就刚好是腾出一个空间,即1000EH。 不是啊。老大,你好像没明白我的意思啊
我的意思是说,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嘛。
朋友您想想看,栈的第一个数据地址应该是多少呢?
对了,就是1000EH,因为一个元素是16位,占了两个字节。
因此初始化的时候栈中并没有数据,所以指向10010H。
第一个数据入栈,SP = SP - 2,接着数据放进1000EH~1000FH两个字节的单元。
想明白了吗?{:5_93:} 本帖最后由 loop 于 2011-5-6 08:51 编辑
出栈前,最后指向的是1000EH,因为是2个字节,需要+2,不是1000F,+2后指向10010。
另外:PUSH 操作的是字,操作不了AL,AH字节。
如下图。
页:
[1]