博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
存储器的寻址问题 分类: 计算机组成原理 2011-...
阅读量:5172 次
发布时间:2019-06-13

本文共 1545 字,大约阅读时间需要 5 分钟。

最近,在做ucos在arm9上移植的相关问题,不过有一个小插曲:我不太明白arm的存储空间的编制和寻址。不明白32位机器是怎样实现按字节寻址的。

我查了一些资料,终于弄明白了。原来,我们用的arm和平常我们用的pc机都是按字节编址的,主要是为了和外围设备通信方便。

下面是我从网上找的资料:

“存储器可以按字节寻址,也可按字寻址。”这种说法是正确的。
有些型号的计算机是按字节寻址(按字节编址,按字节访问)的,硬件实现比较简单,有多少位的地址,系统就有多少位的地址总线,CPU就有多少位的地址引脚。按字节寻址数据传输能力小(一次一个字节)。
有些型号的计算机是按字来寻址(按字编址,按字访问)的,硬件实现也比较简单。一个字为若干字节,按字单元编址,地址位数少,同时按字单元访问,数据位数(数据线位数)多,数据传输能力大。
也有些型号的计算机即可按字节寻址,又可按字寻址(按字节编址,按字节或字访问),硬件实现较复杂。我们现在所用的微机就属这一类型。
在你以下所举例子中:
例如:一个1M*32位(4MB)的存储器,可以得到,该存储器有2^20个字存储单元,数据线宽度为32,地址线宽度为20。当按字寻址时,需要20位的地址来表示一个地址编号;当按字节寻址时,则需要22位的地址来表示一个地址编号。而地址线只有20位,如果按字节寻址的话,貌似不够。
如果用20位的地址按字节寻址4MB的内存,肯定是不够的。若该存储器只有20位地址线既能按字寻址,又能按字节寻址,则必有控制对一个字内的四个字节的单独寻址的信号线。
下以微机系统为例加以说明。
在8086CPU中,字长为16位(2字节),CPU有20位的地址引脚(A19—A16,AD15—AD0),16位数据引脚(AD15—AD0,注意8086CPU的数据引脚和低16位地址引脚是共有的,采用分时复用的办法分别传送地址和数据)。可以按字节或字访问1MB的的内存单元。另外CPU还有一个BHE引脚,它与地址引脚A0一块决定对内存的访问。
BHEA0内存访问状态
00偶地址访问内存字单元,16位数据通过16位数据引脚(AD15—AD0)传送
01奇地址访问内存字节单元,8位数据通过高8位数据引脚(AD15—AD8)传送
10偶地址访问内存字节单元,8位数据通过低8位数据引脚(AD7—AD0)传送
11无操作

在80286CPU中,字长也为16位,CPU有24位地址引脚(A23—A0),16位的数据引脚(D15—D0),地址引脚和数据引脚分离,可以按字节或字访问16MB的内存。CPU也设有一个BHE引脚,它与地址引脚A0一块决定对内存的访问,实现方法与8086相同。

在80386CPU中,字长增加到了32位(4字节),CPU有30位地址引脚(A31—A2,而没有A1和A0噢),32位的数据引脚(D31—D0),可以按字节(8位)、半字(16位)或字(32位)访问最多为4GB的内存。这里就出现了问题,怎样用30位地址字节访问4GB的内存呢?解决办法是80386CPU又设置了BE3—BE0四个引脚,称为是字节允许引脚(低电平有效),它们和30位的地址引脚一块儿决定对内存的访问方式(按字节、半字、字访问)。因此80386CPU由A31—A2和BE3—BE0共同决定了对4GB内存访问的32位地址。
本文来源于Spirit's Home , 原文地址:
并且,我用的arm板子,它里面有两片sdram和一片flash,并且是统一编制的。

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/zhanglianpin/archive/2011/04/04/4622366.html

你可能感兴趣的文章
Android 开发新方向 Android Wear ——概述
查看>>
固定浮窗的实现代码【转载】
查看>>
C#Windows的HelloWorld
查看>>
Xcode清除缓存、清理多余证书
查看>>
weblogic 优化设置 http://wenku.baidu.com/view/c42e7a5bbe23482fb4da4cf2.html
查看>>
.net 获取 虚拟目录名字
查看>>
BZOJ 入门OJ 2006: [Noip模拟题]七天使的通讯
查看>>
linux下使用g++编译cpp工程
查看>>
JAVA详细运行过程及与平台无关性
查看>>
jsonp跨域总结
查看>>
c#设计模式之观察者模式(Observer Pattern)
查看>>
数论——质数筛法
查看>>
创建sum求多元素的和
查看>>
onchange 、oninput 区别&remove、empty
查看>>
UILabel的常见用法
查看>>
用户线程和内核线程的区别
查看>>
Java异常超详细总结
查看>>
Core Data 编程指南
查看>>
Crash dump中需要重点关注的信息
查看>>
art.dialog
查看>>