购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 物理地址、有效地址和线性地址

在继续后面的内容之前,我们需要就一些基本概念达成一致。先来说一说什么是物理地址。我们知道处理器有地址线,通过地址总线连接物理内存。每个处理器的地址线在数量上都是固定的,地址线的数量决定了处理器最多可以访问多少字节的物理内存。

比如说,8086处理器有20根地址线,则它最多可以访问1MB的内存;80386有32根地址线,则最多可以访问4GB的内存。当然,实际安装的物理内存数量可能没有这么多。

处理器通过地址线发出的地址叫物理地址,如果物理内存足够大,每个物理地址都会对应于这个内存中的一字节。实际上我们知道,在发出物理地址时,可以指定连续访问的字节数,这样就可以从指定的物理地址处取出一字节、字、双字或者四字。

再来说一说什么是有效地址。在我们用汇编语言编写程序来访问内存的时候,需要给出地址。x86处理器是分段的(即使有时候只能分一个段),在我们编写指令时,不需要指定段地址,段地址是提前指定的,需要用传送指令将段地址提前加载到段寄存器,比如CS、DS、SS、ES、FS和GS等。

所以,我们在指令中只需要指定一个段内偏移量。但是这个段内偏移量如何给出,取决于指令的形式,有时候还要经过计算。无论如何,为了方便,这个通过计算得到的段内偏移量叫作有效地址。在实际访问内存时,是用段的基地址加上有效地址。

来看几个例子:

以上,在第一条指令中,有效地址来自标号data,是标号代表的汇编地址;在第二条指令中,有效地址来自寄存器EBX,是EBX的内容;在第三条指令中,有效地址是一个直接给出的数值0x7c08;在第四条指令中,有效地址来自寄存器EAX的内容加上寄存器EDI的内容乘以2的值,再加3。

接着我们说一说什么是逻辑地址,逻辑地址是分段模型下的一种地址形式。我们学过实地址模式,在实地址模式下,逻辑地址由逻辑段地址和有效地址组成,访问内存时使用的物理地址是由处理器将逻辑段地址左移4位,加上有效地址得到的。

在保护模式及我们后面要讲的IA-32e模式下,逻辑地址由段选择子和有效地址组成。在访问内存时,处理器用段选择子到描述符表中选择一个描述符,用描述符中的段地址加上有效地址。

最后我们讲一讲什么是线性地址,线性地址也叫虚拟地址。我们知道,处理器内部有段部件和页部件。在保护模式和IA-32e模式下,段部件输出的地址是用描述符中的段基地址加上有效地址生成的,而描述符是用段选择子从描述符表中取出的。

无论如何,在保护模式和IA-32e模式下,段部件输出的地址都叫线性地址。如果没有开启分页功能,段部件输出的线性地址就是物理地址,直接用于访问物理内存;如果开启了分页功能,段部件输出的线性地址是虚拟地址,用来访问虚拟内存,这个对应于虚拟内存空间的地址还要送到页部件,由页部件转换成物理地址。 yKzyZvyusldxyBMV5us643mLGlkYBeDZuaOnNcPpIKP+eCAilBayDROhsrhKH4eQ

点击中间区域
呼出菜单
上一章
目录
下一章
×