就是这个问题了 从实验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 |