文章目录
1. 指令集
2. CISC(复杂指令集计算)
3. RISC(精简指令集计算)
4. RISC的设计初衷
5. CISC和RISC流程对比
CISC(复杂指令集计算)的实现
RISC(精简指令集计算)的实现
比较与总结
6. CISC与RISC指令对比
7. RISC-V
1. 指令集
指令集(Instruction Set)是计算机处理器(CPU)能够识别和执行的所有指令的集合。它是计算机体系结构的一个关键组成部分,定义了处理器如何执行软件指令,并与计算机硬件进行交互。指令集包括各种操作码(Opcode),每个操作码对应一种特定的操作,如数据传输、算术运算、逻辑运算、控制流等。
基本组成: 一个指令集通常包括以下几个部分:
-
操作码(Opcode):
- 操作码是指令的核心部分,指定了要执行的操作类型(如加法、减法、数据加载等)。
- 例如,
ADD
操作码表示加法操作,MOV
操作码表示数据传输操作。
-
操作数(Operands):
- 操作数是指令中指定的数据或地址,可以是立即数、寄存器、内存地址等。
- 例如,在
ADD R1, R2
指令中,R1
和R2
是操作数,表示要相加的寄存器。
-
寻址模式(Addressing Modes):
- 寻址模式定义了如何解释和访问操作数。
- 常见的寻址模式包括立即寻址、寄存器寻址、直接寻址、间接寻址、变址寻址等。
- 例如,在直接寻址模式中,操作数是一个内存地址;在寄存器寻址模式中,操作数是一个寄存器。
-
指令格式(Instruction Format):
- 指令格式是指令集的结构,包括操作码和操作数的排列方式。
- 不同的指令集架构(ISA)可能采用不同的指令格式,指令长度可以是固定的或可变的。
CISC(Complex Instruction Set Computers,复杂指令集计算集)和RISC(Reduced Instruction Set Computers,精减指令集计算集)是两大类主流的CPU指令集类型。
2. CISC(复杂指令集计算)
代表:Intel、AMD的x86 CPU
特点:
- 复杂指令集:CISC处理器的指令集包含大量复杂的指令,每条指令可以执行多个低级操作(如内存访问、算术运算等)。
- 可变指令长度:CISC指令的长度不固定,可以根据具体操作的需要变化。
- 多种寻址模式:支持多种复杂的寻址模式,增加了指令的灵活性和功能。
- 微代码控制:通常使用微代码(microcode)来实现复杂指令的执行,将复杂指令分解为一系列更简单的微操作。
优点:
- 编程简便:由于指令集丰富,程序员可以使用较少的指令实现复杂的功能。
- 代码密度高:复杂指令能够执行多个操作,减少了程序代码的长度。
缺点:
- 设计复杂:CISC处理器的设计和实现较为复杂,增加了设计和制造成本。
- 执行速度较慢:由于指令的复杂性,每条指令的执行时间较长,难以实现高效的流水线处理。
应用:
- 个人计算机:广泛应用于桌面电脑和笔记本电脑,提供高性能计算和多媒体处理能力。
- 服务器:广泛应用于数据中心和云计算服务器,提供高性能计算、虚拟化和大规模数据处理能力。
3. RISC(精简指令集计算)
代表:ARM、IBM Power,以及开源的RISC-V
特点:
- 简化指令集:RISC处理器的指令集较为简单,通常只有几百条指令,每条指令执行一个低级操作(如加载、存储、算术运算等)。
- 固定指令长度:RISC指令的长度固定,通常为32位,这简化了指令的解码和执行过程。
- 少数寻址模式:支持少数几种寻址模式,简化了硬件设计。
- 硬连线控制:通常使用硬连线控制逻辑(hardwired control)来实现指令的执行,提高了指令的执行速度。
优点:
- 高效执行:由于指令简单统一,每条指令在一个时钟周期内完成,有助于实现高速流水线处理。
- 设计简便:RISC处理器的设计和实现较为简单,减少了设计和制造成本。
- 高效流水线:简化指令集和固定指令长度使得RISC处理器能够高效实现流水线处理,提高了指令的执行速度。
缺点:
- 编程复杂:由于指令集简单,程序员需要编写更多的指令来实现复杂的功能。
- 代码密度低:由于指令简单,每个操作需要更多的指令,增加了程序代码的长度。
应用:
- 移动设备:如智能手机和平板电脑,主要使用ARM Cortex-A系列处理器,提供高效能和低功耗的解决方案。
- 嵌入式系统:如工业控制、家电和智能家居设备,广泛使用ARM Cortex-M系列微控制器。
- 物联网设备:低功耗物联网节点和传感器,使用ARM Cortex-M或ARM Cortex-R系列处理器。
4. RISC的设计初衷
RISC的设计初衷是为了克服CISC处理器的一些弊端。CISC处理器的复杂指令集虽然可以简化编程,但也带来了设计和实现的复杂性、执行速度的限制以及较高的功耗。RISC的设计理念主要包括以下几个方面:
简化指令集:
- RISC处理器选择了一些可以在单个CPU周期内完成的简单指令,这些指令大多是基本的算术和逻辑操作、数据传输操作等。简化指令集的目的是减少处理器的复杂性,使得指令的解码和执行更加高效。
固定指令长度:
- RISC指令的长度固定,通常为32位。这种固定长度的设计简化了指令的解码过程,使得处理器能够更快地读取和执行指令。
高效流水线:
- 简化指令集和固定指令长度使得RISC处理器能够更高效地实现指令流水线。在流水线中,不同的指令在不同的阶段并行执行,提高了处理器的执行效率和吞吐量。
将复杂性交给编译器:
- 在RISC设计中,将复杂的操作留给编译器处理,而不是处理器本身。编译器负责将高级语言代码优化并转换为高效的RISC指令序列,从而提高整体系统的性能。
5. CISC和RISC流程对比
图中展示了如何实现乘法运算的差异。具体操作是:将变量a乘以变量b,然后将结果存储回变量a中,表示为a = a * b
。这个过程需要以下四个步骤:
CISC(复杂指令集计算)的实现
- 读取a:从内存中读取变量a的值。
- 读取b:从内存中读取变量b的值。
- 乘法操作:直接在CPU中执行乘法操作,将a和b相乘。
- 写回结果:将乘法结果写回到变量a中。
特点:
- 单条复杂指令:CISC架构提供了一个复杂的乘法指令,可以在一条指令中完成上述所有操作。这条指令可能需要多个CPU周期才能完成。
- 高指令密度:由于每条CISC指令可以执行多个操作,代码的长度(指令数目)较短。
- 复杂硬件实现:由于指令复杂,CISC处理器的硬件实现较为复杂,需要微代码或其他控制机制来解码和执行这些复杂指令。
优点:
- 编程简便:程序员可以使用较少的指令实现复杂的操作。
- 代码紧凑:由于每条指令执行多个操作,程序代码更短。
缺点:
- 执行速度较慢:每条复杂指令需要多个CPU周期才能完成,执行速度相对较慢。
- 硬件复杂:处理器的设计和实现较为复杂,增加了设计和制造成本。
RISC(精简指令集计算)的实现
- 读取a:从内存中读取变量a的值,并将其加载到寄存器中。
- 读取b:从内存中读取变量b的值,并将其加载到寄存器中。
- 乘法操作:在寄存器中执行乘法操作,将a和b相乘,并将结果存储在一个寄存器中。
- 写回结果:将乘法结果从寄存器写回到变量a中。
特点:
- 多条简单指令:RISC架构没有提供复杂的乘法指令,而是通过多条简单的指令来完成上述操作,每条指令在单个CPU周期内完成。
LOAD R1, a
:将变量a加载到寄存器R1中。LOAD R2, b
:将变量b加载到寄存器R2中。MUL R3, R1, R2
:将R1和R2中的值相乘,并将结果存储在寄存器R3中。STORE R3, a
:将寄存器R3中的结果存储回变量a中。
优点:
- 高执行效率:每条指令在一个CPU周期内完成,可以实现高效的流水线处理。
- 硬件设计简便:处理器的设计和实现相对简单,减少了设计和制造成本。
- 高效流水线:简化指令集和固定指令长度使得RISC处理器能够高效实现流水线处理。
缺点:
- 编程复杂:程序员需要编写更多的指令来实现复杂的操作。
- 代码长度增加:由于每个操作需要单独的指令,程序代码长度增加。
比较与总结
1. 指令能力
CISC:
- 指令能力强:CISC的指令集包含许多复杂的指令,每条指令可以执行多个操作。这些指令使得编程更加简便,因为程序员可以使用少量的指令完成复杂的任务。
- 可变长格式:CISC指令的长度不固定,可以根据需要变化,这增加了指令的灵活性。
- 微程序控制:CISC处理器通常使用微程序(microcode)控制,将复杂指令分解为多个微操作执行。微程序在CPU制造时已经存储在微程序存储器中,并在运行时被调用执行。
RISC:
- 指令能力简化:RISC的指令集包含较少的简单指令,每条指令执行一个基本操作。这种简化的指令集减少了处理器的复杂性,并提高了指令的执行效率。
- 固定长格式:RISC指令的长度固定,通常为32位,这简化了指令的解码和执行过程。
- 硬连线控制:RISC处理器主要依赖硬连线控制逻辑(hardwired control)来执行指令,而不是依赖于微程序。这使得RISC处理器能够更快地执行指令。
2. 寻址方式
CISC:
- 多种寻址方式:CISC处理器支持多种复杂的寻址方式,如直接寻址、间接寻址、基址加变址寻址等。这些寻址方式增加了指令的灵活性,但也增加了指令的解码复杂性。
RISC:
- 少量寻址方式:RISC处理器支持的寻址方式较少,通常只有立即寻址、寄存器寻址和简单的内存寻址。这些简化的寻址方式有助于提高指令的执行速度和处理器的设计效率。
3. 实现方式
CISC:
- 微程序控制技术:CISC处理器通过微程序控制复杂指令的执行。微程序将复杂指令分解为一系列微操作,这些微操作在CPU内部依次执行。微程序的执行是不可中断的,增加了处理器的复杂性。
RISC:
- 硬连线逻辑控制:RISC处理器主要使用硬连线逻辑控制来执行指令。这种方式依赖于硬件电路,而不是微程序,简化了处理器的设计,提高了指令执行的速度和效率。
- 流水线处理:RISC处理器广泛采用流水线技术,使得多个指令可以在不同阶段同时执行,提高了指令的吞吐量和整体性能。
4. 研发周期
CISC:
- 研发周期长:由于CISC处理器的复杂性,设计和实现一个新的CISC处理器需要较长的时间。复杂的指令集和多种寻址方式增加了设计和验证的工作量。
RISC:
- 研发周期短:RISC处理器的设计相对简单,硬件实现较为简便,使得研发周期较短。此外,RISC指令集依赖于编译器优化,将复杂操作交给编译器处理,进一步简化了处理器设计。
特点 | CISC(复杂指令集计算) | RISC(精简指令集计算) |
---|---|---|
代表 | Intel、AMD的x86 CPU | ARM、IBM Power、RISC-V |
指令能力 | 强,单条指令可以完成多个操作,指令集复杂 | 简化,大部分为单周期指令,指令长度固定 |
指令长度 | 可变长格式 | 固定长度,通常为32位 |
寻址方式 | 多种复杂的寻址方式 | 少量简单的寻址方式 |
控制方式 | 微程序控制,执行复杂指令 | 硬连线逻辑控制,执行简单指令 |
执行效率 | 单条指令执行时间较长,难以高效流水线处理 | 每条指令执行时间短,容易实现高效流水线 |
实现方式 | 通过微程序控制复杂指令的实现 | 增加了通用寄存器,主要采用流水线方式执行 |
硬件设计 | 复杂,增加设计和制造成本 | 简单,降低设计和制造成本 |
编程难度 | 编程较为简单,指令数量少 | 编程复杂,指令数量多 |
代码密度 | 高,程序代码长度较短 | 低,程序代码长度较长 |
研发周期 | 长,设计和验证工作量大 | 短,硬件设计简单,依赖编译器优化 |
优势 | 指令集丰富,编程简便,代码密度高 | 指令执行高效,硬件设计简便,易于流水线处理 |
应用领域 | 个人计算机、服务器、高性能计算 | 移动设备、嵌入式系统、物联网设备、高性能计算 |
6. CISC与RISC指令对比
功能 | CISC指令示例(x86架构) | RISC指令示例(ARM架构) |
---|---|---|
数据传送 | MOV AX, [1234H] | LDR R0, [R1] |
从内存地址1234H处读取数据到AX寄存器中 | 从内存地址R1处读取数据到R0寄存器中 | |
加法 | ADD AX, BX | ADD R0, R1, R2 |
将BX寄存器的值加到AX寄存器中 | 将R1和R2寄存器的值相加,结果存储在R0中 | |
减法 | SUB AX, [1234H] | SUB R0, R1, R2 |
将内存地址1234H处的值从AX寄存器中减去 | 将R2寄存器的值从R1寄存器中减去,结果存储在R0中 | |
乘法 | MUL BX | MUL R0, R1, R2 |
将AX寄存器和BX寄存器的值相乘,结果存储在AX中 | 将R1和R2寄存器的值相乘,结果存储在R0中 | |
数据存储 | MOV [1234H], AX | STR R0, [R1] |
将AX寄存器的值存储到内存地址1234H处 | 将R0寄存器的值存储到内存地址R1处 | |
无条件跳转 | JMP 1234H | B label |
无条件跳转到内存地址1234H处 | 无条件跳转到标签label处 | |
条件跳转 | JZ 1234H | BEQ label |
如果零标志设置,则跳转到内存地址1234H处 | 如果零标志设置,则跳转到标签label处 | |
比较 | CMP AX, BX | CMP R0, R1 |
比较AX和BX寄存器的值,根据结果设置标志寄存器 | 比较R0和R1寄存器的值,根据结果设置条件标志 | |
空操作 | NOP | NOP |
不执行任何操作 | 不执行任何操作 |
通过这些对比可以看出,CISC指令通常较为复杂,能够在一条指令中执行多个操作,而RISC指令则较为简化,每条指令只执行一个基本操作。这种设计使得RISC处理器能够更高效地执行指令,并更容易实现流水线处理。
7. RISC-V
RISC-V是一个开源的RISC(精简指令集计算)指令集架构(ISA),由加州大学伯克利分校的研究人员开发,它以其开放性和模块化设计而广受欢迎。
背景
RISC-V的开发始于2010年,创建了一个简洁且易于理解的指令集架构,同时避免商业化指令集的各种限制和专利问题。
- 简化架构设计:创建一个简洁且高效的指令集,易于理解和实现。
- 开放性:提供一个开源的指令集架构,任何人都可以免费使用和修改。
- 灵活性和可扩展性:支持多种实现方式和应用场景,从简单的嵌入式处理器到高性能多核处理器。
特点
-
开源性
- 自由使用和修改:RISC-V的指令集架构是开放的,任何人都可以免费下载、使用和修改。这使得RISC-V成为学术研究、教学以及工业应用的理想选择。
- 避免专利问题:由于其开源性,RISC-V避免了使用商业化指令集可能面临的专利和许可问题。
-
模块化设计
- 基础指令集:RISC-V定义了一个基础的指令集,称为RV32I(32位整数指令集)和RV64I(64位整数指令集)。这些基础指令集包含了一组核心指令,适用于大多数计算任务。
- 可选扩展:在基础指令集之上,RISC-V提供了多种可选扩展模块,如浮点运算(F、D扩展)、原子操作(A扩展)、压缩指令集(C扩展)等。用户可以根据具体需求选择适当的扩展模块。
-
灵活性和可扩展性
- 多种实现方式:RISC-V的设计支持从简单的嵌入式处理器到高性能多核处理器的多种实现方式。设计者可以根据具体应用场景进行优化。
- 适应不同应用场景:RISC-V适用于嵌入式系统、物联网设备、移动设备、高性能计算等多种应用场景。