'MARS'中的汇编代码%hi和%lo如何改成运行?

How to change the assembly code %hi and %lo to run in 'MARS'?

我使用 'compiler explorer' 将 C++ 转换为 MIPS 但由于 %hi 和 %lo

,它在 MARS 中效果不佳

我知道我应该更改部分,但我不知道如何更改...

请帮忙

$L5:
        lui     ,%hi($LC1)
        lwc1    $f0,%lo($LC1+4)()

        lwc1    $f1,%lo($LC1)()
        b       $L3
$LC1:
        .word   1100470148
        .word   0
$L17:
        lw      ,16($fp)
        addiu   ,,1
        sw      ,16($fp)
        lui     ,%hi(savepath)
        sll     ,,2
        addiu   ,,%lo(savepath)
        addu    ,,
        li      ,1                        # 0x1
        sw      ,0()
        move    $sp,$fp
        lw      $fp,36($sp)
        addiu   $sp,$sp,40
        j       

据我所知,火星上不可能有类似气体 %lo(label) 或 %hi(label) 的特性。 一个简单的解决方法是使用标准宏 la,它使用一对或 lui/ori 指令将标签加载到寄存器中。

您的代码的第一部分可以这样重写:

$L5:
        la      , $LC1
        lwc1    $f0,4()
        lwc1    $f1,0()
        b       $L3
$LC1:
        .word   1100470148
        .word   0

由于 la 宏被扩展为两条指令,与使用 %hi/%lo 相比,这是一条额外的指令,但它可以工作。