码迷,mamicode.com
首页 > 其他好文 > 详细

硬件地址不连续的思考

时间:2019-11-06 23:15:30      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:一个   世纪   寄存器   改变   数据   顺序   硬件   src   电路   

  我们在看数据手册的寄存器列表时,会发现寄存器的地址不连续,例如每个寄存器空间是32bit , 寄存器A的地址是0x0 , B是0x4 ,C是0x8,···为什么间隔4呢?0x1 ,0x2等等难道没用?

  数字电路设计工程师当然不会像些土豪,一下买四套房子,住一套,空三套,就算有钱也不会这么任性,因为代码都没写完,哪有空闲来打理这么多房子···

  言归正传,例如0x1,0x2不是不存在,而是和0x0表示的地址相同···

  解释之前先普及一下基础知识,cpu在寻址时是以字节为基本单位的,1字节等于8bit,就是一组8个0或1的特定组合。有人就会问为什么不以1bit或者16bit为基本单位呢?这是上世纪的前辈规定好的,就像你每次吃饭为什么不以一粒米为或者一碗为基本单位?不是饿就是吃饱了撑着···

  回到问题,cpu 有个存放数据的RAM,每个单元能容纳8bit数据,现在cpu要向寄存器A写数据了,因为寄存器A的空间是32bit,因此cpu要调用四个单元,0x0,0x1,0x2,0x3,完成一次写操作。后来cpu为了省事,每次访问寄存器A只提醒0x0,后面的0x1,0x2,0x3知道要写32bit,也跟着0x0一起happy了。同样提醒0x4,后面的0x5,0x6,0x7也如影随形。

  这样看来,0x0,0x4,0x8···地址分配并没有浪费空间,在cpu那边是连续的存储空间,到了寄存器这里0x0还是0x0,0x4相当于0x1,0x8相当于0x3,···每次给寄存器地址时都要除以4,来访问新的32bit的空间。抽象来讲,单个空间变大了,又不能改变原来的顺序,只好把新的单元的编号分隔大一点。如下图所示。

技术图片

 

   例如阿顺上街去买橘子看岳父岳母姐夫小舅子,一共买了32个,如果一个袋子装8个,共4个袋子,阿顺把4个袋子标号0~3(为什么不标号1~4,因为4个会溢出)。但是快到目的地得知只有岳父岳母在家,橘子又不能退,于是他把一个装着橘子的塑料袋放在另一个塑料袋里面。

于是阿顺提了编号为0和2的袋子进了门,给岳父岳母一人一份,并且告诉他们“”如果姐夫小舅子过来了,你们把里面的小袋子编号为0和3的给他们。”

岳父听完哈哈大笑,“来玩就直接来,家里又不缺水果,况且他们也不回来,还多买两个塑料袋”

本来是个要面子的人, 但听到这句话以后突然醍醐灌顶,觉得应该为环保事业做出贡献,于是他下次还是买32个橘子,两个塑料袋,编号0和2。

岳父看到塑料袋标号微微一愣 “小伙子有前途,连买水果都有数据位宽变大时地址数值变小的思想!”

硬件地址不连续的思考

标签:一个   世纪   寄存器   改变   数据   顺序   硬件   src   电路   

原文地址:https://www.cnblogs.com/dongweihua/p/11808894.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!