计算机组成原理 — 指令系统

2024-03-28 23:36

本文主要是介绍计算机组成原理 — 指令系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

指令系统

  • 指令系统
    • 指令的概述
      • 指令的格式
      • 指令的字长取决于
    • 操作数类型和操作种类
      • 操作数的类型
      • 数据在存储器中的存放方式
      • 操作类型
    • 寻址方式
      • 指令寻址
      • 数据寻址
        • 立即寻址
        • 直接寻址
        • 隐含寻址
        • 间接寻址
        • 寄存器寻址
        • 寄存器间接寻址
        • 基址寻址
        • 变址寻址
        • 堆栈寻址
    • RISC 和 CISC 技术
      • RISC 即精简指令系统计算机
      • CISC 即复杂指令系统计算机
      • RISC 和 CISC 的比较


大家好呀!我是小笙,本章我主要分享计算机组成原理的指令系统知识,希望内容对你有所帮助!

指令系统

指令的概述

指令的格式

image-20240322124839520
  • 操作码:反映机器做什么操作

    • 长度固定:将操作码集中放在指令字的一个字段内(用于指令字段较长的情况。例如: IBM370)

    • 长度可变:操作码分散在指令字的不同字段中(有效地压缩操作码的平均长度,在字长较短的微型计算机中被广泛采用。例如:PDP-11)

    • 扩展操作码技术:操作码的位数随地址数的减少而增加

      image-20240322125211160
  • 地址码:地址码用来指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一条指令的地址

    分类:四地址指令、三地址指令、二地址指令、一地址指令、零地址指令

指令的字长取决于

  • 操作码的长度
  • 操作数地址的长度
  • 操作数地址的个数

指令字长可以分为固定和可变:固定的时候,指令字长 = 存储字长 ; 可变的时候,按字节的整数倍数变化

操作数类型和操作种类

操作数的类型

  • 地址:无符号整数
  • 数字:定点数、浮点数、十进制数
  • 字符:ASCII
  • 逻辑数:逻辑运算

数据在存储器中的存放方式

  • 不对准边界(从任意位置开始访问)

    优点:不浪费存储资源

    缺点:除了访问每个字节之外,访问其他任何类型的数据都可能花费两个存储周期的时间;读写控制比较复杂

    image-20231113221113765

  • 对准边界(从一个存储字的起始位置开始访问)

    优点:无论访问任何类型的数据,在一个周期均可完成;读写控制简单

    缺点:浪费了宝贵的存储资源

    image-20231113221137383

  • 边界对转方式(从地址的整数倍位置开始访问)

    数据存放的起始位置是数据长度的整数倍(前面两种方式的折中方案)

操作类型

  • 数据传送:数据传送包括寄存器与寄存器、寄存器与存储单元、存储单元与存储单元之间的传送
  • 算术逻辑操作:算术运算和逻辑运算
  • 移位操作:分为算术移位、逻辑移位和循环移位
  • 转移:跳转、无条件/条件转移等
  • 输入输出:从外设中的寄存器读入一个数据到 CPU 的寄存器内,或将数据从 CPU 的寄存器输出至某外设的寄存器中

寻址方式

寻址方式:确定本条指令的数据地址以及下一条将要执行的指令地址的方法

寻址方式分为指令寻址和数据寻址两大类

指令寻址

  • 顺序寻址可通过程序计数器PC加1,自动形成下一条指令的地址
  • 跳跃寻址则通过转移类指令实现
image-20240326124133642

数据寻址

指令的地址码字段通常都不代表操作数的真实地址

image-20240326124748293

  • 形式地址:指令中的地址(可以理解为逻辑地址)
  • 有效地址:操作数的真实地址

以下寻址方式建立在 指令字长 = 存储字长 = 机器字长


立即寻址

操作数本身设在指令字内,即形式地址 A 不是操作数的地址,而是操作数本身,又称之为立即数(数据是采用补码形式存放的)

image-20240326124901358

优点:只要取出指令,便可立即获得操作数,这种指令在执行阶段不必再访问存储器

缺点:显然 A 的位数限制了这类指令所能表述的立即数的范围


直接寻址

EA = A 有效地址由形式地址直接给出

image-20240326125244468

优点:寻找操作数比较简单,也不需要专门计算操作数的地址,在指令执行阶段对主存只访问一次

缺点:A 的位数限制了操作数的寻址范围,而且必须修改A的值,才能修改操作数的地址


隐含寻址

指令字中不明显地给出操作数的地址,其操作数的地址隐含在操作码或某个寄存器中

image-20240326125334507

由于隐含寻址在指令字中少了一个地址,因此,这种寻址方式的指令有利于缩短指令字长


间接寻址

倘若指令字中的形式地址不直接指出操作数的地址,而是指出操作数有效地址所在的存储单元地址,也就是说,有效地址是由形式地址间接提供的,即为间接寻址,即EA=(A)

image-20240326125446727

优点:它扩大了操作数的寻址范围以及便于编程

缺点:在于指令的执行阶段需要访存两次(一次间接寻址)或多次(多次间接寻址),致使指令执行时间延长


寄存器寻址

在寄存器寻址的指令字中,地址码字段直接指出了寄存器的编号,即EA=Ri

image-20240327124227915

优点

  • 操作数不在主存中,故寄存器寻址在指令执行阶段,无须访存,减少了执行时间
  • 地址字段只需指明寄存器编号(计算机中寄存器数有限),故指令字较短,节省了存储空间

寄存器间接寻址

Ri 中的内容不是操作数,而是操作数所在主存单元的地址号,即有效地址EA=(Ri)(有效地址不是存放在存储单元中,而是存放在寄存器中)

image-20240327124329884
基址寻址

基址寻址需设有基址寄存器 BR,其操作数的有效地址EA等于指令字中的形式地址与基址寄存器中的内容(称为基地址)相加,即 EA = A + (BR)

  • 隐式:计算机内部专门设置一个基址寄存器 BR,使用时用户不必明显指出该基址寄存器
  • 显式:一组通用的寄存器里,由用户来明确指出哪个寄存器用作基址寄存器
image-20240327124532788

优点

  • 基址寻址可以扩大操作数的寻址范围
  • 基址寻址在多道程序中极为有用
  • 用户也不可以修改基址寄存器的内容,确保系统安全可靠地运行

变址寻址

变址寻址与基址寻址极为相似。其有效地址EA等于指令字中的形式地址A与变址寄存器 X的内容相加之和,即 EA = A +(IX)

变址寻址主要用于处理数组问题,在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器X的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序

image-20240327125011238

优点

  • 只要变址寄存器位数足够,也可扩大操作数的寻址范围
  • IX 的内容由用户给定
  • 在程序执行过程中 IX 内容可变,形式地址A是不可变的
  • 便于处理数组问题

堆栈寻址

堆栈分为硬堆栈(多个寄存器)、软堆栈(指定的存储空间)

堆栈寻址就其本质也可视为寄存器间接寻址,因SP可视为寄存器,它存放着操作数的有效地址

image-20240327125542646

RISC 和 CISC 技术

RISC 即精简指令系统计算机

主要特征:

  • 选用使用频率较高的一些简单指令;复杂指令的功能由简单指令来组合实现
  • 指令长度固定、指令格式种类少、寻址方式少
  • 只有 LOAD/STORE 指令访存
  • CPU 中有多个通用寄存器
  • 采用流水技术,一个时钟周期内完成一条指令
  • 采用组合逻辑实现控制器

CISC 即复杂指令系统计算机

主要特征:

  • 系统指令复杂庞大,各种指令使用频度相差大
  • 指令长度不固定、指令格式种类多、寻址方式多
  • 访存指令不受限制
  • CPU 中设有专有寄存器
  • 大多数指令需要多个时钟周期执行完毕
  • 采用微程序控制器

RISC 和 CISC 的比较

CISCRISC
指令系统复杂,庞大简单,精简
指令数目大于200条小于100条
指令字长不固定定长
可访存指令不加限制只有Load/Store指令
控制方式绝大多数为微程序绝大多数用组合逻辑
通用寄存器数量较少

这篇关于计算机组成原理 — 指令系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857003

相关文章

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

MySQL的隐式锁(Implicit Lock)原理实现

《MySQL的隐式锁(ImplicitLock)原理实现》MySQL的InnoDB存储引擎中隐式锁是一种自动管理的锁,用于保证事务在行级别操作时的数据一致性和安全性,本文主要介绍了MySQL的隐式锁... 目录1. 背景:什么是隐式锁?2. 隐式锁的工作原理3. 隐式锁的类型4. 隐式锁的实现与源代码分析4

MySQL中Next-Key Lock底层原理实现

《MySQL中Next-KeyLock底层原理实现》Next-KeyLock是MySQLInnoDB存储引擎中的一种锁机制,结合记录锁和间隙锁,用于高效并发控制并避免幻读,本文主要介绍了MySQL中... 目录一、Next-Key Lock 的定义与作用二、底层原理三、源代码解析四、总结Next-Key L

Spring Cloud Hystrix原理与注意事项小结

《SpringCloudHystrix原理与注意事项小结》本文介绍了Hystrix的基本概念、工作原理以及其在实际开发中的应用方式,通过对Hystrix的深入学习,开发者可以在分布式系统中实现精细... 目录一、Spring Cloud Hystrix概述和设计目标(一)Spring Cloud Hystr