【问题标题】:MIPS errors with %hi and %lo%hi 和 %lo 的 MIPS 错误
【发布时间】:2021-07-09 14:37:34
【问题描述】:
lui     $v0,%hi(length)
lw      $v1,%lo(length)($v0)
li      $v0,3                        # 0x3
bne     $v0,$zero,1f
div     $zero,$v1,$v0
break   7
mfhi    $v0
mflo    $v0
sw      $v0,28($fp)
lw      $a1,28($fp)
lui     $v0,%hi(game_over)
addiu   $a0,$v0,%lo(game_over)
jal     printf
nop

当我尝试为我的 MIPS 代码运行它时,它会出现以下错误:

您的程序产生了以下错误: spim:(解析器)文件measurement.s第180行上的未知字符 lui $v0,%hi(长度)

spim: (parser) 文件 measure.s 第 181 行的语法错误 指令在 0x00400038 处引用未定义符号 [0x00400038] 0x0c000000 日航 0x00000000 [init_measure] ;第159话

我需要用 %hi 和 $lo 替换代码中的其他内容吗?

编辑如下代码:

sw      $v0,16($fp)
lui     $a0,%hi(grid)
lw      $v1,12($fp)
nop
move    $v0,$v1
sll     $v0,$v0,4
subu    $v0,$v0,$v1
addiu   $v1,$a0,%lo(grid)
addu    $v1,$v0,$v1
lw      $v0,16($fp)

lui     $v0,%hi(column)
lb      $v0,%lo(column)($v0)
nop

sw      $v0,12($fp)
lui     $v0,%hi(column)
addiu   $v1,$v0,%lo(column)
lw      $v0,8($fp)
nop

addiu   $v1,$v0,-1
lui     $v0,%hi(growth)
sw      $v1,%lo(growth)($v0)
b       true
nop

我会以类似或不同的方式替换 %hi 和 % lo 吗?

【问题讨论】:

    标签: mips


    【解决方案1】:

    那些似乎是 spim 不支持的运算符。 %LO(label) 应该给你标签地址的下半部分,%HI(label) 上半部分。

    您可以替换这两条指令:

    lui     $v0,%hi(length)
    lw      $v1,%lo(length)($v0)
    

    用这个:

    la     $v0,length
    lw     $v1,0($v0)
    

    所以我们使用伪指令将标签的整个地址加载到寄存器中(在示例中为$v0),然后使用0 作为lw 偏移量直接加载其内存内容。请注意,la 伪指令将对任意标签地址使用 2 条指令(并将$at 保留为上半部分地址)。 另请注意,在您的代码中 $v0 仍将保留标签地址的上半部分,而在第二个 sn-p 中它将包含整个地址。

    类似地,而不是

    lui     $v0,%hi(game_over)
    addiu   $a0,$v0,%lo(game_over)
    

    你可以发出:

    la $a0, game_over
    

    在这种情况下,您的代码将以具有 game_over 标签地址的$a0 结尾(如在第二个 sn-p 中),而$v0 则包含该地址的下半部分。 la伪指令将标签的上半部分留在$at

    【讨论】:

    • 谢谢!您是否也可以查看我对帖子所做的编辑以进一步澄清?
    • @jelica 您可以按照与此答案相同的方式进行操作
    • lui $v0,%hi(column) / lb $v0,%lo(column)($v0) 会是 la $v0, column / lb $v0, 0($v0) 吗?抱歉只是想确认一下
    • 同样对于编辑部分的第一个代码,lui $a0,%hi(grid)和addiu $v1,$a0,%lo(网格)?
    • 是的,就像你写的那样。 CPU 的“状态”保存在它的寄存器中,因此只要不改变用于加载地址的寄存器的值,其他指令交错就没有问题。
    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    相关资源
    最近更新 更多