Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何将程序集代码%hi和%lo更改为在';火星';?_Assembly_Mips_Mars Simulator - Fatal编程技术网

Assembly 如何将程序集代码%hi和%lo更改为在';火星';?

Assembly 如何将程序集代码%hi和%lo更改为在';火星';?,assembly,mips,mars-simulator,Assembly,Mips,Mars Simulator,我使用“编译器资源管理器”将C++转换为MIPS。 但是由于%hi和%lo的原因,它在火星上不能很好地工作 我知道我应该换个角色,但我不知道怎么换 请帮忙 $L5: lui $2,%hi($LC1) lwc1 $f0,%lo($LC1+4)($2) lwc1 $f1,%lo($LC1)($2) b $L3 $LC1: .word 1100470148 .word

我使用“编译器资源管理器”将C++转换为MIPS。 但是由于%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

顺便说一句,在火星上不可能有像气体%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
相比,这是一条额外的指令,但它可以工作。

使用
la
加载地址。不要重复发布你的问题。这可能是你在火星上不用硬编码数字地址的最好方法,但如果
la
扩展到
lui
+
ori
addiu
,则会浪费指令。最初的版本能够在地址的下半部分使用寻址模式的16位立即数。您可以在MARS中执行类似于
lwc1$f0、标签($零)
的操作,并且您可以选择一个内存模型,其中
.data
从地址
0
开始,因此16位立即数就足够了。(但是,如果汇编程序在汇编时不知道地址很小,则可以使用
lui
扩展每个这样的负载。)
$L5:
        la      $2, $LC1
        lwc1    $f0,4($2)
        lwc1    $f1,0($2)
        b       $L3
$LC1:
        .word   1100470148
        .word   0