段是实现虚拟地址到线性地址转换机制的基础。 在保护模式下,每个段由三个参数进行定义:
段基地址(Base Address)
段界限(Limit)
段属性(Attribute)
段基地址规定线性地址空间中段的开始地址。在保护模式下,段基地址长32位。因为基地址长度和寻址地址的产度相同, 所以任何一个段都可以从32位线性地址空间中的任何一个字节开始。
段界限规定段的大小。 在保护模式下,段界限用20位表示,而且段界限可以是以字节为单位或以4K字节为单位。 在段属性中有一位对此进行定义,把该位称为粒度位,用G标记。G=0表示段界限以字节为单位,于是20位的界限可表示的范围是1字节到1M字节,增量为1字节;G=1表示段界限以4K字节为单位,于是20位的界限可以表示的范围是4K字节到4G字节。增量为4K字节。当段界限以4K字节为单位时,实际的段界限Limit可以通过下面公式从20位段界限Limit计算出来:
LIMIT=Limit*4K+0FFFH
所以,当粒度为1的时候,段的界限实际上就扩展成为32位。由此可见,保护模式下,段的长度可以大大超过64K字节。
基地址和界限定义了段所映射的线性地址的范围。基地址Base是线性地址对应于段内偏移为0的虚拟地址,段内偏移为x的虚拟地址对应Base+x的线性地址,段内从偏移0到Limit范围内的虚拟地址对应从Base到Base+Limit范围内的线性地址。
通过增加段界限,可以使段的容量得到扩展。 这对于那些要在内存中扩展容量的普通数据段很有效,但是对于堆栈段情况就不是这样。因为堆栈段底在高端,随着压栈操作,堆栈想低地址方向扩展。为了适应普通数据段和堆栈段在两个相反方向上的扩展,数据段的段属性中安排了一个扩展方向位,标记为ED。ED=0表示向高地址扩展,ED=1表示向低地址扩展。
数据段的扩展方向和段界限一起决定了数据段内偏移的有效范围。当断大小为1M字节时,在向高地址方向扩展段内,0~Limit的偏移是合法有效的偏移,而从Limit+1~1M-1的偏移则是非法无效的偏移;在向低地址扩展段内,从0~Limit的偏移则是非法无效的偏移,而从Limit+1~1M-1的偏移则是合法有效的偏移。当段为4G时,情形类似。
注意,只有在数据段的段属性中才有扩展方向位ED,亦即是说只有数段段(堆栈段作为特殊的数据段)才有向高扩展和向低扩展之分,其他段都是自然向高扩展。
段属性规定段的主要特性。例如段粒度位G,还有扩展方向位ED等等。
- [somniumchase] 我一运行就说没有数字 01/01 11:44
- [游客] 为什么啊 08/07 15:36
- [游客] 如果想快一些 就改下面这里 dx值改成1H delay: push ax 04/19 02:53
- [lshhjx] 注释在程序中很重要,楼主不知道吗? 12/08 13:40
- [biaggi] 看不明白,在下還須學習 11/06 08:11
- [游客] 我运行的时候直接显示Unkown filename跳出了- -请问怎么改 06/16 21:44
- [游客] 勿庸置疑,注释是好习惯。与人方便自己方便。 04/12 10:33
- [游客] 老实说,看着真心累呀! 04/07 18:37
- [游客] 很无语,初学者就多看书,不要动不动要别人注释,基础打好了,再自己注释,这样比别人帮你注释好得多 12/17 19:43
- [dgkepu] 初学者:不懂,希望有多点注释带着学习学习! 12/07 20:52
- [游客] windows 7是一个64Bit操作系统,它不兼容DOS,无法识别16Bit系统。重装系统wind 02/28 21:05
- [游客] windows 7是一个64Bit操作系统,它不兼容DOS,无法识别16Bit系统。重装系统wind 02/28 21:05
- [466987333] 你好,高手,我想请教一个问题。 我用的是win7操作系统,32位的,里面没有找masm目录,是不是 12/12 17:30
- [lanfioncc] 那个太高级了。。。我还有点看不懂。。不过谢谢!!! 11/27 11:23
- [yc2010] 实验16中的 table: dw sub1,sub2,sub3,sub4 可不可以改成呢? 09/11 09:08
- [yc2010] mov bl,ah mov bh,0 add bx,bx ----------->这里为 09/07 21:03
- [yc2010] 为什么要add bx,bx呢? 09/07 20:55
- [yc2010] 那是不是像table[bx],ds[bx]....等(内存单元)都是表示一个字节呢? 09/06 21:10
- [masmaster] 杨季文的《80X86汇编语言程序设计教程》 09/01 12:52
- [游客] to masmaster shl左移4位,那al传进来的4,5,6位背景色不就没了. 为什 09/01 11:00