cnlaolee 发表于 2021-2-11 00:05:21

关于程序6.3的问题

本帖最后由 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的空间都是空的呢,这样不会造成内存原来的数据被改写吗?
谢谢指教

635924705 发表于 2021-2-11 00:05:22

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

cnlaolee 发表于 2021-2-11 16:32:44

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

谢谢帮助
页: [1]
查看完整版本: 关于程序6.3的问题