指令解码:(Decode)由于
X86指令的长度不一致,必须用一个单元进行“翻译”,真正的内核按翻译后要求来工作。
CPU的主要运作原理,不论其外观,都是执行储存于被称为程式里的一系列指令。在此讨论的是遵循普遍的
架构设计的装置。程式以一系列数字储存在电脑
记忆体中。差不多所有的
CPU的运作原理可分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。
第一阶段,提取,从程式
记忆体中检索指令(为数值或一系列数值)。由程式计数器(Program Counter)指定程式
记忆体的位置,程式计数器保存供识别程式位置的数值。换言之,程式计数器记录了CPU在程式里的踪迹。
提取指令之后,程式计数器根据指令式长度增加
记忆体单元。指令的提取常常必须从相对较慢的
记忆体寻找,导致CPU等候指令的送入。这个问题主要被论及在现代
处理器的快取和管线化架构(见下)。
CPU根据从
记忆体提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片断。根据CPU的
指令集架构(ISA)定义将数值解译为指令。
一部分的指令数值为运算码(Opcode),其指示要进行哪些运算。其它的数值通常供给指令必要的资讯,诸如一个
加法(Addition)运算的运算目标。这样的运算目标也许提供一个常数值(即立即值),或是一个空间的定址值:
暂存器或记忆体位址,以定址模式决定。
在旧的设计中,CPU里的
指令解码部分是无法改变的硬体装置。不过在众多抽象且复杂的CPU和
指令集架构中,一个微程式时常用来帮助转换指令为各种形态的讯号。这些微程式在已成品的CPU中往往可以重写,方便变更解码指令。
例如,要求一个
加法运算,算数
逻辑单元(ALU,Arithmetic Logic Unit)将会连接到一组输入和一组输出。输入提供了要相加的数值,而且在输出将含有总和结果。ALU内含电路系统,以于输出端完成简单的普通运算和
逻辑运算(比如
加法和位元运算)。如果
加法运算产生一个对该CPU处理而言过大的
结果,在标志
暂存器里,运算溢出(Arithmetic Overflow)标志可能会被设置(参见以下的数值精度探讨)。
最终阶段,写回,以一定
格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的
暂存器,以供随后指令快速存取。在其它案例中,运算结果可能写进速度较慢,但
容量较大且较便宜的主
记忆体。某些类型的指令会操作程式计数器,而不直接产生结果资料。这些一般称作“跳转”(Jumps)并在程式中带来循环行为、条件性执行(透过条件跳转)和函式。
许多指令也会改变标志
暂存器的状态位元。这些标志可用来影响程式行为,缘由于它们时常显出各种运算结果。
例如,以一个“比较”指令判断两个值的大小,根据比较结果在标志
暂存器上设置一个数值。这个标志可藉由随后的跳转指令来决定程式动向。
在执行指令并写回结果资料之后,程式计数器的值会递增,反覆整个过程,下一个
指令周期正常的提取下一个顺序指令。如果完成的是跳转指令,程式计数器将会修改成跳转到的指令位址,且程式继续正常执行。许多复杂的CPU可以一次提取多个指令、解码,并且同时执行。这个部分一般涉及“经典RISC管线”,那些实际上是在众多使用简单CPU的电子装置中快速普及(常称为微控制(Microcontrollers))。