指令系统¶
概述¶
指令系统
指令系统是CPU所能执行的全部指令的集合,是计算机硬件和软件的主要界面。
指令格式¶
指令基本格式
指令 = 操作码(OP) + 地址码(AD)
指令字长度¶
- 单字长指令: 指令长度等于机器字长
- 半字长指令: 指令长度等于半个机器字长
- 双字长指令: 指令长度等于两个机器字长
地址码格式¶
graph TB
A[指令格式] --> B[零地址指令]
A --> C[一地址指令]
A --> D[二地址指令]
A --> E[三地址指令]
A --> F[四地址指令]
style A fill:#E3F2FD
style B fill:#E8F5E9
style C fill:#FFF3E0
style D fill:#F3E5F5
style E fill:#FCE4EC
style F fill:#E0F2F1
1. 零地址指令
零地址指令
无操作数指令,用于停机、空操作等。
格式: OP
示例: HLT(停机)、NOP(空操作)
2. 一地址指令
一地址指令
单操作数指令,操作数既是源又是目的。
格式: OP A1
示例: INC AX(加1)、DEC AX(减1)
3. 二地址指令
二地址指令
双操作数指令,最常用的指令格式。
格式: OP A1, A2
功能: (A1) OP (A2) → A1
示例: ADD AX, BX(加法)、MOV AX, BX(传送)
4. 三地址指令
三地址指令
两个源操作数,一个目的操作数。
格式: OP A1, A2, A3
功能: (A2) OP (A3) → A1
寻址方式¶
寻址方式
确定操作数有效地址的方法。
1. 立即寻址¶
立即寻址
操作数直接包含在指令中。
格式: OP #n
示例: MOV AX, #100
特点:
- 速度快,无需访问内存
- 操作数固定,灵活性差
2. 直接寻址¶
直接寻址
指令中直接给出操作数的内存地址。
格式: OP (ADDR)
示例: MOV AX, (1000H)
特点:
- 直观简单
- 地址固定,灵活性差
- 寻址范围受指令长度限制
3. 间接寻址¶
间接寻址
指令给出的是操作数地址的地址。
格式: OP ((ADDR))
特点:
- 寻址范围大
- 需要多次访问内存
- 速度较慢
4. 寄存器寻址¶
寄存器寻址
操作数存放在寄存器中。
格式: OP R
示例: MOV AX, BX
特点:
- 速度快,无需访问内存
- 寻址范围受寄存器数量限制
5. 寄存器间接寻址¶
寄存器间接寻址
寄存器中存放操作数的内存地址。
格式: OP (R)
示例: MOV AX, (BX)
特点:
- 寻址范围大
- 比间接寻址快
6. 变址寻址¶
变址寻址
有效地址 = 变址寄存器内容 + 形式地址
格式: OP (R + D)
示例: MOV AX, 100(BX)
应用: 数组访问、循环处理
7. 基址寻址¶
基址寻址
有效地址 = 基址寄存器内容 + 形式地址
应用: 多道程序设计、重定位
8. 相对寻址¶
相对寻址
有效地址 = PC内容 + 形式地址
应用: 转移指令、位置无关代码
指令类型¶
| 类型 | 功能 | 示例 |
|---|---|---|
| 数据传送 | 在寄存器/存储器间传送数据 | MOV、PUSH、POP |
| 算术运算 | 执行算术运算 | ADD、SUB、MUL、DIV |
| 逻辑运算 | 执行逻辑运算 | AND、OR、NOT、XOR |
| 移位操作 | 执行移位操作 | SHL、SHR、ROL、ROR |
| 转移指令 | 改变程序执行顺序 | JMP、CALL、RET |
| 控制指令 | 控制CPU状态 | HLT、NOP、CLI、STI |
CISC与RISC¶
CISC(复杂指令集计算机)¶
CISC特点
- 指令系统复杂,指令数量多
- 指令格式多样,长度不固定
- 寻址方式复杂
- 代表: x86架构
RISC(精简指令集计算机)¶
RISC特点
- 指令系统简单,指令数量少
- 指令格式固定,长度统一
- 寻址方式简单
- 代表: ARM、MIPS、RISC-V