1.PC中存放下一次访存的地址。
2.PC自增的确是PC+取出指令的长度。
3.PC每次自增都是固定的字长。
————————————————————————————
1.程序计数器的工作原理
大概解释一下程序计数器吧,用一个最简单的例子。
首先第一点:PC中存放的是下一步要访问的内存地址。
如图,这是一个非常非常简单的CPU模型。
一个简单到的只有五条指令In(put)、Add 、Sto(re) 、Out(put) 、JMP的微控制器。
每一条指令都由一系列状态,或者说微指令组成。
对于每一条指令,都会在开始执行两条公共的微指令01,02,
01:PC的值打入存储器地址寄存器,PC自增。
02:存储器的数据输入到总线,再流入指令寄存器。
接下来就是每个指令各自的分支路线了,然后再重头循环。
可以很清楚的看出,对于In指令之外的所有指令,
[PC->AR,PC+1] 这条微指令在整个指令执行周期中都
不止执行了一次。
所以,不是说一条取指微指令执行完之后直接让PC+指令长度,有的指令屁股后面还挂着一两个操作数呢。在取操作数的时候,这条微指令也要执行,始终保证下一次访存时,PC指向正确的位置。在这个过程中PC自增可能执行了不止一次,访存几次就执行几次。
有时候讲组织结构,为了省事,就直接说+1了。
其实我觉得说+1是有歧义的,不如换成自增....
这个自增,究竟增长了几个字节,就要看机器的字长了。
比如这里的粒度是单字节,那PC每次自增,就是后跳一字节,也就是真正的“+1”。
2.PC寄存器是不是真的存在。
程序计数器是实际存在的,别的体系我不清楚,不过x86是有的。
原来和堆栈寄存器放一起的,看,就是变了个名字嘛。