首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

对于栈的操作不是很清楚

2013-08-04 
对于栈的操作不是很明白栈的两个操作 push 和poppush ax的执行过程:[解决办法]sp 减 2 ,这里的 sp 是 push

对于栈的操作不是很明白
栈的两个操作 push 和pop

  push ax的执行过程:


[解决办法]
sp 减 2 ,这里的 sp 是 push 指令前的 sp ;将 ax 放在 ss:sp 处 的 sp 是“sp减2” 后的 sp,所以不存在你说的空的 2 字节的问题。
还是看书吧,书上应该有示意图的,那样会更直观明白些;还是不明白,就暂时放下吧,你已经是进入死胡同了。
[解决办法]
栈有四种方式,一般说栈的方式都是指压栈的方式,都是从压栈的角度来说的,弹栈是相反。
1.满递减堆栈:压栈时,先SP减,然后压入数据。栈的增长方向是往下,所以是减。
2.满递增堆栈:压栈时,先SP加,然后压入数据。栈的增长方向是往上,所以是增。
3.空递减堆栈:压栈时,先压入数据,然后SP减。栈的增长方向是往下,所以是减。
4.空递增堆栈:压栈时,先压入数据,然后SP增。栈的增长方向是往上,所以是增。

LZ,你对着看看,你这里说的是哪种栈。
[解决办法]
引用
按你的意思 是先把数据压入栈中, 然后再做 sp= sp -2 这个操作的么? 也就是 ss:sp不会有存放数据的
先做 sp=sp-2 然后再压入数据吧。在作 sp=sp-2 操作后,也压入数据之前,ss:sp 处数据未定,即没有意义,其它时候都是有效的栈顶数据。
[解决办法]
楼主,这么跟你说吧。

栈底一般是预先设定在某一个高地址的,到栈顶预留一定的空间。

你所说的压栈过程,是先将栈指针 -2 以便容纳即将压入的 2 字节数据。
你这里的写入数据的过程,是按地址增加的方式寻址的,因此,将数据写入了刚刚“腾”出来的地方。

热点排行