MIPS32架构与指令集初步
MIPS32架构与指令集初步
拆透MIPS32:指令如何编码、寄存器如何分工、流水线在何处翻车
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
MIPS32架构与指令集初步
拆透MIPS32:指令如何编码、寄存器如何分工、流水线在何处翻车
MIPS32架构与指令集初步-1
上一节我们把MIPS放进CPU指令集版图。本节定义:MIPS32是32位RISC指令集架构,由MIPS公司1985年商业化。Load/Store与定长指令是它的两道标签。
所有指令32位等长=所有集装箱同尺寸,吊车只需一种抓取动作,取指/译码可流水线化
MIPS32架构与指令集初步-2
CPU不懂自然语言,只能认32位长的固定二进制。MIPS32把这32位切成三种句式来表达不同意图——像中文有陈述、祈使、感叹三种句式一样,各司其职。
陈述句=I型描述事实,祈使句=J型下跳转命令,复合句=R型多寄存器组合
MIPS32架构与指令集初步-3
上页讲 MIPS32 是 RISC:所有指令都是 32 位定长。但同样 32 位,加法要装三个寄存器号加功能码,跳转要装下整个目标地址——所以字段布局分 R/I/J 三种。
不同操作对应不同字段布局,关键字段位置固定——就像不同格子填特定信息
MIPS32架构与指令集初步-4
上一页讲到 beq/bne 会改 PC,但流水线里 IF 已经把下一条指令取上来了。这条紧跟分支的指令,到底执行不执行?
厨师已接到这道菜,不论后面改不改主意,菜都会做完端上来
MIPS32架构与指令集初步-5
上页我们把指令拆成字段看,但 CPU 执行时还得解决一个问题:操作数到底在哪里?靠「寻址模式」来回答。
口袋里摸(寄存器)、手上写地址(立即)、给路名+门牌号(基址)、「往前走N步」(PC相对)
MIPS32架构与指令集初步-6
上一页拆解了指令的二进制格式,但光知道字段怎么划分还不够——字段里的数字到底怎么变成实际地址?这页看 MIPS32 的五种寻址方式。
门牌号→立即数;工位号→寄存器;楼层+房号→基址+偏移;离当前位置远近→PC相对;区域+街道→伪直接
MIPS32架构与指令集初步-7
前几页讲了 beq、bne 这些分支指令会改 PC、让 CPU 跳走。但 MIPS 有个反直觉细节:分支之后的下一条,无论跳不跳,都一定会被执行。这个必执行的指令位,就叫「延迟槽」。
方向盘已经打了,但脚已落地,那一步必须走完才能真正转过去
MIPS32架构与指令集初步-8
上页讲了逻辑运算——位与位之间『逐位算计』。还有一类操作根本不看位与位的关系,而是把整组位整体往左或往右『挪位置』——这就是移位指令。
1234→123.4 是除以10;二进制 1100 左移两位变 110000 是乘 4
本节要点
- ✓MIPS是Load/Store架构:只有lw/sw访存,其他指令操作寄存器
- ✓$0恒零、$31存ra是硬件接线保证,不是软件约定
- ✓指令格式由操作码决定,分R/I/J三型,字段不能跨型复用
- ✓默认大端序;addi做符号扩展,andi/ori做零扩展
- ✓早期MIPS分支有延迟槽,下一条必执行,是易错边界
课后思考
先独立思考,再对照参考答案。三题分别对应回顾、应用、迁移。
参考答案固定长度让指令译码和取指极其规整,流水线可切成等长阶段,提频容易。代价是同样逻辑要更多指令,代码密度比x86低约30%。
参考答案延迟槽原本是用免费指令填充分支后的停顿周期。去掉后那个周期变成气泡,N次循环约多出N个周期开销。
参考答案矩阵运算是规则乘加数据流,更适合SIMD或脉动阵列这类数据并行架构。MIPS通用寄存器吞吐矩阵元素,端口会成为瓶颈。