当前位置: 首页 > news >正文

《计算机组成原理》第 7 章 - 指令系统

目录

7.1 机器指令

7.1.1 指令的一般格式

📌 案例:简单指令格式模拟(Java)

7.2 操作数类型和操作类型

7.2.1 操作数类型

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

大端模式 vs 小端模式

📌 案例:大端小端转换(Java)

7.2.3 操作类型

7.3 寻址方式

7.3.1 指令寻址

7.3.2 数据寻址

常见寻址方式:

7.4 指令格式举例

7.4.1 设计指令格式应考虑的因素

7.4.2 指令格式举例(假设 32 位指令)

7.4.3 指令格式设计举例(Java 类模拟)

7.5 RISC 技术

7.5.1 RISC 的产生和发展

7.5.2 RISC 的主要特征

7.5.3 RISC 和 CISC 的比较

📊 思维导图

🚀 流程图示例


7.1 机器指令

7.1.1 指令的一般格式

指令组成:操作码(OP) + 地址码(Address)
操作码:决定指令功能(如加法、跳转)
地址码:指示操作数或指令地址

📌 案例:简单指令格式模拟(Java)
/*** 模拟指令格式类*/
public class Instruction {private int opcode; // 操作码(4位,0-15)private int address; // 地址码(28位,0-2^28-1)// 构造方法:传入操作码和地址码public Instruction(int opcode, int address) {this.opcode = opcode & 0x0F; // 保留低4位作为操作码this.address = address & 0xFFFFFFF; // 保留低28位作为地址码}// 获取操作码public int getOpcode() {return opcode;}// 获取地址码public int getAddress() {return address;}public static void main(String[] args) {// 示例:加法指令(操作码0001),操作数地址0x123456Instruction addInst = new Instruction(0x01, 0x123456);System.out.println("操作码:" + addInst.getOpcode()); // 输出1System.out.println("地址码:" + addInst.getAddress()); // 输出123456}
}

7.2 操作数类型和操作类型

7.2.1 操作数类型

  • 数据类型:整数、浮点数、字符、布尔
  • 地址类型:存储器地址、寄存器地址

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

大端模式 vs 小端模式
数据(0x12345678)大端模式(高位在前)小端模式(低位在前)
地址 0x000x120x78
地址 0x010x340x56
地址 0x020x560x34
地址 0x030x780x12
📌 案例:大端小端转换(Java)
public class EndianConverter {// 大端转小端public static byte[] bigToLittle(byte[] bigEndian) {byte[] littleEndian = new byte[bigEndian.length];for (int i = 0; i < bigEndian.length; i++) {littleEndian[i] = bigEndian[bigEndian.length - 1 - i];}return littleEndian;}public static void main(String[] args) {byte[] big = {0x12, 0x34, 0x56, 0x78}; // 大端模式数据byte[] little = bigToLittle(big); // 转换为小端System.out.println("小端模式:");for (byte b : little) {System.out.print(String.format("%02X ", b)); // 输出78 56 34 12}}
}

7.2.3 操作类型

  • 算术运算:加减乘除
  • 逻辑运算:与或非异或
  • 数据传送:LOAD/STORE
  • 控制转移:JMP/CONDITIONAL JUMP

7.3 寻址方式

7.3.1 指令寻址

  • 顺序寻址:按 PC 自动递增寻址
  • 跳跃寻址:通过 JMP 指令改变 PC 值

7.3.2 数据寻址

常见寻址方式:
  1. 立即寻址:操作数直接在指令中
    int a = 10; // 立即数10
    
  2. 直接寻址:地址码为操作数地址
    int[] arr = {1, 2, 3};
    int b = arr[1]; // 直接寻址arr[1]
    
  3. 间接寻址:地址码为指针地址
    int x = 5;
    int* ptr = &x; // 指针存储x的地址(间接寻址)
    
  4. 寄存器寻址:操作数在寄存器中
    // 假设寄存器R1存储值为10
    int c = R1; // 寄存器寻址
    

7.4 指令格式举例

7.4.1 设计指令格式应考虑的因素

  • 字长
  • 操作类型数量
  • 寻址方式种类
  • 寄存器数量

7.4.2 指令格式举例(假设 32 位指令)

