程序计数器寄存器是一个实际存在的寄存器吗

程序计数器(PC&)&详解
·诺伊曼计算机体系结构的主要内容之一就是“程序预存储,计算机自动执行”!处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器中,处理器将这些代码逐条地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条取指指令的地址。程序计数器(PC
)正是起到这种作用,所以通常又称之为‘指令计数器’。CPU总是按照PC的指向对指令序列进行取指、译码和执行,也就是说,最终是PC
决定了程序运行流向。故而,程序计数器(PC
)属于特别功能寄存器范畴,不能自由地用于存储其他运算数据。
在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入PC,CPU&
按照 PC的指示从内存读取第一条指令(取指)。当执行指令时,CPU自动地修改PC&
的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数(指令字节数),使
PC总是指向下一条将要取指的指令地址。由于大多数指令都是按顺序来执行的,所以修改PC
的过程通常只是简单的对PC 加“指令字节数”。
当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的目
标地址。处理器总是按照PC
指向取指、译码、执行,以此实现了程序转移。&
处理器中使用R15 作为PC,它总是指向取指单元,并且ARM 处理器中只有一个PC
寄存器,被各模式共用。R15 有32 位宽度(下述标记为R15[31:0],表示R15
的‘第31位’到‘第0位'),ARM 处理器可以直接寻址4GB 的地址空间(2^32 = 4G
(解释什么是字对齐什么是半字对齐)存储器是计算机中用于记忆数据信息的电子装置,它通过记忆“高/低”电平记忆“1/0”能记忆 1
位“1/0”数据的电子单元,称之为存储元,计算机中的存储器通常将每8
个这样的存储元组成一个单元,称之为字节,字节是处理器访问存储器的最小单位。ARM
处理器对存储器空间的访问分辨率以字节为最小单位;ARM 处理器还支持 16bit 数据(2 字节)的存储器访问和 32bit数据(4
子节)的存储器访问。在ARM 中将32 位的数据称之为‘字’,将 16 位的数据称之为‘半字’。
处理器在对于“字”/&“半字”数据进行访问时,对数据的存储格式是有要求的。要求被访问的“半字”必须存放在存储器紧邻的两个字节单元,并且首字节地址必须能被2整除,这样存储的
16bit 数据称为 ‘半字对齐’存储数据,16bit 数据这样的存储方式称为 ‘半字对齐’存储。类似的,ARM
处理器在进“字”数据访问时,要求被访问的“字”必须 存放在存储器紧邻的4 个字节单元,并且首字节地址必须能被4
整除,这样存储的32bit 数 据称为‘字对齐’存储数据,32bit
数据这样的存储方式称为‘字对齐’存储。&
能被2 整除数据的二进制表示,其最低位一定是‘0’;能被4 整除数据的二进制表示,
其最低两位一定是‘00’。ARM 体系要求32 位长的ARM 指令在存储器中必须字对齐存储,
16 位长的 Thumb 指令必须半字对齐存储。因此,在ARM
状态下,R15& 的值总是能被4 整
除,也就是R15 寄存器的最低2 位总是 0;Thumb 状态下,R15 的值总是能被2 整除,也就是R15
寄存器的最低位总是0。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。查看: 11296|回复: 7
程序计数器PC是控制器还是存储器?
主题帖子积分
王道论坛初级道友, 积分 126, 距离下一级还需 74 积分
王道论坛初级道友, 积分 126, 距离下一级还需 74 积分
报考学校BUAA
本科学校BJTU
唐书的学习指导与习题解答264页第16题
程序计数器PC属于
A运算器 B控制器 C存储器
参考答案是B
PC是寄存器确定的,寄存器应该也是存储器啊。为什么选B
主题帖子积分
王道论坛实习道友, 积分 5, 距离下一级还需 15 积分
王道论坛实习道友, 积分 5, 距离下一级还需 15 积分
报考学校浙江大学
本科学校东北大学
寄存器和存储器的概念是不同的,寄存器位于cpu内部,存储器一般是独立与cpu外面的,pc是控制器的一部分,所以是控制器
主题帖子积分
王道论坛实习道友, 积分 5, 距离下一级还需 15 积分
王道论坛实习道友, 积分 5, 距离下一级还需 15 积分
报考学校浙江大学
本科学校东北大学
ps:楼主的头像是一户吧,嘿嘿我喜欢..
主题帖子积分
王道论坛高级道友, 积分 1943, 距离下一级还需 1057 积分
王道论坛高级道友, 积分 1943, 距离下一级还需 1057 积分
考研年份123
报考学校北京社会管理职业学院
本科学校北京社会管理职业学院
这个题目好象有点歧义:
第一种:题目可以问你程序控制器是在哪个部件里面,那就是在控制器里面!
第二种:题目问你PC是哪一类部件,我觉得还是控制器,因为他能控制程序的顺序执行,PC确实可以存储下一条将要执行的指令的地址,但是PC最初发明出来是为了减少指令地址码的位数!因为以前的下一条将要执行的指令的地址码是用
指令的地址码的后几位来给出的,来控制程序的运行,而现在由PC来执行!总的来说,PC是属于控制器范围的!
主题帖子积分
王道论坛初级道友, 积分 126, 距离下一级还需 74 积分
王道论坛初级道友, 积分 126, 距离下一级还需 74 积分
报考学校BUAA
本科学校BJTU
原帖由 seaok 于
22:34 发表
寄存器和存储器的概念是不同的,寄存器位于cpu内部,存储器一般是独立与cpu外面的,pc是控制器的一部分,所以是控制器
好,白书P153说了,控制器由计数器、指令寄存器等组成。所以PC是控制器的一部分能够理解。
但我还是觉得寄存器也应该属于存储器,唐书P71有这个图
是存储器速度、容量和低格的关系。显然寄存器也属于存储器的。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
主题帖子积分
王道论坛实习道友, 积分 19, 距离下一级还需 1 积分
王道论坛实习道友, 积分 19, 距离下一级还需 1 积分
报考学校null
本科学校null
PC的作用就是控制下一指令的位置,包括控制跳转,简单而言就是控制作用,所以选控制应该没错的。
主题帖子积分
王道论坛专家, 积分 4031, 距离下一级还需 969 积分
王道论坛专家, 积分 4031, 距离下一级还需 969 积分
报考学校北航
本科学校某某三流大学
PC的功能主要是用于控制,但其具有存储性能。
坚定自己对计算机科学的信念,向前走吧!慢慢走!坚持!
主题帖子积分
王道论坛新道友, 积分 0, 距离下一级还需 1 积分
王道论坛新道友, 积分 0, 距离下一级还需 1 积分
报考学校待定
本科学校Besti
题确实有歧义。。。。
不过相比于存储器。。。控制器显然更好,因为从功能结构上看,PC确实是在控制器中。。具体实现接口上,各种机器差别很大,所以我觉得这种题以功能结构上看比较好。。因为貌似在深入理解那本书上说的,PC只是一种控制信号,实现方式可能涉及到很多寄存器,并不是只是一个有寄存器那么简单。。。
|||王道论坛程序是如何跑起来的(1) - 简书
程序是如何跑起来的(1)
对于程序员来说 CPU 意味着什么
本文全部来自于学习 程序是怎么跑起来的 一书,想要深入学习,请购买正版图书,支持作者
程序是指示计算机每一步动作的一组指令,由指令和数据组成,只有机器语言能够直接被 cpu 所识别,程序运行在内存中,在内存中,用于表示命名和数据存储位置的数值称为内存地址。例如 printf("你好"),这个代码中 printf 是指令,你好是数据。磁盘和硬盘等媒介上保存的程序只有被复制到内存后才能够运行。
什么是 CPU
CPU 的功能和组成
CPU 控制整个程序的执行,具有以下基本功能:
程序控制: 程序控制就是控制指令的执行顺序。程序是指令有序集合,这些指令的相互顺序不能任意颠倒,必须严格按照程序规定的顺序执行。保证计算机按一定顺序执行程序是 CPU 的首要任务。
操作控制: 操作控制就是控制指令进行操作,一条指令的功能往往由若干个操作信号的组合实现,因此, CPU *管理并产生每条指令的操作信息,把各种操作型号送往相应的部件,从而控制这些部件按指令的要求进行操作。
时间控制:时间控制就是对各种操作实施定时控制,各种指令的操作信号和指令的整个执行过程都受到严格定时,只有这样,计算机才能有条不紊地工作。
数据加工: 数据加工就是对数据进行算术和逻辑运算,完成数据的加工处理,是 CPU 的根本任务。
CPU 所负责的就是解释和运行最终转换成机器语言的程序内容。CPU 的内部由寄存器,控制器,运算器和时钟四个部分构成,各部分由电流信号相互连通。
寄存器可以用来暂存指令,数据等处理对象可以将其看作是内存的一种。
控制器负责把内存上的指令,数据读入寄存器,并根据指令的执行结果来控制整个计算机。
运算器 负责运算从内存读入寄存器的数据。
时钟 负责发出 CPU开始计时的时钟信号。
主存,通过控制芯片等与 CPU 相连,主要负责存储指令和数据,主存由可读写的元素组成,每个字节(1字节=8位)都带有有一个地址编号。CPU 可以通过该地址读取主存中的指令和数据,当然也可以写入数据,需要注意的是:主存中存储的指令和数据会随着计算机的关机而自动清除。
程序启动后,根据时钟信号,控制器会从内存中读取指令和数据,通过对这些指令加以解释和运算,控制器根据该运算结果来控制计算机。
CPU 是寄存器的集合体
CPU 的四个构成部分中,程序员基本上只需要了解寄存器即可,因为程序是把寄存器作为对象来描述的。汇编语言,每一个原本是电气信号的机器语言指令都会有一个与其相应的助记符(mov,add等)。
mov eax, dword ptr [ebp-8] ... 把数值从内存复制到 eax
add eax, dword ptr [ebp-0Ch] ... exa 的数值和内存的数值相加
mov dword ptr [ebp-4], exa
... 把 exa 的数值存储在内存中
机器语言级别的程序是通过寄存器来处理的,也就是说,在程序员看来 "CPU 是寄存器的集合体",上述代码中,exa 和 ebp 表示的都是寄存器,内存的存储场所通过地址编号来区分,而寄存器的种类则通过名字来区分。
根据功能的不同,大致可以将寄存器分成八类:
累加寄存器: 存储执行运算的数据和运算后的数据
标志寄存器: 存储运算处理后的 CPU 的状态
程序计数器: 存储下一条指令所在内存的地址
基址寄存器: 存储数据内存的起始地址
变址寄存器: 存储基址寄存器的相对位置
通用寄存器: 存储任意数据
指令寄存器: 存储指令,CPU 内部使用,程序员无法通过程序对该寄存器进行读写操作
存储栈区域的起始地址
其中,程序计数器,累加寄存器,标志寄存器,指令寄存器和栈寄存器都只有一个,其他寄存器一般有多个。
数据寄存器
数据寄存器(DR) 又被称为数据缓冲寄存器,主要功能是作为 CPU 和主存,外设之间信息传输的中转站,用以弥补 CPU 和贮存,外设之间操作速度上的差异。数据寄存器用来暂时存放由主存储器读出的一条指令或一个数据字,反之,当向主存存入一条指令或一个数据字时,也将他们暂时存放在数据寄存器中。作用: 作为弥补 CPU 和主存,外围设备之间信息传送的中转站,弥补 CPU 和主存,外围设备之间在操作速度上的差异,在单累加结构的运算器中,数据寄存器还可以兼做操作数寄存器。
指令寄存器
指令寄存器 (IR) 用来保存当前正在执行的一条指令。当执行一条指令时,首先把该指令从主存读取到数据寄存器中,然后再传送至指令寄存器,指令包括操作码和地址两个字段,为了执行指令,必须对操作码进行测试,识别出所要求的操作,指令编码码就是完成这项工作的,指令编译码对指令寄存器的操作码进行译码,以产生所要求操作的控制电位,并将其送到微操作控制线上,在时序部件定时信号的作用下,产生具体的操作控制信号。
程序计数器
程序计数器 (PC) 用来指出下一条指令在主存储器中的地址。在程序执行之前,首先必须将程序的首地址,即程序第一条指令所在主存单元的地址送入 PC,因此 PC 的内容即是从主存提取的第一条指令的地址。当执行指令时,CPU 能自动递增 PC 的内容,使其始终保存将要执行的下一条指令的主存地址,为取下一条指令做好准备,若为单字长指令,但是,当遇到转移指令时,下一条指令的地址将由转移指令的地址码字段来指定,而不是像通畅的那样通过顺序递增 PC 的内容取得。
地址寄存器
地址寄存器用来保存 CPU 当前所访问的主存单元的地址。由于在主存和 CPU 之间存在操作速度上的差异,所以必须使用地址寄存器来暂时保存主存的地址信息,直到主存的存取操作完成为止,当 CPU 和主存进行信息交换,即 CPU 向贮存存入数据/指令或者从主存读出数据/指令时,都要使用地址寄存器和数据寄存器
累加寄存器
累加寄存器是一个通用寄存器,累加器的功能是: 当运算器的算术逻辑单元 ALU 执行算术或逻辑运算时,为 ALU 提供一个工作区,可以为 ALU 暂时保存一个操作数或运算结果。
CPU 的工作过程
CPU 的基本工作是执行预先存储的指令序列,程序的执行过程实际上是不断地取出指令,分析指令,执行指令的过程.
CPU 从存放程序的主存储器里取出一条指令,译码并执行这条指令,保存执行结果,紧接着又去取指令,译码,执行指令。
取指令阶段: 取指令阶段是将一条指令从主存中取到指令寄存器的过程。程序计数器 PC 中的数值,用来指示当前指令在主存中的位置,当一条指令被取出后,PC 中的数值将根据指令字长度而自动递增。
指令译码阶段: 取出指令后,计算机立即进入指令译码阶段.指令译码器对不同的指令操作码产生不同的控制电位,以形成不同的指令类别。
执行指令阶段:在取指令和指令译码阶段之后,接着进入执行指令阶段.此阶段的的任务是完成指令所规定的各种操作,具体实现指令的功能,为此, CPU 的不同部分被连接起来,以执行所需的操作。
访存取数阶段:根据指令需要,有可能访问主存,读取操作数,这样就进入访存取数阶段。
结果写回阶段: 将执行完的数据写回到某种存储形式,
决定程序流程的程序计数器
下面来看一下程序是如何按照流程来运行的?
用户发出启动程序的指示后,操作系统会把硬盘中保存的程序复制到内存中,存储指令和数据的内存,是通过地址来划分的,实际上,一个命令和数据通常被存储在多个地址上,为了方便解释,下面就将指令和数据分配到一个地址中.
条件分支和循环机制
程序的流程分为 顺序执行,条件分支和循环三种,顺序执行是指按照地址内容的顺序执行指令,条件分支是指田间执行任意地址的指令,循环是指重复执行同一地址的指令,顺序执行的情况比较简单,每执行一个指令程序计数器的值就自动加1,但若程序中存在分支和循环,机器语言的指令就可以将程序计数器的值设定为任意地址,这样一来,程序可以返回到上一个地址来重复执行同一个指令,或者跳转到任意地址。
函数的调用机制
函数调用出来也是通过把程序计数器的值设定成函数的存储地址来实现的,因为单纯的跳转指令无法实现函数的调用,函数的调用需要在完成函数内部的处理后,处理流程再返回到函数调用点,机器语言的 call 指令和 return 指令能够解决这个问题,函数调用使用的是 call 指令,而不是跳转指令。在将函数的入口地址设定到程序计数器之前,call 指令会把调用函数后要执行的指令地址存储在名为栈的主存内,函数处理完毕后,再通过函数的出口来执行 return 命令,return 命令的功能是把保存在栈中的地址设定到程序计数器中。
通过地址和索引实现数组
使用基址寄存器和变址寄存器,可以对主内存上特定的内存区域进行划分,从而实现类似于数组的操作。

我要回帖

更多关于 集成计数器及寄存器 的文章

 

随机推荐