. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  栈的理解,请大家帮忙看看对不对  [待解决] 回复[ 4次 ]   点击[ 302次 ]  
xiaohuihui
[帖 主]   [ 发表时间:2010-04-19 13:08 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-19 10:49
原文如下:

编程,将10000H~1000FH这段空间当做栈,初始状态栈是空的,将AX,BX,DS中的数据入栈。
   思考后看分析。
分析:
   代码如下:
        mov ax,1000H
       mov ss,ax     ;设置栈的段地址,ss=1000H,不能直接向段寄存器ss送入数据,所以用ax中转。
        mov sp,0010H  ;设置栈顶的偏移地址,因栈为空,所以sp=0010H,.....

 我的理解是这样的,如下:

0FFF:000E
0FFF:000F
----------------
1000:0000
1000:0001
...
...
1000:000E
1000:000F        
-----------------
1000:0010
1000:0011
...
...
1000:FFFE
1000:FFFF        
-----------------
1001:0000

为了使栈的底部第一个字单元的地址是1000:000E,所以设置sp的值为1000:0010,
这样在第一个元素入栈时sp自加2正好第一个元素的偏移地址。


在给ss赋值同时sp得到一个初始偏移值FFFE,为什么自动分配给sp的值是FFFE?
如果要让第一个入栈的偏移值为FFFE,对FFFE+2=10000,溢出,sp=0000了,
但是如果是0000的话就成1000段的第一个地址了,所以CPU分配了FFFE给sp。

用C#来理解,栈有点像ArrayList类,它的元素不能够随意访问,必须按照后进先出
的规则来逐个增加和读取,且读取后该元素即被移除,指针始终指向最后加入此数组
中的元素。


我想应该大概是这个样子,请大家帮忙指正
versaariel
[第1楼]   [ 回复时间:2010-04-19 14:31 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
大部分对吧,用C#的思路来理解,挺有新意的^-^
xiaohuihui
[第2楼]   [ 回复时间:2010-04-19 17:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-19 10:49
回复:[第1楼]
------------------
谢谢回答,我是半路出家做web项目的,但是对做网站没有太大的兴趣。
错的地方在哪里能告诉我一下吗?
versaariel
[第3楼]   [ 回复时间:2010-04-19 20:37 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
在给ss赋值同时sp得到一个初始偏移值FFFE,为什么自动分配给sp的值是FFFE?

我这看到的是0xFFEE,其实不要太在意,只要清楚sp的走向即可
xiaohuihui
[第4楼]   [ 回复时间:2010-04-20 11:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-19 10:49
哈哈,的确是FFEE,太粗心了看错了
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved