主题:请教个栈段问题。
banruolong
[专家分:0] 发布于 2006-12-11 10:55:00
20000H ~ 2FFFFH 当做栈段,栈是空的,这时候
20000H |————|
. |————|
. |————|
2FFFaH |————|
2FFFbH |————|
2FFFcH |————|
2FFFdH |————|
2FFFeH |————|
2FFFFH |————|
30000H |————| <- ss:sp
SS=2000H,SP=? (ss:sp是否是30000?)
mov ax ,1000H
push ax //运行这两个指令后。 SS:SP=?
回复列表 (共4个回复)
沙发
yclz [专家分:1520] 发布于 2006-12-11 13:30:00
SS=2000H,则说明栈底在20000H,而栈位于20000H~3FFFF这句就是错的,空栈的时候SP = 0,不知我的理解是否有误,请高手指正.
板凳
banruolong [专家分:0] 发布于 2006-12-11 14:10:00
换个说法看看
mov ax ,1000H
push ax
2FFFdH |———|
2FFFeH |———|
2FFFeH |—00—|
2FFFFH |—10—| (如果要求push ax 写入内存,2FFFeH~2FFFFH)
30000H |———| 运行“push ax”前 ss:sp 指向的地址? SS=2000H,SP=?
3 楼
菜鸟CHEN [专家分:30] 发布于 2006-12-12 03:55:00
如果把20000H ~ 2FFFFH 当做空的栈段,那么此时SS=2000、SP=0。
因为当栈中有一个元素时SS=2000、SP=FFFE,而空的栈段,就等于把最低部的一个元素出栈,即SP+2,此时SP就等于0。
4 楼
berger [专家分:0] 发布于 2006-12-27 16:10:00
[quote]如果把20000H ~ 2FFFFH 当做空的栈段,那么此时SS=2000、SP=0。
因为当栈中有一个元素时SS=2000、SP=FFFE,而空的栈段,就等于把最低部的一个元素出栈,即SP+2,此时SP就等于0。[/quote]
同意,DEBUG中是这样的,最底部元素出栈后SP为0,SS不变,在此问题中还是2000
我来回复