MIPS指令类型
MIPS 指令
操作码的长度决定了可以提供多少个指令数;操作码的编码一定要有唯一的解释
一、计算机的寻址方式
- 立即寻址:指令中给出操作数
- 直接寻址:指令中给出操作数所在的有效地址
- 间接寻址:指令中给出一个间接地址,间接地址在内存中寻找直接地址,直接地址读出操作数
- 寄存器间接寻址:指令给出寄存器编号,根据寄存器内容找出操作数
- 基址寻址:指令中给出一个寄存器编号,同时给出一个偏移地址,基址寄存器内容+偏移地址从内存中取操作数
二、操作码编码
- 定长操作码编码
- 扩展操作码编码
三、MIPS 的指令可以分为 3 种操作类型
- R 型
- I 型
- J 型
1、R 型指令
- OP:000000 由 func 来决定他的功能
- rs、rt 是两个源操作数所在的寄存器号
- rd 是目的操作数所在的寄存器号
- shamt 是位移量,执行移位操作的时候指明需要移动的次数

同时也要牢记 R 型指令的指令表:

2、I 型指令
- 操作功能由 OP 决定
- rs 是第一个源操作数,immediate 是第二个源操作数
- rt 是目的操作数所在的寄存器编号

I 型指令的操作表:

- 在 I 型指令中,addi 指令是需要进行符号位扩展,但是 andi、ori、xori 指令只需要进行零扩展即可
- sw、lw、beq、bne 等操作都是进行符号位扩展
3、J 型指令
- 操作功能由 OP 决定
- 转移地址:26 位(立即数)

J 型指令操作表:

跳转指令寻址:
伪直接寻址
PC 相对寻址
异常和中断
Cache 映射
直接映射
主存中的每个块只能放在 Cache 中的唯一位置(行)
Cache 行号=主存块号 mod Cache 行数
全相联映射
主存中的每个块可放置在 Cache 中的任何位置(行)
N 路组相联映射
一个 Set 是若干块的集合
主存和 Cache 中的组都具有同样大小(组内块数相同)
“N 路”指每个组中包含的块(行)的数目,也称为相联度
主存中的一个块首先被映射到 Cache 中的唯一一组中,然后该块可以放在这个组的任何一行中
总结
Cache 结构的表示
Cache 块替换策略
LRU
Cache 写命中策略
写直达
写回
写分配
写不分配
虚拟索引虚拟标记(VIVT)

优点: 不需要每次访存的时候把虚拟地址经过 MMU 转换为物理地址缩短了访存关键路径, 提升了频率, 提升了 Cache 访问速度
缺点: 即使 Cache 命中,也需要访问并更新 TLB(两者可以并行) 进程切换需要冲刷 Cache,或者增加 PID(进程 ID)位 歧义问题(ambiguity) 别名问题(alias)
歧义问题: 相同的虚拟地址映射到不同的物理地址 假设 A 进程的虚拟地址 0x4000 映射物理地址 0x2000,B 进程的虚拟地址 0x4000 映射物理地址 0x3000。A 进程切换到 B 进程,导致 0x4000 地址访问命中,而对应的是物理地址 0x2000 中的数据,从而出现错误 解决方案:冲刷(flush)Cache(使用专门的 Cache 指令,例如 MIPS 中的 Cache),保证切换后的进程不会错误的命中上一个进程的缓存数据
别名问题: 不同的虚拟地址映射到相同的物理地址,例如进程间通信假设虚拟地址 0x2000 和 0x4000 都映射到相同的物理地址 0x3000,其中虚拟地址中的[15…4]位作为 index,此时同一物理地址数据被加载到不同的 Cache Line,容易破坏数据一致性。
物理索引物理标记

从虚拟地址中抽取 index 查找 Cache,从物理地址中抽取 tag 进行比较 Cache 的查找和物理地址的转换同时进行,性能优于 PIPT 不存在歧义问题,但依然存在别名问题。
VIPT 中的别名问题
直接映射:当 Cache 容量不大于页大小时,将不会产生别名问题 组相联:当 Cache 中一路的容量不大于页大小时,将不会产生别名问题 此时,index 位于页偏移之中,虚拟地址和物理地址对应的 index 相同 VIPT 相当于 PIPT
解决方案 1:提高相联度,将索引 index 控制在 page offset 字段范围之内 解决方案 2:使用大页,将索引 index 控制在 page offset 字段范围之内 解决方案 3:调整虚实映射,避免相同物理地址数据加载到不同 Cache 行对于直接相联,在建立共享映射的时候,虚拟地址都是按照 Cache 大小对齐对于组相联,在建立共享映射的时候,虚拟地址都是按照一路 Cache 大小对齐 解决方案 4:但满足不了将索引 VA 的 index 控制在 page offset 字段范围之内时,需要操作系统提供支持,即 Page Color 功能。
- Title: MIPS指令类型
- Author: Ryan Lu
- Created at : 2024-12-04 20:13:58
- Updated at : 2025-11-13 03:13:49
- Link: http://ryan-hub.site/1c9b239f2e4a/
- License: This work is licensed under CC BY-NC-SA 4.0.
