鱼C论坛

 找回密码
 立即注册
查看: 2508|回复: 13

求教::包含多段的程序,关于sp的问题

[复制链接]
发表于 2013-4-1 00:09:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这个是第6章,实验5(2)的代码
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h
data ends
stack segment
dw 0,0
stack ends
code segment
start: mov ax,stack
mov ss,ax
mov sp,16
.........
其中设置了栈段后,定义了段中的2个字型数据,为什么sp指向的是16呢?
我的理解是sp指向的4,按我的理解是定义了栈空间为4个字节(0~3),所以sp执行的是4。。。。
请问我的理解错在哪里~~~~求大侠指教~~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-1 06:31:34 | 显示全部楼层
自己顶先~~~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-1 07:32:43 | 显示全部楼层
本帖最后由 属専色灰 于 2013-4-1 07:59 编辑

你把前3个题目的代码全部写完,然后进DEBUG调试,你就懂了,本来我想直接贴答案的,现在你自己试着解决一下,结论就是这章的主题

这个小题最绝的就是第二题的第四小题,你明白了这个就啥都明白了

让我死了不少了脑细胞,不爽,你也得死几个!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-1 08:22:01 | 显示全部楼层

我把3个代码已经全部调试过了,并且读了6.3的全部内容,但是仍没有看到关于sp为什么非要指向16的问题,对这个问题仍然不理解,我把实验5(2)中的sp指向了4,发现程序不能调试成功。
根据自己的理解,貌似定义了栈段后,sp的设置的值只能是16的倍数。。但是又不知道为什么,请大侠指教!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-1 08:24:18 | 显示全部楼层
段与段之间肯定是按照 行对齐的~~ ~ 不然难道让你下一个数据段接着你 残缺不全的位子写下去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-1 08:29:55 | 显示全部楼层
不光是 SP 所有段都会是 行对齐 16的倍数~~注意 我说的是 段与段之间~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-1 08:53:48 | 显示全部楼层
小小小小鱼 发表于 2013-4-1 08:29
不光是 SP 所有段都会是 行对齐 16的倍数~~注意 我说的是 段与段之间~~~

栈顶
段和段肯定是16倍数的。。sp设置的是栈段顶。。也就是说整个栈空间也必须是16的倍数。
比如上图,如果设置此为栈顶位置是不行,因为不能放弃使用后面的栈空间。不能因为只用4个字节的栈空间就定义4个字节的栈空间,去放弃使用剩余的栈空间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-1 09:02:22 | 显示全部楼层
你还是理解的不对~~可以设置到4的~~当然是你用到哪里就设到哪里了~~那只是你自己设的~~但是不管你怎么设     系统都会把你栈补上16的倍数在开始的~~新的段~~~但是所谓的补上不是系统会改变你的SP  SP 是你认为指定的~~  或者PUSH POP 才会改变~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-1 09:03:32 | 显示全部楼层
所以 上面才设置到16 就是为了不去浪费空间 明白了吧~~不然你设到4 后面的空间不就浪费了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-1 09:04:10 | 显示全部楼层
我解释的够清楚了吧 在不明白我也词穷了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2013-4-1 09:14:32 | 显示全部楼层
小小小小鱼 发表于 2013-4-1 09:02
你还是理解的不对~~可以设置到4的~~当然是你用到哪里就设到哪里了~~那只是你自己设的~~但是不管你怎么设    ...

这回彻底明白了。。非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-1 10:32:36 | 显示全部楼层
dw 不是字型数据吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-7-11 00:01:50 | 显示全部楼层
这个很简单的,因为定义一个最小的段要16个字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-11 00:09:36 | 显示全部楼层
dw 0123h,0456h
前面数据段占了16个字节的空间了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-29 09:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表