Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1488640
  • 博文数量: 226
  • 博客积分: 3997
  • 博客等级: 少校
  • 技术积分: 2369
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-19 17:26
个人简介

Never save something for a special occasion. Every day in your life is a special occasion.

文章分类

全部博文(226)

文章存档

2018年(5)

2017年(11)

2016年(1)

2015年(17)

2014年(14)

2013年(30)

2012年(5)

2011年(52)

2010年(107)

分类:

2010-10-12 22:45:39

逻辑地址与物理地址

物理地址是外部连接使用的、唯一的,它是“与地址总线相对应”;而逻辑地址是内部和编程使用的、并不唯一。 在内存中的实际地址就是所谓的“物理地址”,而逻辑地址就是逻辑段管理内存而形成的。 例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址(偏移地址),不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换),逻辑地址也就是Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。8086体系的CPU一开始是20根地址线, 寻址寄存器是16位, 16位的寄存器可以访问64K的地址空间, 如果程序要想访问大于64K的内存, 就要把内存分段, 每段64K, 用段地址+偏移量的方法来访问 386CPU出来之后, 采用了32条地址线, 地址寄存器也扩为32位, 这样就可以不用分段了, 直接用一个地址寄存器来线性访问4G的内存了. 这就叫平面模式.

将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址。这里左移的4位是二进制位如果用十六进制表达地址就是左移一位。左移4位还可以表达为乘以16,即:段地址×16+偏移地址。同一个物理地址可以对应多个逻辑地址形式。所以物理地址转换为逻辑地址,需要明确段基地址或偏移地址,然后同上原则确定另一个地址。

逻辑地址 1460H : 0100H 或1380H : 0900H

物理地址 14700H

于是,对于主存14700H单元,我们可以描述为在1460H(或1380H)段的0100H(或0900H)单元,或者说主存1460H : 0100H(或1380H : 0900H)单元。

的地址可以用段基值和段内来表示,段基值确定它所在的段居于整个存储空间的位置,偏移量确定它在段内的位置,这种地址表示方式称为逻辑地址。

       8086对外连接使用一个20位的线性地址唯一确定一个存储单元,也就是说:对于每个存储器单元都有的一个唯一的20位地址,我们称为该单元的物理地址绝对地址8086在内部结构中和程序设计时采用逻辑段管理内存,就形成了逻辑地址。它的表达形式为“段基地址 偏移地址”。

逻辑地址=段基地址 偏移地址

段基地址(Segment)——逻辑段在主存中的起始位置,简称段地址。由于8086规定段开始于模16地址,所以省略低4位0不显式表达,段基地址就可以用16位数据表示。

偏移地址(Offset)——主存单元距离段起始位置的偏移量(Displacement)。由于限定每段不超过64KB(2^16),所以偏移地址用16位数据表示。

阅读(1319) | 评论(0) | 转发(0) |
0

上一篇:FreeMind

下一篇:牛顿迭代法求平方根

给主人留下些什么吧!~~