数据地址寄存器和程序计数器的区别

程序计数器是存放指令地址的,而地址寄存器是存放CPU访问的地址的。两者功能不是一样的吗?

告诉你这些的人太不负责了。
定义再说区别和原理:
1、程序存储器(program storage)
在计算机的主存储器中专门用来存放程序、子程序的一个区域。

2、指令寄存器(IR ):用来保存当前正在执行的一条指令。当执行一条指令时,先把它从内存取到数据寄存器(DR)中,然后再传送至IR。指令划分为操作码和地址码字段,由二进制数字组成。为了执行任何给定的指令,必须对操作码进行测试,以便识别所要求的操作。指令译码器就是做这项工作的。指令寄存器中操作码字段的输出就是指令译码器的输入。操作码一经译码后,即可向操作控制器发出具体操作的特定信号。

3、程序计数器(PC):为了保证程序(在操作系统中理解为进程)能够连续地执行下去,CPU必须具有某些手段来确定下一条指令的地址。而程序计数器正是起到这种作用,所以通常又称为指令计数器。在程序开始执行前,必须将它的起始地址,即程序的一条指令所在的内存单元地址送入PC,因此程序计数器(PC)的内容即是从内存提取的第一条指令的地址。当执行指令时,CPU将自动修改PC的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数,以便使其保持的总是将要执行的下一条指令的地址。由于大多数指令都是按顺序来执行的,所以修改的过程通常只是简单的对PC加1。
当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的地址,以此实现转移。有些机器中也称PC为指令指针IP(Instruction Pointer)

4、地址寄存器:用来保存当前CPU所访问的内存单元的地址。由于在内存和CPU之间存在着操作速度上的差别,所以必须使用地址寄存器来保持地址信息,直到内存的读/写操作完成为止 。?
当CPU和内存进行信息交换,即CPU向内存存/取数据时,或者CPU从内存中读出指令时,都要使用地址寄存器和数据缓冲寄存器。同样,如果我们把外围设备的设备地址作为像内存的地址单元那样来看待,那么,当CPU和外围设备交换信息时,我们同样使用 地址寄存器和数据缓冲寄存器

基本上定义就是区别和应用。追问

这些资料我都看过,只是还是不懂,看不错区别。能用通俗一点的解释一下吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-01-21
我给你讲些最通俗易懂的。

计算机为什么称为计算机,是因为它有计算能力。计算能力靠谁体现?当然非CPU莫属。CPU的处理频率越高,当然它的计算能力就越强。

可CPU只负责计算,谁给它数据计算呢?它计算完又把数据传给谁呢?这需要一块存储器来存放数据。最重要的也就是内存了。不过内存的存取速率没有CPU的高,干活速率不匹配。怎么可以协调工作呢?CPU一秒钟能搬100个麻袋,内存一秒钟才能搬1个。这CPU总不能在这干等着吧?

这时候就需要一个起缓冲作用的设备来解决此问题。一般我们会放一个缓存也就是Cache(有一级缓存,二级缓存)在CPU和内存中间,现在情况好了点。不过还是CPU的使用效率不太高啊,最好能找个能与CPU处理速度错不了太多了。这时,我们就引入了“寄存器”的概念。现在的计算机一般都是CPU和寄存器集成在一起。

寄存器可以分很多种,其中指令寄存器是与CPU关系最亲密的。因为CPU要执行它送来的指令。那指令寄存器的指令从哪里来拿呢?是从数据寄存器中取。这个过程只是解决了WAHT TO DO。但是HOW TO DO?CPU怎么去执行拿数据呢?指令寄存器又怎么在数据寄存器中去拿数据呢?

CPU通过PC(也就是程序计数器)去拿一组指令来执行。为什么要通过PC去拿呢? 因为这样增大了CPU的工作效率,减少了开销。这句话听起来很笼统是吧?PC其实就是一个指针。指向下一组指令的指针地址。我有了它就可以找个那一组指令在哪。每组指令都有自己的储存地址,那这一组组地址在哪存放呢?就在“地址寄存器”中存放。就像指令寄存器从数据寄存器中拿数据的道理一样,PC去“地址寄存器”中拿地址。

其实你也可以理解为一个很简单的对应关系。

