【问题标题】:MIPS swap two array elementsMIPS 交换两个数组元素
【发布时间】:2021-02-27 00:17:10
【问题描述】:

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

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

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

【问题讨论】:

  • 是什么让你觉得它不正确?
  • 这可以在没有临时寄存器的情况下使用异或操作来完成。
  • @ScottHunter 在 mips 架构中没有临时寄存器就无法完成
  • 你可以使用异或交换,虽然你不应该经常这样做

标签: arrays assembly mips swap


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2017-01-30
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多