You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MIPS指令lw与sw的含义、offset_value及处理器执行细节问询

MIPS lw 和 sw 指令详解

核心概念:offset_value 是什么?

offset_value 是指令内嵌的16位有符号立即数,取值范围为 -32768 到 32767。它必须和基址寄存器(此处为 $t2)中的数值相加,计算出实际要访问的内存有效地址——这种「基址+偏移量」的寻址方式,是MIPS中访问数组元素、结构体成员的常用手段。


1. lw $t1, offset_value($t2):加载字到寄存器

这条指令的作用是从内存读取一个32位字,存入目标寄存器$t1,执行流程分3步:

  • 计算有效内存地址:有效地址 = $t2 存储的数值 + offset_value
  • 从上述有效地址对应的内存位置,读取一个完整的32位字(MIPS为32位架构,一个字占4个连续字节,标准要求地址必须是4的倍数,否则会触发对齐异常)
  • 将读取到的32位数值写入寄存器$t1,覆盖其原有内容

举个实际场景:如果$t2存的是数组首地址0x10000000,offset_value设为8,那么有效地址就是0x10000008,对应数组的第3个元素(每个元素占4字节,8/4=2,下标从0开始),执行lw后该元素的值就会被放到$t1中。


2. sw $t1, offset_value($t2):存储寄存器内容到内存

这条指令的作用是把寄存器$t1中的32位字,写入指定内存位置,执行流程分3步:

  • 和lw一样计算有效地址:有效地址 = $t2 存储的数值 + offset_value
  • 取出寄存器$t1中存储的32位数值
  • 将该数值写入上述有效地址对应的内存位置(同样要求地址4字节对齐)

沿用之前的例子:$t2为0x10000000,offset_value为8,$t1的值是0x12345678,执行sw后,内存地址0x10000008到0x1000000B的4个字节会被写入对应数值(MIPS默认大端模式,高字节存低地址)。


补充细节

  • 基址寄存器$t2通常用来存储数组首地址、结构体起始地址这类固定基准,offset_value用来定位具体元素或成员,无需频繁修改基址,仅调整偏移量就能访问不同位置
  • 由于offset_value是16位有符号数,可访问基址前后32KB范围内的内存(32767字节≈32KB)

内容的提问来源于stack exchange,提问作者shree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 19:01:05