4 处理器体系结构

处理器执行一系列指令,指令被编码为一个或多个字节序列组成的二进制格式。一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构(Instruction-Set Architecture, ISA)。

指令集分为精简指令集(reduced instruction set computing, RISC)和复杂指令集(complex instruction set computing, CISC)。

ARM v.s. x86

ARM属于精简指令集架构,x86属于复杂指令集架构。核心区别是ARM指令只能操作寄存器,少数指令能够从内存中加载/保存数据;而x86指令能够直接操作内存。

一条指令,对于处理器来说,他会有以下操作:

  1. 取指(fetch):取指阶段从内存读取指令字节,地址为程序计数器的值。从指令中抽取出指令指示符字节的两个部分,称为icode(指令代码)和ifun(指令功能)。它可能取出一个寄存器指示符字节,指明一个或两个寄存器操作数指示符rA和rB。它还可能取出一个四字节常数字valC。它按顺序方式计算当前指令的下一条指令的地址valP。也就是说,valP等于PC的值加上已取出指令的长度。
  2. 译码(decode):译码阶段从寄存器文件读入最多两个操作数,得到值valA和valB。通常,它读入指令rA和rB字段指明的寄存器,不过有些指令是寄存器%esp的。
  3. 执行(execute):在执行阶段,算术/逻辑单元(ALU)要么执行指令指明的操作(根据ifun的值),计算内存引用的有效地址,要么增加或减少栈指针。得到的值我们称为valE。在此,也可能设置条件码。对一条条件传送指令来说,这个阶段会检验天骄码和传送条件(由ifun给出),如果条件成立,则更新目标寄存器。同样,对一条跳转指令来说,这个阶段会决定是不是应该选择分支。
  4. 访存(memory):访存阶段可以将数据写入内存,或者从内存读出数据。读出的值为valM。
  5. 写回(write back):写回阶段最多可以写两个结果到寄存器文件。
  6. 更新PC(PC update):将PC设置成下一条指令的地址。

详见计算机组成与设计