Program Counter,在程序开始执行前,将程序指令序列的起始地址,即程序的第一条指令所在的内存单元地址送入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。

    CPU控制器部分有51单片机中程序计数器PC的讲解。