能力值:
( LV2,RANK:10 )
|
-
-
2 楼
读书要灵活,这里数据段和栈段在代码段的下面,加载的时候代码段的代码先加载入内存,然后再是数据段和栈段,不对的地方还请指正
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
但是段地址应该是差1啊,如果把,数据段和栈段放前面,各段就相差1啊
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
这个问题,应该是同步的原因吧。
段寄存器的值应该是PE加载器向系统申请的。而系统不只是运行一个程序。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
放在前面是差1,放在后面因为代码段的代码也占用了内存,所以就不一样了, 比如说加载后代码段有32个字节 这时代码段假设为1
而32个字节暂用了2个段(一个段16个字节),后面数据段的段地址就是3,在往后栈段的段地址就是4 如果代码段暂用了60个字节,60/16=3 后面还有12个字节算一个段 这里代码段就算是4 后面的数据段的段地址就是5,栈段段地址就是6
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
16位:
一个段有0----FFFF的寻址空间,即64KB大小。
5楼恐怕不正确,那完全是浪费内存空间啊。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
我给的程序的代码段难道有ffffh,我看没有吧?
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
不是说一个段地址就表示占用64k,而是说可以寻址64k
段地址是多少无所谓,只要OFFSET满足 EA = 段地址*16 + OFFSET 就可以了
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
还是不懂,能说详细点吗
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
我的意思是应该不用这么在意这些值
如果一定要解释的话,我个人想法是:
一般data段和stack段第一个单元偏移为0
这样的话一个段起始与另一个段起始相差16个字节的整数倍才能使偏移为0
也就是说一个段用了多少个16个字节(没占满也算一个),下一个段的段值也要多这么多
个人理解,谨防误导
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
你的意思是我的代码段用了(32字节<代码段<=48字节),所以数据段与代码段相差3??
|
能力值:
( LV4,RANK:50 )
|
-
-
12 楼
应该是,不过这应该与汇编程序有点关系吧
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
不知道了,乱了,看有没有哪个大牛知道,给回答下,解除我心中的疑虑
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
中间是不是要将段对齐之类的
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
楼主看看下面内存的情况就明白了
-u0
13DC:0000 B8E013 MOV AX,13E0
13DC:0003 8ED0 MOV SS,AX
13DC:0005 BC1000 MOV SP,0010
13DC:0008 B8DF13 MOV AX,13DF
13DC:000B 8ED8 MOV DS,AX
13DC:000D FF360000 PUSH [0000]
13DC:0011 FF360200 PUSH [0002]
13DC:0015 8F060200 POP [0002]
13DC:0019 8F060000 POP [0000]
13DC:001D B8004C MOV AX,4C00
-d cs:0
13DC:0000 B8 E0 13 8E D0 BC 10 00-B8 DF 13 8E D8 FF 36 00 ..............6.
13DC:0010 00 FF 36 02 00 8F 06 02-00 8F 06 00 00 B8 00 4C ..6............L
13DC:0020 CD 21 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .!.............. 代码段占用内存
13DC:0030 23 01 56 04 00 00 00 00-00 00 00 00 00 00 00 00 #.V............. 数据段
13DC:0040 00 00 00 00 83 3E DF 13-00 00 0D 00 DC 13 E5 0D .....>.......... 堆栈段
13DC:0050 62 44 83 C4 02 B8 FF FF-50 B8 05 00 50 8D 86 7A bD......P...P..z
13DC:0060 FE 50 E8 4B 10 83 C4 06-8B 1E 56 07 D1 E3 D1 E3 .P.K......V.....
13DC:0070 A1 3A 21 8B 16 3C 21 89-87 BE 22 89 97 C0 22 80 .:!..<!..."...".
-r
AX=13DF BX=0000 CX=0044 DX=0000 SP=0010 BP=0000 SI=0000 DI=0000
DS=13DF ES=13CC SS=13E0 CS=13DC IP=000D NV UP EI PL NZ NA PO NC
13DC:000D FF360000 PUSH [0000] DS:0000=0123
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
正在看基础,学习了
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
那些数字没有太大的意义,同意四楼的。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
终于明白了,结合15楼debug和10楼的介绍明白了
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
楼主,这个东西EXE文件本身决定不了CS和DS什么的值,这是LOAD加载器的事情(也可以说是操作系统中的文件系统的事情),所以你不必纠结具体值的。
这个问题,王爽的16位汇编书没说,那我想应该是没什么 研究或应用 的价值。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
汇编本来就是底层的东西,问一问也没什么坏处,呵呵, 谢谢怀特迈恩了
|
|
|