操作码(4 位)寻址方式(2 位)寄存器号(3 位)地址码(23 位)
0001(加法)01(直接寻址)001(R1)0x123456

7.4.3 指令格式设计举例(Java 类模拟)

/*** 扩展指令格式类*/
public class ExtendedInstruction {private int opcode; // 4位private int addressingMode; // 2位(0-3)private int regNum; // 3位(0-7)private int address; // 23位public ExtendedInstruction(int opcode, int addressingMode, int regNum, int address) {this.opcode = opcode & 0x0F;this.addressingMode = addressingMode & 0x03;this.regNum = regNum & 0x07;this.address = address & 0x1FFFFFF; // 23位掩码}public static void main(String[] args) {// 示例:乘法指令(0010),寄存器寻址(01),R2,地址0x89ABCExtendedInstruction mulInst = new ExtendedInstruction(0x02, 0x01, 0x02, 0x89ABC);System.out.println("操作码:" + mulInst.opcode); // 2System.out.println("寻址方式:" + mulInst.addressingMode); // 1}
}

7.5 RISC 技术

7.5.1 RISC 的产生和发展

  • 背景:CISC 指令集复杂,执行效率低
  • 发展:80 年代出现 RISC 架构(如 MIPS、ARM)

7.5.2 RISC 的主要特征

  1. 指令集简单(约 20-50 条基本指令)
  2. 单周期指令执行
  3. 大量通用寄存器
  4. 采用 LOAD/STORE 结构访问内存

7.5.3 RISC 和 CISC 的比较

特性RISCCISC
指令数量少(简单指令)多(复杂指令)
执行周期单周期多周期
设计重点硬件执行效率软件兼容性
典型架构ARM、RISC-Vx86

📊 思维导图

```mindmap
## **7.1 机器指令**
- 指令格式:操作码+地址码
## **7.2 操作数与操作类型**
- 数据类型:整数/浮点/字符
- 存储方式:大端/小端
- 操作类型:算术/逻辑/控制
## **7.3 寻址方式**
- 指令寻址:顺序/跳跃
- 数据寻址:立即/直接/间接
## **7.4 指令格式设计**
- 设计因素:字长/操作数/寻址
- 案例:32位指令格式
## **7.5 RISC技术**
- 特征:简单指令/单周期
- 对比:与CISC的主要区别

🚀 流程图示例

💡 说明

  • 代码均经过简化模拟,实际计算机指令系统需结合硬件架构
  • 建议通过模拟器(如 QEMU、Mars MIPS)动手调试指令执行过程
  • 关注后续章节:第 8 章 - 中央处理器(CPU)原理

📢 欢迎留言讨论指令系统的难点!
如果需要某部分的扩展案例或代码优化,可随时告知~

相关文章:

  • 怎么实现pid隔离
  • 现代 CSS 高阶技巧:实现平滑内凹圆角的工程化实践
  • Linux下目录遍历的实现
  • 机器学习算法-决策树
  • Linux操作系统概述
  • 【文献阅读】EndoChat: Grounded Multimodal Large Language Model for Endoscopic Surgery
  • AI前端开发岗位面试准备指南
  • MATLAB绘制滤波器系数特性图
  • 【机器学习基础】机器学习入门核心算法:K-近邻算法(K-Nearest Neighbors, KNN)
  • 大模型——MCP 深度解析
  • day 38
  • python-自定义导包问题ModuleNotFoundError: No module named
  • uni-app 中开发问题汇总
  • 走进黑盒:SQL 是如何在数据库中执行的?
  • 大模型应用:开发移动端页面个人中心页面提示词
  • CVPR2022——立体匹配算法Fast-ACVNet复现
  • 不同数据场景下的聚类算法
  • MybatisPlus - Interceptor(拦截器)的功能点
  • 完全卸载VS Code--Windows版
  • 图文详解 | PhotoScape X Pro 4.2.5 安装步骤与功能初探
  • 如何帮客户做网站/今天热搜榜前十名
  • 做医院的系统网站怎么做/扬州百度关键词优化
  • 点击运行显示网站正在建设/2021小学生新闻摘抄
  • 网站建设公司天强科技/西点培训前十名学校
  • 网站导航内链建设/2022智慧树互联网与营销创新
  • 高碑店市建设局网站/迅雷磁力