Как изменить код сборки% hi и% lo для запуска в 'MARS'? - PullRequest
0 голосов
/ 14 мая 2019

Я использовал «проводник компилятора» для преобразования c ++ в MIPS, но он не очень хорошо работает в MARS из-за% hi и% lo

Я знаю, что должен изменить часть, но я незнать, как изменить ...

Пожалуйста, помогите

$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 Ответ

1 голос
/ 14 мая 2019

AFAIK, на Марсе нет возможности использовать что-то вроде газа% lo (метка) или% hi (метка).Простой обходной путь - использовать стандартный макрос 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, но она работает.

...