指令系统(Instruction Set Architecture, ISA)是软件和硬件之间的接口,定义了程序员(或编译器)可见的机器资源。
ISA 包括:
| 指令格式 | 示例 | 说明 |
|---|---|---|
| 三地址指令 | OP A1, A2, A3 | A3 = A1 OP A2 |
| 二地址指令 | OP A1, A2 | A1 = A1 OP A2 |
| 一地址指令 | OP A1 | ACC = ACC OP A1 |
| 零地址指令 | OP | 如 NOP、RET |
| 寻址方式 | 有效地址 | 说明 |
|---|---|---|
| 立即寻址 | 操作数在指令中 | 速度快,灵活性低 |
| 直接寻址 | $EA = A$ | 地址码直接给出 |
| 间接寻址 | $EA = (A)$ | 地址码指向的内存单元存 EA |
| 寄存器寻址 | $EA = R$ | 操作数在寄存器中 |
| 寄存器间接 | $EA = (R)$ | 寄存器中存的是地址 |
| 基址寻址 | $EA = (BR) + A$ | 基址寄存器 + 偏移 |
| 变址寻址 | $EA = (IX) + A$ | 变址寄存器 + 偏移 |
| 相对寻址 | $EA = (PC) + A$ | PC + 偏移,用于跳转 |
| 堆栈寻址 | $EA$ = 栈顶 | PUSH/POP 操作 |
代表:x86 架构(Intel/AMD)。特点:指令数量多(数百条)、指令长度不固定、寻址方式多、指令功能复杂、大多数指令多个时钟周期完成、微程序控制。
代表:ARM、MIPS、RISC-V。特点:指令数量少(几十到上百条)、指令长度固定、寻址方式少、指令功能简单、大多数指令 1 个时钟周期完成、硬布线控制、Load/Store 架构。
| 特性 | CISC | RISC |
|---|---|---|
| 指令数量 | 多(>200) | 少(<100) |
| 指令长度 | 可变 | 固定 |
| 寻址方式 | 多(>10 种) | 少(<5 种) |
| 访存指令 | 多种指令可访存 | 仅 Load/Store |
| 通用寄存器 | 较少 | 较多(>32) |
| 流水线 | 难以优化 | 容易实现 |
| 控制方式 | 微程序 | 硬布线 |
| 代码密度 | 高 | 较低 |
| 编译器复杂度 | 低 | 高 |
某机有 256 个操作码、64 个寄存器,采用定长指令字 32 位:
操作码位数 = ⌈log₂256⌉ = 8 位 寄存器编号位数 = ⌈log₂64⌉ = 6 位 三地址指令(寄存器型): 操作码(8) + R1(6) + R2(6) + R3(6) = 26 位,剩余 6 位可扩展 二地址指令(寄存器 + 立即数): 操作码(8) + R1(6) + 立即数(18) 立即数范围:-131072 ~ 131071
基址寻址($EA = BR + A$):BR 由操作系统设置、用户不可修改,A 可改;用途为程序重定位、多道程序。
变址寻址($EA = IX + A$):IX 由用户设置,A 由指令给出(常为数组首地址);用途为数组访问、循环。
$PC = 0x1000$,指令 `JMP +0x20`:
EA = PC + 0x20 = 0x1000 + 0x20 = 0x1020 注意:执行时 PC 已更新为下一条指令地址 若指令长度 2B,则 PC = 0x1002 EA = 0x1002 + 0x20 = 0x1022
定长指令字 16 位、4 位基本操作码,设计 15 三地址 + 15 二地址 + 15 一地址 + 16 零地址指令:
三地址:4 位 OP + 4+4+4 = 16 位,取 15 种(留 1111 扩展) 二地址:1111 + 4 位 OP + 4+4,取 15 种(留 1111_1111) 一地址:1111_1111 + 4 位 OP + 4,取 15 种 零地址:1111_1111_1111 + 4 位 OP,16 种
↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。