MIPS lw 指令究竟是做什么的?

问题描述

帮助!我是组装新手,我试图找出这个命令的作用

lw %t5,100($t8)

我也明白左边是目的地,右边是源

lw Reg.Dest,Offset(Reg.Source)

我相信它将数据从一个地方写入另一个地方,但我不明白细节。

有人可以向我解释命令或指出正确的方向吗?

解决方法

lw 是“加载字”的简写,这就是指令的作用——它将一个字的数据从内存加载(读取)到寄存器中。

第一个操作数(目标)因此是一个寄存器,而第二个操作数指定内存中的一个位置。位置(地址)是通过向寄存器的内容添加偏移量来计算的。

,

您提供的以下定义是正确的。

lw Reg.Dest,Offset(Reg.Source)

让我们将其翻译成您的代码。

lw $t5,100($t8)

这里有加载字 (lw) 指令,包含 Reg.Dest = $t5Offset = 100Reg.Source = $t8

总之,这就是说将地址 $t8 + 100 处的 4 个字节加载到寄存器 $t5

,

lw 是 I-Type 指令:

  +--------+----+----+-----------+
I | opcode | rs | rt | immediate |   (instruction fields)
  +--------+----+----+-----------+
       6     5     5      16         (bit length)

它在 RTL (register transfer level/logic) 中有以下规范:

R[rt] = M[R[rs]+SignExtImm]

哪里

SignExtImm = { 16{immediate[15]},immediate }

汇编语法为 lw rt,immediate(rs),其中 rtrsimmediate 分别是寄存器名称和一个小的整数常量。

有关所有说明,请参阅 MIPS green sheet

请注意,lw 操作码通常还支持多种伪指令形式,这些伪指令形式可以扩展为多个实际的 MIPS 指令。要了解它们的作用,我们可以检查扩展的各个指令。一种形式对于加载全局变量特别有用:lw rt,globalDataLabel。在这种形式中,没有提供基址寄存器 (rs)。它扩展为2条指令,完成将全局字加载到目标寄存器中。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...