. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
主题 : :  当SS:SP遇到64KB栈段?  [待解决] 回复[ 16次 ]   点击[ 1026次 ]  
ghost2003
[帖 主] [ 发表时间:2010-04-26 10:27 ] 
荣誉值:2
信誉值:8
注册日期:2010-04-03 11:03
书上原文:
如果将10000h~1ffffh这个短的空间当做栈段(64kb),初始状态栈是空的。栈的底部内存单元地址为 1000:fffe
这个“1000:fffe”是怎么来的?
我只知道 如果将1000h~100f这个段的控件当做栈来用,初始状态栈是空的,栈的底部内存单元地址为1000:1010
stop1204
[第7楼] [ 回复时间:2013-04-23 22:14 ] 
荣誉值:424
信誉值:0
注册日期:2013-04-08 10:06
因为出栈(push)与入栈(pop)的操作都是以字为单位进行的,所以栈中存放的都是字型数据,
字型数据是两个字节 就是2个连续的内存单元 组成一个字单元
正常情况下10000h~1ffffh的底部内存单元: 为 1000:FFFF
但是 栈中的数据是以字为单位的..字单元占2字节   所以用到2个内存单元
 所以底部单元其实就是2个连续内存单元(字单元) 1000:FFFE 与 1000:FFFF

例子2:
初始化空栈 1000:999   ,  栈顶就是1000:99A  →→→ (空栈时,SP=底部单元地址 + 2)
push  入栈时 →→→ SP=SP-2           
  AX=1234 H   push AX
1000:998 = 34 H      1000:999 = 12 H



将 1 - 10 当成一个空间. 是不是也需要在 10处 写入数据呢?
为什么 空栈时 SP要 = 底部单元地址+2 ?  实验一下就知道了:
如果你 SP指向 1000:999        
当push 入栈的时候  ,  SP将会 等于 SP-2  处push 入数据
就是 从1000:997处写入 数据, 而数据只占2个内存单元, 1000:997  1000:998 
那么 1000:999 将入不到数据
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved