. : : Assembly Language : : .
|
首页
|
我提出的问题
|
我参与的问题
|
我的收藏
|
消息中心
|
游客 登录
|
刷新
|
提问
|
未解决
|
已解决
|
精华区
|
搜索
|
《汇编语言》论坛
->
包含多个段的程序
管理员:
assembly
[
回复本贴
]
[
收藏本贴
] [
管理本贴
] [
关闭窗口
]
主题 : :
栈段的位置不同 占用空间也不同?
[已解决]
回复[
5
次 ] 点击[
487
次 ]
huangbeidu
[帖 主]
[ 发表时间:2009-04-01 21:42 ]
[
引用
]
[
回复
]
[
top
]
荣誉值: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 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
不错,我做这个的时候都没有注意到这个细节 ^_^
在完整段的定义里面有个“定位类型”的概念,缺省默认是para(就是上面的情况)。还可以使用byte、word 等类型,代码就会变的更紧密,比如用byte,段实际占用的空间是N,前后两个段间没有空闲单元,是最节约内存的定位类型。
mess
[第
2
楼]
[ 回复时间:2009-04-02 14:51 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
最有一个段后面的内容已经不是我们程序定义的范围了,所以我们程序中默认的para类型也就不适用最后一个段所占的内存空间了。也就是上面楼主提到的debug情况了。
huangbeidu
[第
3
楼]
[ 回复时间:2009-04-02 16:22 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:3
注册日期:2009-03-10 11:22
不好意思啊 我现在才学到第十章 不是太懂你的意思啊 我往后面翻翻看看什么是para
abob
[第
4
楼]
[ 回复时间:2009-04-02 16:56 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07
定位类型王老师这本书上没讲,简单的说就是程序定义的段所占实际内存是N的倍数(默认是para,N=16-也就是书的情况 设置为byte即N=1 word即N=2)对程序运行没有影响,只对程序加载后内存占用有些影响。
huangbeidu
[第
5
楼]
[ 回复时间:2009-04-12 14:06 ]
[
引用
]
[
回复
]
[
top
]
荣誉值:0
信誉值:3
注册日期:2009-03-10 11:22
此贴由 贴主 于 [ 2009-04-12 14:06 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(mess):1分 4楼(abob):1分
此问题已结贴!
Copyright © 2006-2024 ASMEDU.NET All Rights Reserved