冯 ·诺伊曼计算机体系结构的主要内容之一就是“程序预存储,计算机自动执行”!处理器要执行的程序(指令序列)都是以二进制代码序列方式预存储在计算机的存储器中,处理器将这些代码逐条地取到处理器中再译码、执行,以完成整个程序的执行。为了保证程序能够连续地执行下去,CPU必须具有某些手段来确定下一条取指指令的地址。程序计数器(PC )正是起到这种作用,所以通常又称之为‘指令计数器’。CPU总是按照PC的指向对指令序列进行取指、译码和执行,也就是说,最终是PC 决定了程序运行流向。故而,程序计数器(PC )属于特别功能寄存器范畴,不能自由地用于存储其他运算数据。
在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入PC,CPU 按照 PC的指示从内存读取第一条指令(取指)。当执行指令时,CPU自动地修改PC 的内容,即每执行一条指令PC增加一个量,这个量等于指令所含的字节数(指令字节数),使 PC总是指向下一条将要取指的指令地址。由于大多数指令都是按顺序来执行的,所以修改PC 的过程通常只是简单的对PC 加“指令字节数”。
当程序转移时,转移指令执行的最终结果就是要改变PC的值,此PC值就是转去的目 标地址。处理器总是按照PC 指向取指、译码、执行,以此实现了程序转移。
ARM 处理器中使用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 位的数据称之为‘半字’。
ARM 处理器在对于“字”/ “半字”数据进行访问时,对数据的存储格式是有要求的。要求被访问的“半字”必须存放在存储器紧邻的两个字节单元,并且首字节地址必须能被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。
程序计数器PC详解
原创LinuxDriverDev ©著作权
©著作权归作者所有:来自51CTO博客作者LinuxDriverDev的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
排序算法之计数排序的优化
排序算法之计数排序的优化
数组 计数排序 最小值 -
C# Onnx yolov8 竹签计数、一次性筷子计数
C# Onnx yolov8 竹签计数、一次性筷子计数
Image System Text -
程序计数器(PC寄存器)
程序计数器(PC寄存器)1.PC Register 介绍2.举例说明3.两个常见问题CPU时间片
jvm 程序计数器 寄存器 时间片 其他 -
JVM内存模型:PC程序计数器
PC计数器
jvm java linux 寄存器 字节码