嵌入式基础知识笔记
Posted 想成为大师啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式基础知识笔记相关的知识,希望对你有一定的参考价值。
边学习,边了解
基地址和偏移地址
- 打个比方,你找一个403房间,你要先到4楼,然后找第三个房间,那就是403。在这里,4楼就是基地址,3就是偏移地址。在arm中也是一样的,实际的地址就是基地址+偏移地址
然后我们在详细的讲解一下:
首先必须明白 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(十进制)+偏移地址
内存的物理地址 = 0BAC16+0100 = 0BAC0 + 0100 = 0BBC0H;你看,0BBC0就是5位的十六进制数了,满足20位(45=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.
以上是关于嵌入式基础知识笔记的主要内容,如果未能解决你的问题,请参考以下文章