CPU架构与指令集
CPU即中央处理单元(Central Processing Unit),其作用是从内存中读取指令,然后进行解码和执行。CPU架构就是CPU的内部设计和结构,也叫做微架构(Microarchitecture),由一堆硬件电路组成,用于实现指令集所规定的操作或者运算。
指令集架构(Instruction Set Architecture,ISA)简称指令集,包含了一系列的操作码(opcode),以及由特定CPU执行的基本命令。指令集在CPU中的实现称为微架构,要想设计CPU,首先得决定使用什么用的指令集,然后才是设计硬件电路。
指令集架构
指令集架构有两个CISC(复杂指令集计算机)和RISC(精简指令集计算机)
将两者进行对比,我们选择x86和ARM处理器,分别从指令集、寄存器和寻址方式等方面来进行对比。大多数RISC的指令长度是固定的,对于32位的ARM处理器,所有指令都是4个字节,即32位;而CISC的指令长度是不固定的,通常在1到6个字节之间。固定长度的指令有理由解码和优化,可以实现流水线(pipeline),缺点则是平均代码长度更大,会占用更多的存储空间。
从逆向工程的角度来看,指令长度不固定会造成更大的麻烦:因为同一段操作码,从不同的地方开始反汇编,可能会出现不同的结果,即指令错位。
CISC可能为某个特定的操作专门设计一条指令,而RISC则需要组合多条指令来完成该操作。例如x86处理器有专门的出入栈指令pop、push指令,而ARM处理器则需要通过load/store以及add等多条指令才能完成。
对于寻址方式,由于ARM采用了load/store架构,处理器的运算指令在执行过程中只能处理立即数,或者寄存器中的数据,而不能访问内存。因此,存储器和寄存器之间的数据交互,由专门的load(加载)和store(回存)指令负责。相反,x86既能处理寄存器中的数据,也能处理存储器中的数据,因此寻址方式也更多样。