0%

ISA Introduction

介绍一下X86、MIPS、ARM三种指令集:

X86指令集

X86指令集是典型的CISC(Complex Instruction Set Computer)指令集。
X86指令集外部看起来是CISC指令集,事实上,它是采用类RISC内核,将部分复杂指令通过micro-op模式进行翻译成简单指令,再处理。
X86指令集的几个特性

  • 后向兼容
    Intel每推出一代新处理器,总会兼容以前处理器的feature。这是由于长期积累的用户习惯和生态环境不容更改,否则没法赚钱了~
    后向兼容导致指令集愈发庞大、愈发复杂,同时功耗也会比较大,不过由于Intel超高的工艺水平,这都不是事。
  • 变长指令
    X86指令集采用变长指令(1-15Bytes),一般每条指令为2-3Bytes。这样可以提高码字的利用率,但也使得译码以及读取指令时比较复杂,因为不知道一条指令应该读多长。
  • 多种寻址方式
    X86指令集可以采用多种寻址方式,比如立即寻址、寄存器寻址、寄存器相对寻址......
  • 通用寄存器个数有限
    X86-32的系统有8个通用寄存器,之后X86-64系统扩展到了16个。
  • 指令执行时,最多只能有一个操作数在内存里,另一个操作数必为立即数或者寄存器。
  • 由于后向兼容以及类RISC内核,导致功耗增加;同时,有很多复杂的指令利用率很低。

MIPS指令集

MIPS指令集是典型的RISC(Reduced Instruction Set Computer)指令集。
精简指令集系统的设计思想就是:把复杂指令集中一些不常用的指令踢出指令集,这些复杂指令由日益强大的软件技术(编译)去实现,这样使得每个指令的流水线分段比较均匀,充分利用了处理器的流水线结构,提高了主频。
MIPS指令集以32个寄存器为中心,只能通过Load/Store指令访问内存,其余涉及计算的指令都从寄存器堆中读取数据,并且将计算结果写入寄存器堆中。
另外,MIPS指令的格式比较规整,所有指令长度一致,指令操作码都在固定的位置;寻址方式、对于每条指令的操作都很简单。
那么CISC与RISC的区别是什么呢?
最大的区别在于:RISC只能通过Load/Store指令访问内存,而CISC指令集则没有这个限制。

ARM指令集

ARM指令集属于RISC指令集,每条指令32位。
ARM也有16位的压缩指令集,这是为了避免32位出现的码字浪费,提高运行速度推出的。

  • ARM指令由于属于RISC指令集,一般完成的操作比较简单。程序员可以通过多条简单的指令组合实现一个复杂的操作。
  • 同样的,ARM指令集也是只能通过Load/Store指令读取内存中的数据到寄存器,其余的指令只能对寄存器的操作数进行处理。
  • 大多数指令长度相同,字段位置(尤其是操作码的位置)固定,且具有“条件执行”模式。