芯片 微架构 控制器 总线 晶体管 内存
主页 寄存器 正文

逻辑地址与物理地址解析及转换方法

2.6 什么是逻辑地址?什么是物理地址?如何由逻辑地址计算物理地址?

好的,试试这个版本:
解答思路:
说到物理地址,这其实就是CPU在跟内存打交道,或者说是跟I/O端口打交道时,真正去操作的那个地址。
你可以把它想象成物理位置,这个地址会因CPU的不同而有所差异。
物理地址和程序里用到的逻辑地址是两码事,逻辑地址是程序员或者程序在规划时用的“虚拟”地址。

这个物理地址,它其实是由两块拼起来的:一个是“段基址”,你可以理解为一段内存区域的起点(具体来说是起点地址的高1 6 位部分),这部分信息是从CPU的段寄存器里拿到的;另一个是“偏移地址”,它告诉你这个要访问的内存单元,是从那个段起点往下数多少距离。

那么,CPU是怎么根据这些信息找到最终物理地址的呢?它通常会把段寄存器里的值左移4 位(相当于乘以1 6 ),然后把这个结果加上指令里给出的偏移量,最后就得到了一个完整的2 0位的物理地址。

具体点说:
取指令的时候:CPU会自动用代码段寄存器(CS)里的值来做这事儿,左移4 位后,再拼上指令里指定的偏移地址,嘿,目标指令的物理地址就算出来了。
处理堆栈操作:这时候CPU会动用堆栈段寄存器(SS),同样道理,取它的值左移4 位,加点偏移量,就定位到栈顶那个单元的物理地址了。
存取数据(操作数):CPU一般会看数据段寄存器(DS)或者辅助段寄存器(ES),把对应的段基值左移4 位,再结合指令里的偏移地址,最终确定数据在内存中的物理位置。

总的来说,这个过程就是CPU根据段寄存器的指示(决定哪个内存区域)和指令给出的偏移量(在这个区域内具体哪个位置),通过移位和相加,精确地计算出要访问的内存单元或I/O端口的物理地址。

8086CPU为什么要分为EU和BIU两个单元?

在结构上,8 08 6 处理器可以被划分为执行部分(EU)和总线接口部分(BIU)。
BIU负责执行EU的所有总线操作,并依据EU的指令在CPU、内存或I/O接口间传递数据。
BIU由以下五个功能模块构成:首先是段寄存器(均为1 6 位),包括CS(代码段)、DS(数据段)、ES(扩展数据段)、SS(堆栈段);其次是指令指针寄存器IP(1 6 位),它存储程序段的偏移量;地址加法器(2 0位)负责将逻辑地址转换为物理地址;指令队列(6 字节)用于预取指令;最后是I/O控制电路,它生成必要的控制信号。
EU接收到BIU的指令队列中的指令后,进行指令解码、执行并输出结果。
EU在需要操作数时,会请求BIU访问内存,并提供相应的段偏移地址。
EU还具备管理寄存器的功能。
EU包含以下单元:通用寄存器(1 6 位)AX(累加器)、BX(基址寄存器)、CX(计数器)、DX(辅助累加器),这些寄存器均能作为两个8 位寄存器使用;专用寄存器(1 6 位)BP(基指针寄存器)、SP(堆栈指针寄存器)、SI(源变址寄存器)、DI(目的变址寄存器);以及标志寄存器Flag(1 6 位)。
热门资讯
联想G50-80内存和固态硬盘升级攻略及费用分析
电脑内存8GB升级16GB指南:轻松提升性能与流畅度
笔记本4G内存够用吗?内存使用率多少算正常?
联想ThinkPadE440SSD加装教程:双硬盘升级攻略
苹果手机存储不足拍照难?三招轻松解决!
解析游戏内存占用增长之谜
VerilogHDL实现4位串入串出移位寄存器教程
C语言学生信息管理及成绩排序实现教程