您的位置:首页 > 其它

关于“物理地址=段基址x16+段内偏移地址”

2016-02-03 09:47 162 查看
以8086为例。

1、段基址和段内偏移地址都是16位(8086仅有16位数据总线);物理地址是20位(8086有20位地址总线)。

2、由于段内偏移地址是16位,所以每个段最大2^16,即0xFFFF。

3、段基址也是16位的,它放在一个20位的数据中,则低4位一定为0。

4、公式中以十进制的眼光看,确实不好理解,然则以十六进制看,再结合下图,就易懂了

00000 |---------|

| |

0FFFF |_____|

10000 | |

| |

1FFFF |---------|

以10000-1FFFF为例,段基址是1000,左移4位即成了10000,加上16位的偏移地址,正好形成10000-1FFFF间的某个物理地址。

注意:实模式下,段寄存器存的是段基址,以上公式直接得到物理地址,但是在保护模式下,段寄存器内存放的是段选择子,

用段选择子到段描述符表中取得段基址,再加上偏移地址,得到的是线性地址(段式内存管理),还不是物理地址,线性地址被划分为4k的页,

页面再映射到物理地址(页式内存管理),注意连续的页面映射在物理地址上可以是不连续的,具体可参考《Linux内核源代码情景分析》第31页和33页。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: