【问题标题】:MIPS Assembly accessing an array while using a variable as the offsetMIPS 程序集在使用变量作为偏移量时访问数组
【发布时间】:2017-11-19 05:22:31
【问题描述】:

到底有没有使用变量作为数组的偏移量?例如,我知道正常的偏移量和数组是这样工作的:

ARRAY: .word 0,1,2,3,4,5,6,7,8,9
lw $t6, ARRAY
lw $t7, 0($t6)

0 处的索引将被加载到 t7 中,但我想要做的是:

 ARRAY: .word 0,1,2,3,4,5,6,7,8,9
 lw $t6, ARRAY
 li $t7, 0
 lw $t8, $t7($t6)

这样我可以在代码中增加变量 t7,而无需硬编码偏移量。我不断收到语法错误,所以我想我正在尝试做的事情是错误的。无论如何我可以做这样的事情来增加数组的索引吗?

【问题讨论】:

  • 不支持。但是由于 MIPS 有很多通用寄存器,你可以将 $t6$t7 加到一个空闲寄存器中并不断增加它。而且您不必猜测您正在做的事情是否受支持; MIPS32™ 程序员架构第二卷:MIPS32™ 指令集列出了所有可用指令及其预期操作数。

标签: arrays assembly mips offset


【解决方案1】:

要通过变量递增数组,您必须使用以下设置:

ARRAY: .word 1,2,3,4,5,6,7,8,9
li $t2, 0
lw $t3, ARRAY($t2)
addi $t2, $t2, 1

【讨论】:

  • 请注意,除非ARRAY 的地址在0xFFFF8000-0x00007FFF 范围内,否则您的lw 指令将不能直接编码为MIPS 指令。汇编器可能仍将其作为 伪指令 接受,它将转换为 2 个或更多实际 MIPS 指令。您可以在 SPIM 或 MARS 等模拟器中轻松看到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 2018-08-29
  • 1970-01-01
相关资源
最近更新 更多