程序太大而无法存储在 CPU 中,因此将它们存储在内存中。因此,程序中的每条机器代码指令都有一个内存地址/内存位置。
处理器是指令的解释器:它连续地处理一条又一条指令。我们可以将其视为执行指令流,这就是程序的本质(当然过于简单化了,因为程序既有代码又有数据)。
程序计数器是控制执行顺序的基本设备——它是一个指针大小的寄存器,用于保存机器代码指令的地址。它决定了处理器执行的指令流:大多数指令将程序计数器提前自己的大小,这样在一条指令执行后,处理器将自动执行内存中的下一条连续指令。
程序与程序计数器交互。循环通常将程序计数器向后移动(朝向较低的内存地址),以重复一些已经执行的代码(但具有不同的状态,这样循环有一些目的/最终目标)。条件语句,如 if-then-else 与程序计数器交互以向前跳过,即跳过 then 部分(以执行 else 部分),或者跳过 else 部分(在执行 then 部分之后) .
为了正确控制指令流,处理器上有两种分支:有条件的和无条件的。
if-then-else 语句分解如下
...
if ( condition )
then-part
else
else-part
...
...
if ( ! condition ) goto else1; // skip ahead to the else when condition is false
then-part
goto endOfIf1; // skip over the else part, since we just ran the then part
else1: // where to go when the condition is false
else-part
endOfIf1: // where to go when the if statement has concluded
// regardless of whether the then or the else fired..
...
if () goto ... 构造是一个条件分支,几乎所有处理器都具有将其作为机器代码指令执行此操作的能力。
goto ...(没有前面的if)是一个无条件分支,几乎所有处理器都可以这样做。
分支通常可以后退或前进,它们被放入代码序列中以控制流程,告诉处理器重复某些代码或向前跳过。
在intel世界中,程序计数器称为指令指针,这与非intel世界中的程序计数器概念相同。