首先分别对上述四个概念进行介绍

PC

PC:程序计数器。用于存放下一条指令的地址,当取完一个字节以后,PC的值会自动加一,为取在下一条指令做准备。

思考:为什么不直接存放下一条指令而存放下一条指令的地址呢?
如果存放地址的话可以很方便的自动加一定位到下一条指令的地址,但是如果存放的是指令的话,那只能在每一天指令的后面加上下一条指令的内容,导致指令长度过长,同时不便于程序转移。

IR

IR:指令寄存器。用于存放当前正在执行的指令。

MAR

MAR:主存地址寄存器。存在于CPU中,存放的是将要访问主存的地址。注意,MAR之中存放的只有地址,即存储单元的索引地址。

MDR

MDR:主存数据寄存器。存在于CPU中,存放的是某一个存储单元。

MAR和MDR功能作用辨析

假设主存是一个含有若干存储单元的存储器,我们这里给存储单元进行标号,0、1、2…,此时MAR的作用就是找到这个标号所对应的单元,但是并不知道这个单元内部的东西。找到这个单元之后,存储器把这个单元里面的数据内容放到MDR中。

四者之间的关系

CPU从PC中取出指令所在的地址单元(取指阶段),之后进行译码,将该地址放进MAR中。MAR找到对应的存储单元,读取数据并将其放到MDR中,此时MDR存放的是指令加数据。之后把指令部分放到IR中进行指令操作,数据放到寄存器或者ACC中计算。
花了10分钟花了一个图,帮助大家理解:
在这里插入图片描述
写在后面
关于PC位数和MAR、MDR位数详解,我放在下一篇文章了:PC、IR位数和MAR、MDR位数

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