首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >《计算机组成原理》第 7 章 - 指令系统

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

作者头像
啊阿狸不会拉杆
发布2026-01-21 11:34:44
发布2026-01-21 11:34:44
1180
举报

7.1 机器指令

7.1.1 指令的一般格式

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

📌 案例:简单指令格式模拟(Java)
代码语言:javascript
复制
/**
 * 模拟指令格式类
 */
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),操作数地址0x123456
        Instruction addInst = new Instruction(0x01, 0x123456);
        System.out.println("操作码:" + addInst.getOpcode()); // 输出1
        System.out.println("地址码:" + addInst.getAddress()); // 输出123456
    }
}

7.2 操作数类型和操作类型

7.2.1 操作数类型
  • 数据类型:整数、浮点数、字符、布尔
  • 地址类型:存储器地址、寄存器地址
7.2.2 数据在存储器中的存放方式
大端模式 vs 小端模式

数据(0x12345678)

大端模式(高位在前)

小端模式(低位在前)

地址 0x00

0x12

0x78

地址 0x01

0x34

0x56

地址 0x02

0x56

0x34

地址 0x03

0x78

0x12

📌 案例:大端小端转换(Java)
代码语言:javascript
复制
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 数据寻址
常见寻址方式:

立即寻址:操作数直接在指令中

代码语言:javascript
复制
int a = 10; // 立即数10

直接寻址:地址码为操作数地址

代码语言:javascript
复制
int[] arr = {1, 2, 3};
int b = arr[1]; // 直接寻址arr[1]

间接寻址:地址码为指针地址

代码语言:javascript
复制
int x = 5;
int* ptr = &x; // 指针存储x的地址(间接寻址)

寄存器寻址:操作数在寄存器中

代码语言:javascript
复制
// 假设寄存器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 类模拟)
代码语言:javascript
复制
/**
 * 扩展指令格式类
 */
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,地址0x89ABC
        ExtendedInstruction mulInst = new ExtendedInstruction(0x02, 0x01, 0x02, 0x89ABC);
        System.out.println("操作码:" + mulInst.opcode); // 2
        System.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 的比较

特性

RISC

CISC

指令数量

少(简单指令)

多(复杂指令)

执行周期

单周期

多周期

设计重点

硬件执行效率

软件兼容性

典型架构

ARM、RISC-V

x86

📊 思维导图

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

🚀 流程图示例

💡 说明

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 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 的比较
  • 📊 思维导图
  • 🚀 流程图示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档