. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
寄存器(内存访问)
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
栈顶超出了段地址内最大范围后是什么情况?
[待解决]
回复[
3
次 ] 点击[
171
次 ]
cutebe
[帖 主]
[ 发表时间:2013-05-27 14:18 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:4
信誉值:0
注册日期:2010-01-27 19:28
P60
问题3.6描述了“将10000H~1000FH内存空间当作栈,开始栈内有一个元素时SP=000EH,当POP出栈这个元素,SP=0010H。”
如果定义1FFF0H~1FFFFH为栈空间,开始有一个元素SP=FFFEH,当POP出栈后SP=?
SP是16位寄存器,应该不能等于20000H。难道等于0
cutebe
[第
1
楼]
[ 回复时间:2013-05-28 10:58 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:4
信誉值:0
注册日期:2010-01-27 19:28
p61 中有关于栈顶超界的描述,不过举的例子只是其中一种情况。
如果栈顶或栈底在一个段地址的边界上,是什么情况?
更特别的把一个段地址内全部的64KB作为栈空间又是什么情况?
cutebe
[第
2
楼]
[ 回复时间:2013-05-28 11:28 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:4
信誉值:0
注册日期:2010-01-27 19:28
栈顶偏移为0时,用DEBUG测试出来好多:Program terminated normally
还是找到个可用的段地址 3000H
SS = 3000H,SP = 0000H,这时再执行入栈 PUSH AX,SP = FFFEH
在栈顶等于栈底的的时候简单一点
SP = FFFEH,这时再执行出栈 POP BX,SP = 0000H
由于栈空间只是人为想出来的,实际这个问题只需考虑自然大小的栈,也就是64KB大小的情况。这时又好像循环了一样,超出一头就到了反向的另一头。
cutebe
[第
3
楼]
[ 回复时间:2013-05-28 12:51 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:4
信誉值:0
注册日期:2010-01-27 19:28
原来 P68 P69 中有描述阿,看到 问题3.11 问题3.12 就更明确了。
需要登录后才能回帖 -->>
请单击此处登录
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved