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

时间:2019-05-14 06:23:20

标签: assembly mips mars-simulator

我使用“编译器资源管理器”将c ++转换为MIPS 但由于%hi和%lo

,它在MARS中效果不佳

我知道我应该更改零件,但是我不知道如何更改...

请帮助

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

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

1 个答案:

答案 0 :(得分:1)

AFAIK,火星中没有办法具有气体%lo(label)或%hi(label)功能。 一个简单的解决方法是使用标准宏la,该宏通过一对或lui / ori指令将标签加载到寄存器中。

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

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

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