标题：复杂指令集
简介
复杂指令集，也称为CISC指令集，英文名是CISC，（Complex Instruction Set Computer的缩写）。在CISC微处理器中，程序的各条指令是按顺序串行执行的，每条指令中的各个操作也是按顺序串行执行的。顺序执行的优点是控制简单，但计算机各部分的利用率不高，执行速度慢。其实它是英特尔生产的x86系列（也就是IA-32架构）CPU及其兼容CPU，如AMD、VIA的。即使是现在新起的X86-64（也被称为AMD64）都是属于CISC的范畴。[1]​
发展背景
CISC早期的计算机部件比较昂贵，主频低，运算速度慢。为了提高运算速度，人们不得不将越来越多的复杂指令加入到指令系统中，以提高计算机的处理效率，这就逐步形成复杂指令集计算机体系。为了在有限的指令长度内实现更多的指令，人们又设计了操作码扩展。然后，为了达到操作码扩展的先决条件——减少地址码，设计师又发现了各种寻址方式，如基址寻址、相对寻址等，以最大限度地压缩地址长度，为操作码留出空间。Intel公司的X86系列CPU是典型的CISC体系的结构，从最初的8086到后来的Pentium系列，每出一代新的CPU，都会有自己新的指令，而为了兼容以前的CPU平台上的软件，旧的CPU的指令集又必须保留，这就使指令的解码系统越来越复杂。CISC可以有效地减少编译代码中指令的数目，使取指操作所需要的内存访问数量达到最小化。此外CISC可以简化编译器结构，它在处理器指令集中包含了类似于程序设计语言结构的复杂指令，这些复杂指令减少了程序设计语言和机器语言之间的语义差别，而且简化了编译器的结构。
为了支持复杂指令集，CISC通常包括一个复杂的数据通路和一个微程序控制 CISC器。微程序控制器由一个微程序存储器、一个微程序计数器（MicroPC）和地址选择逻辑构成。在微程序存储器中的每一个字都表示一个控制字，并且包含了一个时钟周期内所有数据通路控制信号的值。这就意味着控制字中的每一位表示一个数据通路控制线的值。例如，它可以用于加载寄存器或者选择ALU中的一个操作。此外每个处理器指令都由一系列的控制字组成。当从内存中取出这样的一条指令时，首先把它放在指令寄存器中，然后地址选择逻辑再根据他来确定微程序存储器中相应的控制字顺序起始地址。当把该起始地址放入MicroPC中后，就从微程序内存中找到相应的控制字，并利用它在数据通路中把数据从一个寄存器传送到另一个寄存器。由于MicroPC中的地址并发递增来指向下一个控制字，因此对于序列中的每个控制器都会重复一遍这一步骤。最终，当执行完最后一个控制字时，就从内存中取出一条新的指令，整个过程会重复进行。
由此可见，控制字的数量及时钟周期的数目对于每一条指令都可以是不同的。因此在CISC中很难实现指令流水操作。另外，速度相对较慢的微程序存储器需要一个较长的时钟周期。由于指令流水和短的时钟周期都是快速执行程序的必要条件，因此CISC体系结构对于高效处理器而言不太合适的。
发展历程
在计算机指令系统的优化发展过程中，出现过两个截然不同的优化方向：CISC技术和RISC技术。CISC是指复杂指令系统计算机(Complex Instruction Set Computer)；RISC是指精简指令系统计算机(Reduced Instruction Set Computer)。这里的计算机指令系统指的是计算机的最低层的机器指令，也就是CPU能够直接识别的指令。随着计算机系统的复杂，要求计算机指令系统的构造能使计算机的整体性能更快更稳定。最初，人们采用的优化方法是通过设置一些功能复杂的指令，把一些原来由软件实现的、常用的功能改用硬件的指令系统实现，以此来提高计算机的执行速度，这种计算机系统就被称为复杂指令系统计算机，即Complex Instruction Set Computer，简称CISC。另一种优化方法是在20世纪80年代才发展起来的，其基本思想是尽量简化计算机指令功能，只保留那些功能简单、能在一个节拍内执行完成的指令，而把较复杂的功能用一段子程序来实现，这种计算机系统就被称为精简指令系统计算机．即Reduced Instruction Set Computer，简称RISC。RISC技术的精华就是通过简化计算机指令功能，使指令的平均执行周期减少，从而提高计算机的工作主频，同时大量使用通用寄存器来提高子程序执行的速度。　
从计算机诞生以来，人们一直沿用CISC指令集方式。早期的桌面软件是按CISC设计的，并一直沿用。桌面计算机流行的x86体系结构即使用CISC。微处理器（CPU）厂商一直在走CISC的发展道路，包括Intel、AMD，还有其他一些现在已经更名的厂商，如TI（德州仪器）、Cyrix以及VIA（威盛）等。在CISC微处理器中，程序的各条指令是按顺序串行执行的，每条指令中的各个操作也是按顺序串行执行的。顺序执行的优点是控制简单，但计算机各部分的利用率不高，执行速度慢。CISC架构的服务器主要以IA-32架构（IntelArchitecture,英特尔架构）为主，而且多数为中低档服务器所采用。[2]​
缺点
采用复杂指令系统的计算机有着较强的处理高级语言的能力．这对提高计算机的性能是有益的．当计算机的设计沿着这条道路发展时．有些人没有随波逐流．他们回过头去看一看过去走过的道路，开始怀疑这种传统的做法：IBM公司设在纽约Yorktown的JhomasI.Wason研究中心于1975年组织力量研究指令系统的合理性问题．因为它当时已感到，日趋庞杂的指令系统不但不易实现．而且还可能降低系统性能。1979年以帕特逊教授为首的一批科学家也开始在美国加州大学伯克利分校开展这一研究．结果表明，CISC存在许多缺点． 首先．在这种计算机中．各种指令的使用率相差悬殊：一个典型程序的运算过程所使用的80%指令．只占一个处理器指令系统的20%．事实上最频繁使用的指令是取、存和加这些最简单的指令．这样-来，长期致力于复杂指令系统的设计，实际上是在设计一种难得在实践中用得上的指令系统的处理器．　
同时．复杂的指令系统必然带来结构的复杂性．这不但增加了设计的时间与成本还容易造成设计失误．此外．尽管VLSI技术现在已达到很高的水平，但也很难把CISC的全部硬件做在一个芯片上，这也妨碍单片计算机的发展．在CISC中，许多复杂指令需要极复杂的操作，这类指令多数是某种高级语言的直接翻版，因而通用性差．由于采用二级的微码执行方式，它也降低那些被频繁调用的简单指令系统的运行速度． 因而．针对CISC的这些弊病．帕特逊等人提出了精简指令的设想即指令系统应当只包含那些使用频率很高的少量指令．并提供一些必要的指令以支持操作系统和高级语言．按照这个原则发展而成的计算机被称为精简指令集计算机(ReducedInstructionSetComputer-RISC)．简称RISC．[3]​
竞争对手RISC
RISC是简化指令集计算机的简略缩写，其风格是强调计算机结构的简单性和高效性。RISC设计是从足够的不可缺少的指令集开始的。它的速度比那些具有传统复杂指令组计算机结构的机器快得多，而且RISC机由于其较简洁的设计，较易使用，故具有更短的研制开发周期。RISC结构一般具有如下的一些特点：
①单周期的执行: 它统一用单周期指令。从根本上克服了CISC指令周期数有长有短，造成运行中偶发性不确定，致使运行失常的问题。
②采用高效的流水线操作：使指令在流水线中并行地操作，从而提高处理数据和指令的速度。
③无微代码的硬连线控制:微代码的使用会增加复杂性和每条指令的执行周期。
④指令格式的规格化和简单化：为与流水线结构相适应且提高流水线的效率，指令的格式必须趋于简单和固定的规式。比如指令采用16位或32位的固定的长度，并且指令中的操作码字段、操作数字段都尽可能具有统一的格式。此外，尽量减少寻址方式，从而使硬件逻辑部件简化且缩短译码时间，同时也提高了机器执行效率和可靠性。
⑤采用面向寄存器堆的指令：RISC结构采用大量的寄存器—— 寄存器操作指令，使指令系统更为精简。控制部件更为简化，指令执行速度大大提高。由于VLSI技术的迅速发展，使得在一个芯片上做大量的寄存器成为可能。这也促成了RISC结构的实现。
⑥采用装入/存储指令结构：在CISC结构中。大量设置存储器—— 存储器操作指令，频繁地访问内存，将会使执行速度降低。RISC结构的指令系统中，只有装入/存储指令可以访问内存，而其它指令均在寄存器之间对数据进行处理。用装入指令从内存中将数据取出，送到寄存器；在寄存器之间对数据进行快速处理，并将它暂存在那里，以便再有需要时。不必再次访问内存。在适当的时候，使用一条存储指令再将这个数据送回内存。采用这种方法可以提高指令执行的速度。[3]