计算机组成原理的学习笔记(8)-- 指令系统·其一 指令的组成以及数据寻址方式/RISK和CISK

发布于:2025-02-11 ⋅ 阅读:(113) ⋅ 点赞:(0)

学习笔记

前言


本文主要是对于b站尚硅谷的计算机组成原理的学习笔记,仅用于学习交流。

1. 指令

1.1 组成
  • 操作码(Opcode):指指令中执行特定操作的部分。
  • 地址码:指令中用于指定操作数位置的部分。
1.2 扩展操作码
  • 变化长度操作码:采用哈夫曼编码等技术确保操作码不重复。
  • 实现步骤:需求分析、设计、硬件实现、软件支持、验证测试和文档发布。

2. 常见的数据寻址方式

2.1 立即寻址
  • 定义:操作数直接写在指令中,不需要访问内存。
  • 实现:指令的操作数就是数据。
  • 应用场景:常用于赋值操作,例如 MOV AX, 5,将数值 5 加载到寄存器 AX
  • 优点:简单,速度最快。
  • 缺点:数据范围小。

2.2 直接寻址
  • 定义:指令中给出的是一个内存地址,CPU 直接访问该地址的内容。
  • 实现:从内存中直接读取数据。
  • 应用场景:简单的内存访问。
  • 优点:简洁
  • 缺点:不灵活,无法动态计算地址。

2.3 间接寻址
  • 定义:指令中给出的地址是一个指针,指向另一个内存地址,CPU 需要先从该指针中获取目标地址,再访问数据。
  • 实现:首先从给定的地址获取一个指向数据的地址,然后再访问数据。
  • 应用场景:动态数据访问,指针操作等。
  • 优点:灵活,可以访问不同的内存位置,尤其适用于复杂数据结构。
  • 缺点:需要两次内存访问,速度较慢。

2.4 隐含寻址
  • 定义:指令的操作数由指令本身隐含或自动确定,操作数的位置不需要显式提供。CPU 在执行指令时自动操作特定的寄存器或内存位置。

    实现:操作码本身决定了操作数的位置,通常固定与某些寄存器或硬件资源关联。

    应用场景:适用于寄存器操作、堆栈操作、状态寄存器操作等简单且快速的操作。

    优点

    • 无需显式地址,指令格式简洁。
    • 操作快速,无需地址计算或内存访问。

    缺点

    • 灵活性较差,操作数位置固定,无法动态指定或变更。

2.5 寄存器寻址
  • 定义:操作数直接存储在寄存器中,指令通过指定寄存器来访问数据。
  • 实现:指令操作数本身是寄存器的值,无需访问内存。
  • 应用场景:寄存器之间的操作,如 MOV AX, BX,将寄存器 BX 的值复制到 AX
  • 优点:访问速度非常快,因为寄存器访问是最快的。
  • 缺点:数量有限,无法存储大量数据。

2.6 寄存器间接寻址
  • 定义:使用寄存器存储数据的地址,寄存器中存储的是指向数据的内存地址,CPU 通过寄存器访问内存。
  • 实现:寄存器中的值指向目标数据的内存地址,CPU 通过该寄存器来间接访问数据。
  • 应用场景:通过寄存器指向内存地址的操作,如 MOV AX, [BX],将 BX 指向的内存地址中的值加载到 AX 寄存器中。
  • 优点:灵活,寄存器间接寻址支持动态访问内存。
  • 缺点:需要管理寄存器中的地址,速度较直接寻址慢。

2.7 基址寻址
  • 定义:通过基地址寄存器和偏移量计算最终地址。
  • 实现:将基址寄存器和偏移量相加,得到内存地址。
  • 应用场景:数组或结构体的访问。
  • 优点:适合访问连续的数据块,灵活,常用于数组和结构体。
  • 缺点:需要管理基址寄存器和偏移量。

2.8 变址寻址
  • 定义:基址寻址的一种扩展,使用基址寄存器和索引寄存器的组合来计算地址。
  • 实现:基址寄存器 + (索引寄存器 × 步长) + 偏移量。
  • 应用场景:访问数组元素。
  • 优点:支持灵活的内存访问,尤其适用于数组访问。
  • 缺点:需要使用多个寄存器,增加了计算复杂度。

