鱼C论坛

 找回密码
 立即注册
查看: 4451|回复: 2

[已解决]关于程序6.3的问题

[复制链接]
发表于 2021-2-11 00:05:21 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 cnlaolee 于 2021-2-11 00:06 编辑

6.2章节在代码码中使用栈,示例的程序6.3基本理解了,但有3个问题请高手帮忙解答
问题1:程序中通过dw 0,0,0,...,0定义了16个字形空间来做栈,为什么要用16个字的空间,8个不行吗?
问题2:程序后面的说明里,作者强调了当ss:sp指向cs:30时,栈段为cs:10~cs:2f,是否仅是程序员这样说,换句话说,当ax=cs,ss=ax时,sp=30,是否cs:0~cs:2f都是可以作为栈段空间的?
问题3:按程序6.3这个思路,如果dw的数据量较大,比如小于64K的几十K,我们如何保证cs:0后面几十K的空间都是空的呢,这样不会造成内存原来的数据被改写吗?
谢谢指教
最佳答案
2021-2-11 00:05:22
我谈谈的做完的理解和感受吧:(不一定全对)你可以看看我实验5的帖子,解释很详细
1.栈空间定义,够用就行,大小看自己。但是,空间定义都是n*16个字节的,比如你定义8个字节的段,编译器也会给你16个字节的空间,你定义17个字节的段,编译器就会给你32给字节的空间。
2.这个要看你定义的顺序,这个程序没有专门定义栈段和数据段,所以是按顺序存放的,这个程序,最前面是16个字节的data,之后是32给字节的栈段(空段),之后才是代码段。所以,这个不仅是程序员定的,也要看这个程序定义数据的位置。因为没用专卖的段声明,这个段不会自动取16个字节,只会一个个字节对应。
3.首先这个数据量很小,基本不可能溢出,其次就是我们是通过编译器的,只要我们在编译器里面声明了,他会自动分配存储看见。如果实在需要空间(几百mb,gb)过大,那就是数据结构链式存储的问题了,但是这在汇编里面基本不会发生,都是高级语言里面的。
最后,祝你新春快乐

最佳答案

查看完整内容

我谈谈的做完的理解和感受吧:(不一定全对)你可以看看我实验5的帖子,解释很详细 1.栈空间定义,够用就行,大小看自己。但是,空间定义都是n*16个字节的,比如你定义8个字节的段,编译器也会给你16个字节的空间,你定义17个字节的段,编译器就会给你32给字节的空间。 2.这个要看你定义的顺序,这个程序没有专门定义栈段和数据段,所以是按顺序存放的,这个程序,最前面是16个字节的data,之后是32给字节的栈段(空段),之后才 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-11 00:05:22 | 显示全部楼层    本楼为最佳答案   
我谈谈的做完的理解和感受吧:(不一定全对)你可以看看我实验5的帖子,解释很详细
1.栈空间定义,够用就行,大小看自己。但是,空间定义都是n*16个字节的,比如你定义8个字节的段,编译器也会给你16个字节的空间,你定义17个字节的段,编译器就会给你32给字节的空间。
2.这个要看你定义的顺序,这个程序没有专门定义栈段和数据段,所以是按顺序存放的,这个程序,最前面是16个字节的data,之后是32给字节的栈段(空段),之后才是代码段。所以,这个不仅是程序员定的,也要看这个程序定义数据的位置。因为没用专卖的段声明,这个段不会自动取16个字节,只会一个个字节对应。
3.首先这个数据量很小,基本不可能溢出,其次就是我们是通过编译器的,只要我们在编译器里面声明了,他会自动分配存储看见。如果实在需要空间(几百mb,gb)过大,那就是数据结构链式存储的问题了,但是这在汇编里面基本不会发生,都是高级语言里面的。
最后,祝你新春快乐
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-11 16:32:44 | 显示全部楼层
635924705 发表于 2021-2-11 00:05
我谈谈的做完的理解和感受吧:(不一定全对)你可以看看我实验5的帖子,解释很详细
1.栈空间定义,够用就 ...

谢谢帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 16:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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