对于栈的操作不是很明白
栈的两个操作 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 然后再压入数据吧。在作 sp=sp-2 操作后,也压入数据之前,ss:sp 处数据未定,即没有意义,其它时候都是有效的栈顶数据。
[解决办法]
楼主,这么跟你说吧。
栈底一般是预先设定在某一个高地址的,到栈顶预留一定的空间。
你所说的压栈过程,是先将栈指针 -2 以便容纳即将压入的 2 字节数据。
你这里的写入数据的过程,是按地址增加的方式寻址的,因此,将数据写入了刚刚“腾”出来的地方。