'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
相比,这是一条额外的指令,但它可以工作。
我使用 '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
相比,这是一条额外的指令,但它可以工作。