. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于实验5(2)(3)中的问题  [已解决] 回复[ 8次 ]   点击[ 565次 ]  
crazyhl
[帖 主]   [ 发表时间:2010-04-03 18:55 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-12-16 16:05
请教个问题,实验5的第二小问和(3)
stack segment
dw 0,0
stack ends
定义了2个字型数据
在下面代码代码区
我感觉应该是 mov sp,4
为什么书上是mov sp,16呢?
希望明白的人告诉一下,谢谢
versaariel
[第1楼]   [ 回复时间:2010-04-05 11:11 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
1.首先要明白
stack segment 
dw 0,0 
stack ends 
这段是啥意思?
(设assume ss:stack 并且 mov ax,stack mov ss,ax)
就是告诉你ss*16+0=0,ss*16+1=0,ss*16+2=0,ss*16+3=0,但是它没有说sp被限制大小了
2.可以上DEBUG看下mov sp,16和mov sp,4的区别
lisfan
[第2楼]   [ 回复时间:2010-04-10 18:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-02-12 12:25
我也认为这道题存在问题,设置mov sp,4和mov sp,16的意义完全不同,但是也许也可以这样去理解:
stack segment里的dw 0,0。。作者的意图只是想初始化下前2个字型单元。而实际上的栈段空间还是栈顶指向ss:16处
versaariel
[第3楼]   [ 回复时间:2010-04-10 22:02 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
这道题目没有问题,不能说我只初始化了4个字节,就只能使用4个字节的栈空间,这两者是没有约定的.
zhouxiao
[第4楼]   [ 回复时间:2010-04-13 22:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-01 09:12
我看到这里时也傻了,有没有懂的解释一下?
versaariel
[第5楼]   [ 回复时间:2010-04-14 09:29 ]   [引用]   [回复]   [ top ] 
荣誉值:62
信誉值:0
注册日期:2009-12-03 13:14
看来我的解释不能为大众接受$-$
rewardking
[第6楼]   [ 回复时间:2010-05-13 22:04 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-05-10 22:25
一段的最小长度为16,虽然只初始化了两个字,但是stack实际上任然是16,从0-f;故而初始化栈底为f+1=16
jesnop
[第7楼]   [ 回复时间:2010-05-14 14:46 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:3
注册日期:2010-03-26 09:37
不是只初始化了4了个字节,而是只定义了4个字节,而sp移到+16当然是超出了所定义栈空间的.再因为定义一个段最小值为16byte 所以即使移到+16越界也不会覆盖到其他数据.
crazyhl
[第8楼]   [ 回复时间:2010-05-16 14:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-12-16 16:05
此贴由 贴主 于 [ 2010-05-16 14:05 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved