【问题标题】:MIPS/QtSpim Register 1 is reserved for assembler errorMIPS/QtSpim 寄存器 1 为汇编错误保留
【发布时间】:2017-12-12 10:50:42
【问题描述】:

我正在尝试在 MIPS 中编写一个汇编程序,当我尝试使用没有伪指令的 for 循环时,我在 QtSpim 中收到错误消息,指出“寄存器 1 在文件 E:/Rechnerorganisation/ 的第 16 行为汇编程序保留Qtspim/Rechneruebung Vorgaben/minimum_finden.s slt $at, $t0, $a1 #slt (i"。谁能帮帮我?

findminimum:
addi    $t0, $zero, 1       #int i = 1
add     $t1, $zero, $zero   #beginn vom laden von int min = a[0]
sll     $t1, $t1, 2
add     $t1, $a0, $t1
lw      $t1, 0($t1)         #min = a[0
for:slt     $at, $t0, $a1       #slt (i<n) # line 16
beq     $at, $zero, endfor  #if(i>=n) go to endfor
sll     $t2, $t0, 2     
add     $t2, $a0, $t2

【问题讨论】:

  • MIPS 有很多其他的规则,所以最简单的方法就是使用$t3。如果您已经用完 $t0 .. $t9 并且没有任何其他 $a$v 或其他您想要破坏的寄存器,您只需要让您的汇编器让您使用 $at。 (并不是说使用$at 有什么问题,或者问你是否好奇。)

标签: assembly mips qtspim


【解决方案1】:

根据某些google group post,您可以关闭at 仅暂时保留给汇编程序:

    .set noat   # switch off assembler warning about $at usage
    ... your code using $1 ...
    .set at     # switch on assembler warning about $at usage

没有验证自己,我只安装了 MARS,在那里我可以在没有任何警告或错误的情况下利用 at,只是我自己承担风险(无法通过伪指令以隐藏的方式识别我在哪里使用 at - 但我总是用完全反汇编进行调试,所以我会尽早发现这样的问题。

编辑:spim documentation 中也提到了它,所以它应该可以工作。

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-25
    • 2015-03-27
    • 1970-01-01
    相关资源
    最近更新 更多