为了提高运算速度,人们不得不将越来越多的复杂指令加入 到指令系统中,以提高计算机的处理效率,这就逐步形成复杂指令集计算机体系。为了在有限的指令长度内实现更多 的指令,人们又设计了操作码扩展。然后,为了达到操作码扩展的先决条件——减少地址码,设计师又发现了各种寻 址方式,如基址寻址、相对寻址等,以最大限度地压缩地址长度,为操作码留出空间。Intel 公司的 X86 系列 CPU 是 典型的 CISC 体系的结构,从最初的 8086 到后来的 Pentium 系列,每出一代新的 CPU,都会有自己新的指令,而为 了兼容以前的 CPU 平台上的软件,旧的 CPU 的指令集又必须保留,这就使指令的解码系统越来越复杂。CISC 可以 有效地减少编译代码中指令的数目, 使取指操作所需要的内存访问数量达到最小化。 此外 CISC 可以简化编译器结构, 它在处理器指令集中包含了类似于程序设计语言结构的复杂指令, 这些复杂指令减少了程序设计语言和机器语言之间 的语义差别,而且简化了编译器的结构。 为了支持复杂指令集,CISC 通常包括一个复杂的数据通路和一个微程序控制器。如图 1-5 所示。微程序控制器 由一个微程序存储器、一个微程序计数器(MicroPC)和地址选择逻辑构成。在微程序存储器中的每一个字都表示一 个控制字, 并且包含了一个时钟周期内所有数据通路控制信号的值。 这就意味着控制字中的每一位表示一个数据通路 控制线的值。例如,它可以用于加载寄存器或者选择 ALU 中的一个操作。此外每个处理器指令都由一系列的控制字 组成。当从内存中取出这样的一条指令时,首先把它放在指令寄存器中,然后地址选择逻辑再根据他来确定微程序存 储器中相应的控制字顺序起始地址。当把该起始地址放入 MicroPC 中后,九重微程序内存中找到相应的控制字,并 利用它在数据通路中把数据从一个寄存器传送到另一个寄存器。由于 MicroPC 中的地址并发递增来指向下一个控制 字,因此对于序列中的每个控制器都会重复一遍这一步骤。最终,当执行完最后一个控制字时,就从内存中取出一条 新的指令,整个过程会重复进行。 由此可见,控制字的数量及时钟周期的数目对于每一条指令都可以是不同的。因此在 CISC 中很难实现指令流水 操作。另外,速度相对较慢的微程序存储器需要一个较长的时钟周期。由于指令流水和短的时钟周期都是快速执行程 序的必要条件,因此 CISC 体系结构对于高效处理器而言不太合适的。 CISC 体系结构的计算机存在以下一些问题 (1)指令的 2/8 规律 CISC 计算机系统中,各种指令的使用频率相差悬殊。大量的统计数字表明,大概有 20%的比较简单的指令被反 复使用,使用量约占整个程序的 80%;而有 80%左右的指令则很少使用,其使用量约占整个程序的 20%。 VLSI 制造工艺要求 CPU 控制逻辑的规整性 进入 20 世纪 80 年代后,VLSI 技术的发展非常迅速,往往每 3 到 4 年集成度就提高了一个数量级。VLSI 工艺要 求规整性,而 CISC 处理器中,为了实现大量复杂的指令,控制逻辑极不规整,给 VLSI 工艺造成很大困难。 此外,以 CISC 处理器中,大量使用微程序技术以实现复杂的指令系统。20 世纪 70 年代之前一般采用磁芯做主 存储器,采用半导体做控制存储器,两者的速度相差 5~10 倍。从 70 年代后期开始,大量使用 DRAM(动态随机存 储器) 做主存储器, 使主存与控制存储器的速度相当, 从而使许多简单指令没有必要用微程序来实现。 而复杂的指令, 用微程序实现和简单指令组成的子程序实现已经没有多大区别。 软硬件的功能划分 在 CISC 中,为了支持目标程序的优化,支持高级语言和编译程序,增加了许多复杂的指令,用一条指令来替代 一串指令。这些复杂指令简化目标程序,缩小了高级语言与机器指令之间的语义差距。但是,增加了这些复杂指令并 不等于缩短了程序的执行时间。 为了实现复杂的指令,不仅增加了硬件的复杂程序,而且使指令的执行周期大大加长。例如,为了支持编译程序 的对称性要求,一般的运算型指令都能直接访问主存储器,从而使指令的执行周期数增加,数据的重复利用率降低。 据统计,一般 CISC 处理器的指令平均执行周期都在 4 以上,有些在 10 以上,如 Intel 公司的 8088 等。 这里有一个软件与硬件的功能如何恰当分配的问题。在 CISC 中,通过增强指令系统的功能,简化了软件,增加 了硬件的复杂程度。 然而, 由于指令复杂了, 指令的执行时间必然加长, 从而有可能使整个程序的执行时间反而增加, 因此,在计算机体系结构设计中,软硬件功能划分必须核实。 RISC 和 CISC 是目前设计制造微处理器的两种典型技术,虽然它们都是试图在体系结构、操作运行、软件硬件、编译时间和运行时 间等诸多因素中做出某种平衡,以求达到高效 的目的,但采用的方法不同,因此,在很多方面差异很大,它们主要有: (1) 指令系统:RISC 设计者把主要精力放在那些经常使用的指令上,尽量使它们具有简单高效的特色。对不 常用的功能,常通过组合指令来完成。因此,在 RISC 机器上实现特殊功能时,效率可能较低。但可以利用流水技术和超标量技术加以改进和弥补。而 CISC 计算机的指令系统比较丰富,有专用指令来完成特定的功能。因此,处理特殊任务效率较高。 (2) 存储器操作:RISC 对存储器操作有限制,使控制简单化;而 CISC 机器的存储器操作指令多,操作直接。 (3) 程序:RISC 汇编语言程序一般需要较大的内存空间,实现特殊功能时程序复杂,不易设计;而 CISC 汇编语言程序编程相对简单,科学计算及复杂操作的程序社设计相对容易,效率较高。 (4) 中断:RISC 机器在一条指令执行的适当地方可以响应中断;而 CISC 机器是在一条指令执行结束后响应 中断。 (5) CPU:RISC CPU 包含有较少的单元电路,因而面积小、功耗低;而 CISC CPU 包含有丰富的电路单元, 因而功能强、面积大、功耗大。 (6) 设计周期:RISC 微处理器结构简单,布局紧凑,设计周期短,且易于采用最新技术;CISC 微处理器结 构复杂,设计周期长。 (7) 用户使用:RISC 微处理器结构简单,指令规整,性能容易把握,易学易用;CISC 微处理器结构复杂, 功能强大,实现特殊功能容易。 (8) 应用范围: 由于 RISC 指令系统的确定与特定的应用领域有关, RISC 机器更适合于专用机; CISC 机 故 而 器则更适合于通用机。 SPARC SPARC:SPARC,全称为“可扩充处理器架构” (Scalable Processor ARChitecture) ,是 RISC 微处理器架构之一。它 最早于 1985 年由升阳电脑所设计,也是 SPARC 国际公司的注册商标之一。这家公司于 1989 年成立,其目的是向外 界推广 SPARC,以及为该架构进行符合性测试。此外该公司为了扩阔 SPARC 设计的生态系统,SPARC 国际也把标 准开放,并授权予多间生产商采用,包括德州仪器、Cypress 半导体、富士通等。由于 SPARC 架构也对外完全开放, 因此也出现了完全开放原始码的 LEON 处理器,这款处理器以 VHDL 语言写成,并采用 LGPL 授权。 1987 年, SUN 和 TI 公司合作开发了 RISC 微处理器——SPARC。 SPARC 微处理器最突出的特点就是它的可扩展 性, 这是业界出现的第一款有可扩展性功能的微处理器。 SPARC 的推出为 SUN 赢得了高端微处理器市场的领先地位。 1999 年 6 月,UltraSPARC III 首次亮相。它采用先进的 0.18 微米工艺制造,全部采用 64 位结构和 VIS 指令集,时钟频率从 600MHz 起,可用 于高达 1000 个处理器协同工作的系统上。