RISC和CISC指令集
IA32被称为复杂指令集计算机(CISC),与精简指令集计算机(RISC)相对。
从历史上看,先出现了CISC机器,计算机不断发展使指令集非常大。
RISC设计理念在80年代早期发展,使用更简单的指令集产生高效的代码。
许多加到指令集中的高级指令很难被编译器产生,并且这些指令很少被用到,一个简单的指令集可以很少的硬件实现,能以高效的流水线组织起来。
CISC和RISC比较:
(1)CISC指令数量多,Intel描述全套指令有700多页。
RISC指令数量少,通常少于100个
(2)CISC有些指令执行时间很长,包括一个整块从存储器的一个部分拷贝到另一部分的指令,以及其他一些多个寄存器的值拷贝到存储器或从存储器拷贝到多个寄存器的指令。
(3)RISC没有较长执行时间的指令。
有些早期的RISC机器没有整数乘法指令,要求编译器通过一系列加法实现乘法。
CISC编码长度可变。
RISC编码是固定长度的,所有指令编码都是4个字节。
(4)CISC指定操作数的方式多样,存储器操作数指示符可以由基址、变址或伸缩因子组成。
RISC只有简单寻址方式,通常只有基址和位移寻址。
(5)CISC可以对存储器和寄存器操作数进行算术和逻辑运算。
RISC使用load/store体系结构。
RISC只能对寄存器操作数进行算术和逻辑运算,允许使用存储器引用的只有load和store指令。
load是从存储器读到寄存器,store从寄存器写到存储器。
(6)CISC对机器级程序实现细节不可见。
RISC对机器级程序来说实现细节可见。
有些RISC机器禁止某些特殊的指令序列,而有些跳转要到下一条指令执行完后才生效,编译器必须在这些约束条件下进行性能优化。
(7)CISC有条件码,设置了一些特殊的标志位,可以用来作为条件分支检测。
RISC没有条件码,相反对条件检测来说,要用明确的测试指令,将测试结果放在一个普通的寄存器中。
(8)CISC是栈密集的过程链接,栈被用来存取过程参数和返回地址。
RISC是寄存器密集的过程链接。寄存器被用来存取过程参数和返回地址。
所以有些过程能完全避免存储器引用,通常处理器有更多的(<=32)寄存器。