. : : 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