计算机组成原理:指令系统
计算机组成原理笔记:指令系统
一、指令格式
1. 基本构成
指令 = 操作码 + 地址码
部分 | 功能 |
---|---|
操作码(Opcode) | 表示该指令要执行的操作类型,如加、减、乘、除、数据传送等。 其长度取决于指令系统的总指令数(例如:若共有 2^n 条指令,则需 n 位操作码)。 |
地址码(Address Code) | 指出操作数的位置或值本身。 可以是直接给出操作数(立即数),也可以是指向寄存器或内存地址的地址信息。 |
示例:
ADD R1, R2
:操作码表示“加法”,地址码为两个寄存器名。
MOV A, #5
:操作码表示“传送”,地址码中包含立即数 5。
二、基本指令格式
1. 按地址码数目分类
类型 | 格式 | 特点 | 典型应用 |
---|---|---|---|
三地址指令 | OP A₁ A₂ A₃ | 三个地址分别指向两个源操作数和一个目的地址 结构清晰,但指令长 |
多用于早期计算机或教学模型 |
二地址指令 | OP A₁ A₂ | A₁ 是第一个操作数,A₂ 是第二个操作数兼结果存储位置 最常见格式 |
如:ADD R1, R2 → R1 ← R1 + R2 |
一地址指令 | OP A | A 既是操作数地址,也是结果存放地址 节省空间,但灵活性差 |
加1、减1、移位等单操作数指令 |
零地址指令 | OP | 无地址字段,不涉及具体操作数 常用于控制类指令 |
空操作(NOP)、停机(HLT)、关中断等 |
注意:
在一地址指令中,隐含一个操作数(如累加器 ACC)。同时,零地址指令通常依赖堆栈结构实现(如 PUSH
, POP
)。
2. 按指令长度分类
类型 | 定义 | 优点 | 缺点 | 应用场景 |
---|---|---|---|---|
定长指令字结构 | 所有指令长度相同 | 控制简单,取指速度快,硬件设计容易 | 指令功能受限,浪费空间 | RISC 架构(如 MIPS) |
变长指令字结构 | 不同指令长度不同 | 更灵活,可压缩常用指令,提高效率 | 控制复杂,取指困难 | CISC 架构(如 x86) |
3. 按功能分类(7大类)
类别 | 说明 | 典型指令 |
---|---|---|
数据传送类 | 实现主存与CPU之间、寄存器之间的数据交换 | LOAD, STORE, MOV |
算术运算类 | 执行基本数学运算 | ADD, SUB, MUL, DIV |
位操作类 | 对二进制位进行逻辑处理 | AND, OR, XOR, NOT, SHL, SHR |
I/O类 | 控制输入输出设备 | IN, OUT |
串操作类 | 处理字符串或数组 | MOVS, CMPS, SCAS |
CPU控制类 | 控制处理器运行状态 | CLI, STI, HLT |
转移类 | 改变程序执行顺序 | JMP, CALL, RET, BRANCH |
LOAD:从存储器读取数据到寄存器(如:LOAD R1, [1000H]
)
STORE:将寄存器内容写入存储器(如:STORE [2000H], R1
)
三、操作数类型及操作类型
1. 操作数类型
类型 | 描述 | 示例 |
---|---|---|
立即数 | 操作数直接出现在指令中 | ADD R1, #5 |
寄存器 | 操作数在寄存器中 | ADD R1, R2 |
直接寻址 | 地址字段直接给出操作数的物理地址 | MOV R1, [1000H] |
间接寻址 | 地址字段指向另一个地址,该地址才是操作数所在位置 | MOV R1, [R2] |
寄存器间接寻址 | 寄存器中保存的是操作数地址 | MOV R1, [BX] |
基址寻址 | EA = 基址寄存器 + 偏移量 | MOV R1, [BX+100H] |
变址寻址 | EA = 变址寄存器 + 偏移量 | MOV R1, [SI+10H] |
相对寻址 | EA = PC + 偏移量 | JMP +100 |
堆栈寻址 | 使用栈顶指针 SP 访问数据 | PUSH R1 , POP R2 |
⚠️区分关键:
基址 vs 变址:
- 基址:固定段基址 + 偏移 → 用于模块定位
- 变址:动态索引 + 偏移 → 用于数组遍历
间接寻址 vs 寄存器间接寻址:
- 间接:内存中存地址;寄存器间接:寄存器中存地址
2. 操作类型总结
类型 | 功能 | 代表指令 |
---|---|---|
数据传送类 | CPU与主存/寄存器间数据传输 | LOAD, STORE, MOV |
算术运算类 | 数值计算 | ADD, SUB, MUL, DIV |
逻辑运算类 | 位级操作 | AND, OR, XOR, NOT |
控制转移类 | 改变程序流程 | JMP, CALL, RET, BRANCH |
I/O类 | 与外部设备交互 | IN, OUT |
串操作类 | 字符串批量处理 | MOVS, CMPS |
CPU控制类 | 控制CPU内部状态 | HLT, CLI, STI |
四、寻址方式
1. 基本概念
数据寻址:指令执行时,根据地址码字段确定操作数真实位置的过程。
目标是计算出有效地址 EA(Effective Address) ,进而取出操作数。
操作数可能来自:
- 指令本身(立即数)
- 寄存器
- 主存(需地址访问)
2. 8种常见寻址方式
图示 | 名称 | EA计算公式 | 是否访存 | 特点与用途 |
---|---|---|---|---|
(a) | 隐含寻址 | 固定寄存器(如AC) | ❌ | 指令不写地址,操作数默认在指定寄存器中,如 INC AC |
(b) | 立即寻址 | EA = D(指令中的数) | ❌ | 操作数直接写在指令里,如 ADD R1, #5 ,速度快但不可变 |
© | 直接寻址 | EA = A(地址字段) | ✅ | 地址A直接指向内存单元,如 MOV R1, [1000H] ,简单但地址空间受限 |
(d) | 间接寻址 | EA = (A) | ✅×2 | 地址A指向“地址的地址”,支持指针,如链表访问,速度慢 |
(e) | 寄存器寻址 | EA = R(寄存器内容) | ❌ | 操作数在寄存器中,如 ADD R1, R2 ,速度最快,最常用 |
(f) | 寄存器间接寻址 | EA = ® | ✅ | 寄存器R中存的是地址,如 MOV AX, [BX] ,适合数组遍历 |
(g) | 偏移寻址 | EA = ® + A | ✅ | 基址/变址 + 偏移,如 MOV AX, [BX+SI+100H] ,支持模块化和数组 |
(h) | 堆栈寻址 | EA = SP(栈顶) | ✅ | 自动管理栈顶,用于函数调用、中断,如 PUSH/POP |
计算机组成原理:指令系统
https://github.com/DukeZhu513/dukezhu513.github.io.git/post/computer-composition-principle-notes-instruction-system-1lxgsy.html