基地址和偏移地址的概念
基地址和偏移地址的概念
follitude 发表于2年前
基地址和偏移地址的概念
  • 发表于 2年前
  • 阅读 245
  • 收藏 2
  • 点赞 2
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

首先必须明白 cpu和内存的区别:

·cpu是中央处理器,内存是物理数据存放的地方。cpu不直接存放数据而是通过内存来存放数据。

·cpu和内存之间通过20条地址总线相连接,地址总线就是cpu通过地址找到对应的内存的物理数据的传递工具。

·计算机只能处理0,1 二进制数据,每一条线可以处理 0,1 两种类型数据,所以20根线总共能够组成 2^20=1048576个不相同的地址,也就是能搜索 1048576个地址范围内的内存。我们知道一个地址代表一个存储单元,一个存储单元能够存储 1byte数据,那么也就是1048576个地址能够找到 1048576个1byte数据=1M的数据,即20根地址总线总共能处理1M的内存数据。

 

·疑问?cpu的寻址能力只能16位而达不到20位,这怎么办呢?

cpu的地址都是使用16进制表示的,最多也能够寻址2^16=65536,说明只能处理64K的内存数据。天啦噜,64K内存的计算机,能用?当然不能用啦,于是,段的概念横空出世。段,理解起来可以是假设将1G的数据划分为 n个段,每一个段是64K(65536个地址),那么16位的寻址就能找到了这65536个地址了。

·肯定还是不理解,对吧。那就说说段地址吧!!!

·开始介绍段地址:每一个段的开头也就是每隔一个64K就是一个基地址(逻辑上基地址等于段地址),段内的数据的地址就是当前基地址的偏移地址。这时,段地址+偏移地址就能够找到真正的内存数据了。

·cpu表示的地址为:基地址:偏移地址(偏移地址相当于在首地址的基础上 移动的距离)

插播:(起始地址顾名思义;相对地址和偏移地址的概念差不多;只不过用在不同的场合;偏移地址就是相对于基地址的偏移量就像是相对距离;基地址是一个段的起始地址,一般的20位地址总线,基地址为16位;逻辑地址就是基地址和偏移地址的复合形式,逻辑地址= 基地址 : 偏移地址;线性地址只是一个概念,表示地址成线性递增;物理地址要通过基地址和偏移地址的计算才能得出,一般的20位地址总线,其物理地址为:基地址 X 16(十进制)(相当于在基地址后面添一个0)+ 偏移地址)

比如,0BAC:0100

0BAC是基地址,0100是偏移地址。0BAC是4位的十六进制,将它表示为16位的二进制数据为:0000 1011 1010 1100。在这里,我们必须要把它转换成20位(也就是5位的16进制) 才能在20位地址总线中传递,也才能达到1G的数据访问范围。

那怎么转换成20位就能让数据传递到内存中找到物理数据了呢?

内存的物理地址 = 基地址*16(十进制)+偏移地址

内存的物理地址 = 0BAC*16+0100 = 0BAC0 + 0100 = 0BBC0H;你看,0BBC0就是5位的十六进制数了,满足20位(4*5=20bit)就可以传递到内存了。所以,实际传递的二进制就是:0000 1011 1011 1100 0000,这样的话20根地址总线就能处理它了。

注意了,32位汇编,32根地址总线,它总共能够直接就找到2^32个地址,(即4294967296 byte数据 = 4G的内存),而且不再将内存分成一段一段的,所有的内存区域都是连续的呢!

附读:

1.基地址 = 段地址 × 16
2.一个大小为64KB的段
起始地址 = 段寄存器的值(段地址) × 16 + 0
结束地址 = 段寄存器的值(段地址) × 16 + 0ffffh
3.8086cpu为16位,ip为16位寄存器,2^16 = 64(2^6) × 1024(2^10) = 64KB

·逻辑上,基地址 = 起始地址,理论上不等于。

·一般我们所的物理地址指的是某个单位的起始地址。这个某个单位是字节、字、或者某一段。
a.对于字节单元的物理地址:因为只有一个存储单元,所以其物理地址就是该单元的编号。
b.对于字单元的物理地址:因为只有两个存储单位,所以其物理地址就该单元的低字节单元地址(起始地址=小编号,结束地址=起始地址+2-1=大编号)。
c.对于段的物理地址:段的内容大小为"容量",所以其物理地址(起始地址)就是该段的低字节单元的编号,结束地址=起始地址+容量-1. 

共有 人打赏支持
粉丝 4
博文 117
码字总数 4956
×
follitude
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: