能力值:
( LV8,RANK:120 )
|
-
-
2 楼
Windows程序默认平坦模式。段的定位比较模糊。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我说的是16位 实模式
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
16位下,段寄存器将代码与数据分开,还有堆栈也分开的,分段的目的,一方面是为了将数据与代码分开,另一方面是为了扩展寻址空间;
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
这我也知道啊!!
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
任何16位程序在内存中一定是连续的,代码段和堆栈段不用赋值,系统会自动确定,数据段必须要赋值。其实,内存分段没有那么神秘,DOS程序可用的内存是20位的地址,范围:00000H-FFFFFH,而实际寻址是16位的,所以,就必须用段+偏移的方式来寻址,应该懂得变通。例如:内存地址40:0000其20位内存地址为00400H,可以变通为0000:0400,0000:7C00其20位内存地址为07C00H,可以变通为07C0:0000。可以看出,20位内存地址 = 段地址 x 10H + 偏移。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
汇编产生的EXE文件是以节为单位(16字节/节)进行的,在源文件里定义的每个段在编译后都占有整数个节,不足的部分会补充为00H,保证个段节对齐。数据段、堆栈段、代码段构成的节一起统称装入模块,装入时各个段寄存器和IP、SP都由dos加载器根据EXE文件头(用于描述 一些文件的信息,包括如何重定位)进行重新定位,源程序中的定义的各段在装入内存时也是连续的。
可以参考
http://bbs.pediy.com/showthread.php?t=77208&highlight=%E8%AF%BB%E4%B9%A6+%E4%B9%A6%E7%AC%94+%E7%AC%94%E8%AE%B0+%E9%87%8D%E5%AE%9A+%E5%AE%9A%E4%BD%8D
|
|
|