MIPS 交换两个数组元素

MIPS swap two array elements

假设我有一个包含 10 个元素的数组,并假设 $s1 寄存器已经加载了基地址。我将如何编写一个交换 A[4] 和 A[9] 的简单操作?

到目前为止,我已经想到了一些使用临时寄存器的方法,但我不确定它是否正确:

lw $t0, 4($s1) 
sw 4($s1), 9($s1)
sw 9($s1), $t0

假设您正在尝试交换 32 位整数数组中的项,数组中的每个项占用 4 个字节。 因此,您必须将每个索引乘以元素大小才能找到每个项目。 并且您的第二条指令无效,因为 sw 它只接收一个内存地址(目标操作数)。

所以最简单的方法是加载这两个项目,然后将它们与交换的数据一起保存:

  lw $t0, 16($s1)
  lw $t1, 36($s1)
  sw $t0, 36($s1)
  sw $t1, 16($s1)