MIPS哪些指令会从内存读取数据?缓存与寄存器相关问题咨询
MIPS缓存与寄存器相关问题解答
数据缓存读取主存的触发条件
数据缓存仅在两种条件同时满足时才会从主存读取数据:
- 当前执行的指令需要读取内存中的业务数据
- 目标内存地址对应的数据不在数据缓存中(即缓存不命中,包括有效位为0、标签不匹配两类场景)
如果数据已经在缓存中命中,会直接从缓存返回数据,不需要访问主存。如果指令本身不需要读取内存数据,不会触发数据缓存的任何查询操作,更不会读取主存。
为什么addi指令不会读取内存,是不是只有lw需要读内存
MIPS是典型的加载/存储架构,核心规则是:只有加载、存储类指令可以直接访问内存,其余运算类指令的操作数只能来自寄存器或指令本身携带的立即数。
addi是立即数加法指令,格式为addi $rd, $rs, imm,它的两个源操作数一个来自寄存器$rs,另一个是直接编码在指令二进制中的立即数imm,运算结果直接写入目标寄存器$rd,全程不需要读取内存中的数据,所以不会触发数据缓存访问,更不会读取主存。- 并非只有
lw需要读取内存,所有加载类指令都需要读取内存,比如加载半字的lh、加载字节的lb、加载无符号半字的lhu等,这类指令的功能都是从指定内存地址读数据写入寄存器,都会触发数据缓存查询,缓存不命中时就会从主存读取对应数据块。
注意:所有指令本身的机器码读取走的是指令缓存通路,哪怕是
addi这类不访问数据内存的指令,它本身的指令内容也是从内存经指令缓存交给CPU的,这部分和数据缓存无关。
仅操作寄存器的指令会不会访问主存和数据缓存
是的。仅操作寄存器的指令(比如寄存器加法add $rd, $rs, $rt、寄存器减法sub $rd, $rs, $rt、移位指令sll $rd, $rt, shamt等)的所有操作数都来自寄存器,运算结果也直接写回寄存器,全程不需要访问内存中的业务数据,因此完全不会触发数据缓存访问,也不会访问主存的数据区。
寄存器是不是存储层级的最高层级
是的。现代计算机的存储层级从顶到底(速度从快到慢,容量从小到大)的顺序为:寄存器 → 一级缓存(拆分指令缓存和数据缓存) → 二级缓存 → 三级缓存 → 主存(内存) → 外存(硬盘、闪存等)。寄存器是距离CPU运算核心最近、读写延迟最低、容量最小的存储单元,属于存储层级的最顶层。
内容的提问来源于stack exchange,提问作者Don_twice
相关产品推荐
相关产品推荐

