存储字长 是否 等于MDR?

自由小菜园 2018-11-05 02:20:14
唐朔飞《计算机组成原理》开篇概论写:MDR存储器寄存器,是用来存放即将往存储单元中写入或者取出的数据,其位数等于存储字长?

有谁能解释下,这个是否正确?

现在大多数计算机的存储单元的存储字长都是8位吧,但是MDR现在基本都是32位,64位了,这能相等?

假如相等那么也就是现在的存储字长也都是32位或者64位,那内存中的编号也就是只能按照字编址,而不能按照字节编址了不是

哪位大虾对计算机组成原理很懂的来解释下吧?

...全文
3373 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
香香杉树 2021-09-07
  • 打赏
  • 举报
回复 2

408复习这个问题查了好多资料,目前个人的理解是,唐书的这句话

MDR存储器寄存器,是用来存放即将往存储单元中写入或者取出的数据,其位数等于存储字长。

中的"存储字长"非严格定义的存储单元的二进制位数(例如若主存按字节编址,则存储单元的二进制位数为1B,存储单元也非严格定义上),而是"字存储单元"的字长,也就是4B(若主存按字节编址,则一个字存储单元的定义为4个字节存储单元为一个字存储单元,且此字存储单元的地址为每个字节存储单元组合中地址最小的那个字节存储单元的地址,例如地址为0,1,2,3的字节存储单元组合为一个字存储单元,而这个字存储单元的地址为0,而后面的字存储单元的地址就是4,8...若为按字编址,则字存储单元的地址为0,1,2...)。

所以这里MDR的位数与按字节编址的字存储单元的字长相等,而不是狭义上的按字节编址的存储单元的字长。
很多考试题例如408往年真题中经常这样使用"存储字长",所以我总结为这样一套说法,不知与楼主看的白中英版机组是否是一个解释。

楼主的第二个问题:
cpu的取指令的微操作序列如下:

  • T0 (PC)->MAR
    T1 M(MAR)->MDR
    T1 (PC)+1->PC
    T2 (MDR)->IR
    T2 Op(IR)->指令译码器

在同步控制的cpu中,一个时钟周期只可以在内部总线(单总线)进行一个微操作,由于在PC中的内容需完整的传到MAR中,才可以进行自增,有时序,此时cpu内部总线被占用且内容为当前指令的地址,而PC自增不需要占用总线,有CU的微命令就可以进行自增操作,所以一般被安排到T1节拍中,可认为是与操作M(MAR)->MDR是同时进行的,但也可在T2节拍((MDR)->IR)中进行,因为不占用内部总线,所以可在取指周期任意安排,通常定义为取指周期末。
序列中T2节拍占用了两个均占用总线的操作,原因是两个操作很快,几乎只需一个节拍就可完成。

qq_38593979 2020-08-15
  • 打赏
  • 举报
回复
哥弄懂了,我想请教下你,我也遇到了同样的问题
自由小菜园 2018-11-06
  • 打赏
  • 举报
回复
刚才看了白中英版计算机组成原理对照,这个问题搞明白了,不过无意间扫到一行文字,发现好像有问题,望知道的人说一下。


这里描述的是一个CPU取指阶段, 这边大概就是地址传到AR的时候,下面马上PC就加1形成下一个地址, 但是很多书上,包括唐朔飞那本书上描述的
其实是指令取回以后,进过MDR,存到IR中后,再接下来PC才会加1 。
自由小菜园 2018-11-06
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
譬如64位的,可能是由8个8位的内存芯片构成
构成后就做为一个整体出现了

既然你在看计算机基础,那么 唐朔飞 没有告诉你 完成调度的是 DMA 而不是存储芯片,更不是 CPU 吗?!


你这说远了哦,问的只是针对这个问题,你就说到DMA了,唉
xuzuning 2018-11-06
  • 打赏
  • 举报
回复
譬如64位的,可能是由8个8位的内存芯片构成
构成后就做为一个整体出现了

既然你在看计算机基础,那么 唐朔飞 没有告诉你 完成调度的是 DMA 而不是存储芯片,更不是 CPU 吗?!
  • 打赏
  • 举报
回复
CPU 接口好比如说是一个省会城市的高速路出口,也许是10车道的,管你远处农村乡间小道是不是2车道的呢? 人家高速路出口的标准就是同时管理10车道的出入信号。既然是说的是CPU的寄存器原理,自然就是以CPU的接口概念来说”存储“呢(也就是接口规范),不用纠结个别外设。
  • 打赏
  • 举报
回复
更何况人家说的寄存器是指的是 CPU 内部的构造,连 CPU 都是 32 位了,还会纠结 32 位CPU 内部只是 8 位的寄存器这种概念吗?
  • 打赏
  • 举报
回复
引用 4 楼 fuyun2000 的回复:
譬如32位CPU,出来的数据总线应该有32位, 而如果存储器芯片是8位,那按照对应,必须进行位扩展,也就是我需要用4个存储芯片 连接到32根数据总线上,那譬如我现在传输8位数据,那是不是得由片选信号选取其中一个芯片的数据,如果传递32位数据,那就选择4个芯片。
32位CPU这就意味着同时传输32位数据。这里不是论文字游戏(来推断),而是实际工业标准。
自由小菜园 2018-11-06
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
别说是64位计算机,就算是1024位计算机出现了,也照样有字节概念。这个怎么能纠结字眼儿?



我没纠结字节概念,字节都是8位,跟任何其他无关。我纠结所谓的存储单元,存储字长 是个什么东西 因为按照书上说,存储字长=MDR

那么存储字长 就是一个字的长度。
自由小菜园 2018-11-06
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
字节是内存最小单位
字长是一次能处理的计量单位。比如 32 位就表示一次能处理4个字节的数据

是否是 按照字节编址,与字长无直接关系。实际取决于内存条的性能,比如字长 64
如果你的内存条是 8 位的,那每次读写内存条的 8 个单元
如果你的内存条是 16 位的,那每次读写内存条的 4 个单元
如果你的内存条是 32 位的,那每次读写内存条的 2 个单元
如果你的内存条是 64 位的,那每次读写内存条的 1 个单元


你这个内存条的位数,是什么决定的?

内存条由内存芯片构成, 譬如64位的,可能是由8个8位的内存芯片构成,每次读写64位数据,也用到了8个单元,所以你上面说内存条每次读写内存条的一个单元,感觉不怎么对啊。

如果你的上面说的8 , 16, 64 代表的是每个芯片多少位,那么实际上只有8位的内存条才可以做到以字节来寻址,其他只能以字寻址。


自由小菜园 2018-11-06
  • 打赏
  • 举报
回复
引用 20 楼 xuzuning 的回复:
CPU 都有快速闪存,用来预读可能会被应用的的数据和代码,如果每次都没有命中,岂不效率更低?



放入缓存那个是目前没办解决局内存与CPU的速度差异,而这个明明取一次就够 非要取2次是可以解决的啊, 又或者实际不像你说的取2次的,我再查查资料吧
xuzuning 2018-11-06
  • 打赏
  • 举报
回复
CPU 都有快速闪存,用来预读可能会被应用的的数据和代码,如果每次都没有命中,岂不效率更低?
自由小菜园 2018-11-06
  • 打赏
  • 举报
回复
引用 18 楼 xuzuning 的回复:
书上讲的都是原理,实际上并不是那样的
你只处理 64位数据中的8位,传递的仍然是64位
至于 CPU 中是如何处理的,要看微指令是如何操作的(不过这种核心技术是从不示人的)

如果你是搞单片机的,那么最好去看看有关的专业书籍,而不是普及读物


因为我现在CPU是64位,但是数据总线是32位,存储器也是32位,我按字节寻址取8位,你意思还是会取出64位,那效率岂不是低了,CPU还得取2次数据,明明8位通过32位数据线绰绰有余, 感觉说不过去啊
xuzuning 2018-11-06
  • 打赏
  • 举报
回复
书上讲的都是原理,实际上并不是那样的
你只处理 64位数据中的8位,传递的仍然是64位
至于 CPU 中是如何处理的,要看微指令是如何操作的(不过这种核心技术是从不示人的)

如果你是搞单片机的,那么最好去看看有关的专业书籍,而不是普及读物
自由小菜园 2018-11-06
  • 打赏
  • 举报
回复
@xuzuning 我现在传递的不是64位数据啊,我只要按字节寻址 取8位啊
自由小菜园 2018-11-06
  • 打赏
  • 举报
回复
引用 15 楼 xuzuning 的回复:
64位CPU 通过32位的数据总线取数据
这就是所谓的 准64位 系统

由于 CPU 是 64位的, 所以一次就必须读入 64 的二进制数位,对于32位的存储器,就是要连续读取相邻的两个存储单元
至于 CPU 如何处理读入的内容,那是程序的事情
就像公共交通那样,无论是把人挤成了鱼干,还是只有一个人(甚至没人)到点了都是要准时发车的


64位CPU 32位的数据线 32位的存储器,你意思就必须读取两次? 哪怕我按字节寻址 只读取8位, 也还是要传递两次数据? 你确定是这样,传递两次数据 取出64位,没用的数据丢掉 剩下有用的那8位?
xuzuning 2018-11-06
  • 打赏
  • 举报
回复
64位CPU 通过32位的数据总线取数据
这就是所谓的 准64位 系统

由于 CPU 是 64位的, 所以一次就必须读入 64 的二进制数位,对于32位的存储器,就是要连续读取相邻的两个存储单元
至于 CPU 如何处理读入的内容,那是程序的事情
就像公共交通那样,无论是把人挤成了鱼干,还是只有一个人(甚至没人)到点了都是要准时发车的
自由小菜园 2018-11-06
  • 打赏
  • 举报
回复
引用 13 楼 xuzuning 的回复:
[quote=引用 11 楼 fuyun2000 的回复:]
你这说远了哦,问的只是针对这个问题,你就说到DMA了,唉

并不是我说远了,现在的 计算机中 CPU 并不是直接访问 存储芯片 的
都是通过 DMA 进行的,CPU 只向 MDR 写入需要的地址,由 DMA 去控制读写 存储芯片
CPU 并不知道,也不需要知道 所需的内容,是存放在一个还是 16个存储芯片中的[/quote]


展开来一个问题,64位CPU 通过32位的数据总线取数据,存储器是32位,如果我们按照 字节寻址 取出8位的数据,那么多余出来的24根数据总线,有用的 还是没用呢,或者说里面存放数据不,还是说默认都是0传过去
xuzuning 2018-11-06
  • 打赏
  • 举报
回复
引用 11 楼 fuyun2000 的回复:
你这说远了哦,问的只是针对这个问题,你就说到DMA了,唉

并不是我说远了,现在的 计算机中 CPU 并不是直接访问 存储芯片 的
都是通过 DMA 进行的,CPU 只向 MDR 写入需要的地址,由 DMA 去控制读写 存储芯片
CPU 并不知道,也不需要知道 所需的内容,是存放在一个还是 16个存储芯片中的
自由小菜园 2018-11-05
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
[quote=引用 0 楼 fuyun2000 的回复:]现在大多数计算机的存储单元的存储字长都是8位吧


根据呢?

难道你的根据是许多编程语言的 byte 数据结构是8位的?[/quote]

譬如32位CPU,出来的数据总线应该有32位, 而如果存储器芯片是8位,那按照对应,必须进行位扩展,也就是我需要用4个存储芯片 连接到32根数据总线上,那譬如我现在传输8位数据,那是不是得由片选信号选取其中一个芯片的数据,如果传递32位数据,那就选择4个芯片。(这里我有一个疑问,如果传递8位,那是不是数据总线中有效数据只有8根?)
假如数据的传输是这样理解,那存储器的存储字长是多少呢?按照芯片算的存储字长8位 ,那MDR就是8位,如果是按照4个芯片组合一起算就是32位,那MDR就是32位了不是
加载更多回复(3)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