. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
主题 : :  栈段的位置不同 占用空间也不同?  [已解决] 回复[ 5次 ]   点击[ 487次 ]  
huangbeidu
[帖 主] [ 发表时间:2009-04-01 21:42 ] 
荣誉值:0
信誉值:3
注册日期:2009-03-10 11:22
就是这个问题了 从实验5(3)引发的
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=book&kind=1007&qkSg=2&qID=31302&readSg=1 问过很久也没有人解决

又有了新发现:

数据段是dw 123h,456h  栈段是dw 0,0

顺序:数据 代码 栈时的debug:
17D9:0100  23 01 56 04 00 00 00 00-00 00 00 00 00 00 00 00   #.V.............
17D9:0110  B8 ED 17 8E D0 BC 10 00-B8 E9 17 8E D8 FF 36 00   ..............6.
17D9:0120  00 FF 36 02 00 8F 06 02-00 8F 06 00 00 B8 00 4C   ..6............L
17D9:0130  CD 21 00 00 00 00 00 00-00 00 00 00 00 00 00 00   .!..............
17D9:0140  00 00 00 00 75 10 8A 05-38 46 06 75 09 B8 FF FF   ....u...8F.u.... 
顺序:代码 栈 数据时的debug:
17D9:0100  B8 EC 17 8E D0 BC 10 00-B8 ED 17 8E D8 FF 36 00   ..............6.
17D9:0110  00 FF 36 02 00 8F 06 02-00 8F 06 00 00 B8 00 4C   ..6............L
17D9:0120  CD 21 00 00 00 00 00 00-00 00 00 00 00 00 00 00   .!..............
17D9:0130  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
17D9:0140  23 01 56 04 75 10 8A 05-38 46 06 75 09 B8 FF FF   #.V.u...8F.u....
顺序:数据 栈 代码时的debug:
17D9:0100  23 01 56 04 00 00 00 00-00 00 00 00 00 00 00 00   #.V.............
17D9:0110  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00   ................
17D9:0120  B8 EA 17 8E D0 BC 10 00-B8 E9 17 8E D8 FF 36 00   ..............6.
17D9:0130  00 FF 36 02 00 8F 06 02-00 8F 06 00 00 B8 00 4C   ..6............L
17D9:0140  CD 21 56 04 75 10 8A 05-38 46 06 75 09 B8 FF FF   .!V.u...8F.u....
也就是说 如果哪个段在程序的最后 而且大小不是16B的倍数 那么它剩余的最后一行空间会被充分利用 不会都是0 这样内存就不会浪费了 

我这样理解对吗 如果是这样 那么实验5(2)的第四问:
对于如下定义的段:
name segment
……
name ends
如果段中的数据占N个字节,则程序加载后,该段实际占有的空间为________

应该这样答:如果N为16的倍数
            或N不为16的倍数但该段在程序的最后 答案为N Byte
            其他情况答案为([N/16]+1)*16 Byte
mess
[第1楼] [ 回复时间:2009-04-02 14:46 ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
不错,我做这个的时候都没有注意到这个细节 ^_^

在完整段的定义里面有个“定位类型”的概念,缺省默认是para(就是上面的情况)。还可以使用byte、word 等类型,代码就会变的更紧密,比如用byte,段实际占用的空间是N,前后两个段间没有空闲单元,是最节约内存的定位类型。
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved