本文主要介绍80386在保护模式下,将分段形式的逻辑地址段选择符:偏移地址(ES:BX)转换成实际的物理内存地址的过程。
整个转换分成两个阶段:段转换(逻辑地址转换成线性地址)和页转换(线性地址转换成实际物理地址)。
段转换
如上图所示,描述符表是操作系统初始化时,在内存区域创建的一张表,具体的创建过程在后面的文章中会结合代码来说明。描述符表里面的每一项就是段描述符。需要特别注意的是,当选择符装入段寄存器时,CPU会把相应的描述符中的段起始地址、段界限和段属性等自动地装入描述符寄存器(段寄存器隐藏部分)。这里的偏移值,按照目前我的理解应该是在执行call指令时后面跟的函数标号,这个有待后续阅读初始化代码时进一步确认。
到这里,段转换的过程就介绍完了,下面具体看下选择符和段描述符的格式:
选择符的结构