CPU-->指令寄存器-->数据寄存器
↕------------↕---------------↕
CPU-->程序计数器-->地址寄存器
第2个回答  2021-06-29
为了加深初学者对51单片机指令的理解,现在把指令执行的过程在此详细说明,希望对你有启发!
1. 单片机执行程序的过程,实际上就是执行我们所编制程序的过程。即逐条指令的过程。
2. 计算机每执行一条指令都可分为三个阶段进行。即取指令-----分析指令-----执行指令。
3. 取指令的任务是:根据程序计数器PC中的值从程序存储器读出现行指令,送到指令寄存器。
程序计数器PC取指令,送给数据寄存器DR,数据寄存器送给指令寄存器IR
4. 分析指令阶段的任务是:将指令寄存器中的指令操作码取出后进行译码,分析其指令性质。
5. 如指令要求操作数,则寻找操作数地址。
计算机执行程序的过程实际上就是逐条指令地重复上述操作过程,直至遇到停机指令可循环等待指令。
一般计算机进行工作时,首先要通过外部设备把程序和数据通过输入接口电路和数据总线送入到存储器,然后逐条取出执行。但单片机中的程序一般事先我们都已通过写入器固化在片内或片外程序存储器中。因而一开机即可执行指令。
下面我们将举个实例来说明指令的执行过程:
开机时,程序计算器PC变为0000H。然后单片机在时序电路作用下自动进入执行程序过程。
执行过程实际上就是取出指令(取出存储器中事先存放的指令阶段)和执行指令(分析和执行指令)的循环过程。
例如执行指令:MOV A,#0E0H,其机器码为“74H E0H”,该指令的功能是把操作数E0H送入累加器, 0000H单元中已存放74H,0001H单元中已存放E0H。
当单片机开始运行时,首先是进入取指阶段,其次序是:
1. 程序计数器的内容(这时是0000H)送到地址寄存器;
2. 程序计数器的内容自动加1(变为0001H);
3. 地址寄存器的内容(0000H)通过内部地址总线送到存储器,以存储器中地址译码,使地址为0000H的单元被选中;
4. CPU使读控制线有效;
5. 在读命令控制下被选中存储器单元的内容(此时应为74H)送到内部数据总线上,因为是取指阶段,所以该内容通过数据总线被送到指令寄存器。
至此,取指阶段完成,进入译码分析和执行指令阶段。
由于本次进入指令寄存器中的内容是74H(操作码),以译码器译码后单片机就会知道该指令是要将一个数送到A累加器,而该数是在这个代码的下一个存储单元。
所以,执行该指令还必须把数据(E0H)从存储器中取出送到CPU,即还要在存储器中取第二个字节。
其过程与取指阶段很相似,只是此时PC已为0001H。指令译码器结合时序部件,产生74H操作码的微操作系列,使数字E0H从0001H单元取出。因为指令是要求把取得的数送到A累加器,所以取出的数字经内部数据总线进入A累加器,而不是进入指令寄存器。至此,一条指令的执行完毕。
单片机中PC="0002H",PC在CPU每次向存储器取指或取数时自动加1,单片机又进入下一取指阶段。
这一过程一直重复下去,直至收到暂停指令或循环等待指令暂停。CPU就是这样一条一条地执行指令,完成所有规定的功能。
第3个回答  2017-02-23
其实最佳答案说的差不多了,我看了他的答案补充一个:
程序计数器作用是:存放指令地址以及查找下一个指令地址,怎么查找:顺序执行简单加1,转移执行加转移量或者根据转移指令给出的转移地址进行转移。
地址寄存器作用是:存放要访问的内存单元的地址,注意一个是指令地址,一个是内存单元地址。
PS:为什么叫数据地址寄存器,不应该是地址寄存器(adress register
)吗?容易和数据缓冲寄存器(data register)搞混。
PPS:问个问题,地址寄存器和数据寄存器有没有实质性的区别?因为一个存地址,一个存指令或数据,作用都有补充速度差异?
第4个回答  2018-10-10
都说得不清楚。
我觉得PC存的是下一条指令在内存里的地址,用来取下条指令。
AR是地址缓存,所有类型的地址只要是在使用前,都得在这里存一下。包括PC里的内容。一开始取指令时,PC中的内容打入AR中,然后PC就可以+1了。然后系统根据AR中的内容去取指令。取到指令后,指令由操作码和地址码构成,地址码打入AR,然后去内存寻址……
总之就是PC是起特定作用的寄存器,内容意义明确,就是下条指令起始地址;AR是缓存,所存内容类型当然是地址,但具体意义就不确定了,所有系统用到的地址在使用前都得来过一下,包括PC。
相似回答