2.9 相对寻址
  • 定义:相对地址是指相对于当前指令的地址(或程序计数器 PC)的偏移量。
  • 实现:通过当前地址(PC)加上偏移量计算最终地址,常用于跳转或分支指令。
  • 应用场景:程序跳转、分支语句、函数调用等。
  • 优点:常用于控制流操作,支持代码独立性和程序重定位。
  • 缺点:只能用于跳转和分支指令,通常不适用于数据访问。

2.10 堆栈寻址
  • 定义:通过栈顶指针(SP)来访问数据。
  • 实现:栈顶元素的地址由栈指针寄存器(SP)决定。
  • 应用场景:函数调用、局部变量管理、返回地址管理等。
  • 优点:支持动态的函数调用和局部数据存取,常用于递归和函数栈。
  • 缺点:操作栈需要使用专门的寄存器和管理机制。

**CISC 和 RISC **

1. CISC(复杂指令集计算机)

  • 定义:CISC 是一种复杂指令集架构,其指令设计旨在让每条指令能够完成更多复杂的操作,从而减少程序代码长度。
特点
  1. 复杂指令
    • 每条指令可能完成多个操作,如加载数据、计算结果、存储数据。
    • 指令长度不固定。
  2. 多种寻址方式
    • 支持多种复杂的寻址模式(如直接寻址、间接寻址、变址寻址等)。
  3. 微代码控制
    • CISC 使用微代码来解释复杂指令,并将其转化为多个基本的硬件操作。
  4. 高指令密度
    • 程序代码更短,因为每条指令能完成更复杂的操作。
  5. 硬件复杂
    • 由于需要支持多种复杂指令和寻址方式,硬件设计复杂。
优点
  • 程序代码短,适合内存较小的环境。
  • 单条指令完成更多操作,减少了程序员编写代码的复杂性。
缺点
  • 执行复杂指令可能需要多个时钟周期,性能不如精简架构高效。
  • 硬件设计复杂,增加了成本和功耗。
代表
  • x86 架构:Intel 和 AMD 的大多数处理器都属于 CISC。

2. RISC(精简指令集计算机)

  • 定义:RISC 是一种精简指令集架构,其设计目标是提供少而简单的指令集,以提高指令执行效率。
特点
  1. 精简指令
    • 每条指令执行一个基本操作,如加法、存储、加载等。
    • 指令长度固定,通常为 32 位。
  2. 单周期执行
    • 大多数指令在一个时钟周期内完成。
  3. 少寻址方式
    • 通常支持少量简单的寻址模式(如寄存器寻址和立即寻址)。
  4. 硬连线控制
    • 指令直接由硬件实现,无需微代码解释。
  5. 依赖寄存器
    • RISC 处理器通常配备大量的通用寄存器,用于存储中间数据,减少对内存的访问。
优点
  • 每条指令执行快,指令执行效率高。
  • 硬件设计简单,功耗低,易于优化和扩展。
缺点
  • 程序代码长度较长,因为复杂操作需要多条指令组合实现。
  • 对编译器要求较高,需要优化生成高效的指令序列。
代表
  • ARM 架构:大多数移动设备(如智能手机、平板电脑)的处理器都使用 ARM。
  • MIPS 架构:早期嵌入式设备和学术研究中常用的架构。

3. CISC 和 RISC 的对比

特性 CISC RISC
指令数量 较少
编译器 要求低 要求高
指令字长 不固定 固定
执行时间 多个时钟周期 大多为单个时钟周期
通用寄存器数量
各种指令使用频率 相差较大 相差不大
寻址方式 支持多种复杂的寻址方式 支持少量简单的寻址方式
硬件设计 复杂,依赖微代码 简单,硬连线控制
代码长度
功耗 较高 较低
兼容性 较好 较差
典型应用 PC、服务器(如 x86 架构) 嵌入式系统、移动设备(如 ARM)

结语

好累,好多没看懂的都得问问AI,寻址什么的…好麻烦。请添加图片描述


网站公告

今日签到

点亮在社区的每一天
去签到