程序计数器(PC)

1.PC中存放下一次访存的地址。

2.PC自增的确是PC+取出指令的长度。

3.PC每次自增都是固定的字长。

————————————————————————————

1.程序计数器的工作原理

大概解释一下程序计数器吧,用一个最简单的例子。

首先第一点:PC中存放的是下一步要访问的内存地址。

如图,这是一个非常非常简单的CPU模型。

程序计数器(PC)_第1张图片

一个简单到的只有五条指令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是有的。

程序计数器(PC)_第2张图片程序计数器(PC)_第3张图片

原来和堆栈寄存器放一起的,看,就是变了个名字嘛。




你可能感兴趣的:(java)