求教::包含多段的程序,关于sp的问题
这个是第6章,实验5(2)的代码assume cs:code,ds:data,ss:stack data segment dw 0123h,0456hdata ends stack segment dw 0,0stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 .........其中设置了栈段后,定义了段中的2个字型数据,为什么sp指向的是16呢?我的理解是sp指向的4,按我的理解是定义了栈空间为4个字节(0~3),所以sp执行的是4。。。。请问我的理解错在哪里~~~~求大侠指教~~~~~~~~ 自己顶先~~~~~~~~~ 本帖最后由 属専色灰 于 2013-4-1 07:59 编辑
你把前3个题目的代码全部写完,然后进DEBUG调试,你就懂了,本来我想直接贴答案的,现在你自己试着解决一下,结论就是这章的主题
这个小题最绝的就是第二题的第四小题,你明白了这个就啥都明白了
让我死了不少了脑细胞,不爽,你也得死几个!
属専色灰 发表于 2013-4-1 07:32 static/image/common/back.gif
你把前3个题目的代码全部写完,然后进DEBUG调试,你就懂了,本来我想直接贴答案的,现在你自己试着解决一下 ...
我把3个代码已经全部调试过了,并且读了6.3的全部内容,但是仍没有看到关于sp为什么非要指向16的问题,对这个问题仍然不理解,我把实验5(2)中的sp指向了4,发现程序不能调试成功。
根据自己的理解,貌似定义了栈段后,sp的设置的值只能是16的倍数。。但是又不知道为什么,请大侠指教!!!! 段与段之间肯定是按照 行对齐的~~ ~ 不然难道让你下一个数据段接着你 残缺不全的位子写下去 不光是 SP 所有段都会是 行对齐 16的倍数~~注意 我说的是 段与段之间~~~ 小小小小鱼 发表于 2013-4-1 08:29 static/image/common/back.gif
不光是 SP 所有段都会是 行对齐 16的倍数~~注意 我说的是 段与段之间~~~
栈顶
段和段肯定是16倍数的。。sp设置的是栈段顶。。也就是说整个栈空间也必须是16的倍数。
比如上图,如果设置此为栈顶位置是不行,因为不能放弃使用后面的栈空间。不能因为只用4个字节的栈空间就定义4个字节的栈空间,去放弃使用剩余的栈空间。
你还是理解的不对~~可以设置到4的~~当然是你用到哪里就设到哪里了~~那只是你自己设的~~但是不管你怎么设 系统都会把你栈补上16的倍数在开始的~~新的段~~~但是所谓的补上不是系统会改变你的SPSP 是你认为指定的~~或者PUSH POP 才会改变~~ 所以 上面才设置到16 就是为了不去浪费空间 明白了吧~~不然你设到4 后面的空间不就浪费了吗 我解释的够清楚了吧 在不明白我也词穷了 小小小小鱼 发表于 2013-4-1 09:02 static/image/common/back.gif
你还是理解的不对~~可以设置到4的~~当然是你用到哪里就设到哪里了~~那只是你自己设的~~但是不管你怎么设 ...
这回彻底明白了。。非常感谢 dw 不是字型数据吗? 这个很简单的,因为定义一个最小的段要16个字节 dw 0123h,0456h
前面数据段占了16个字节的空间了。
页:
[1]