Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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
如何将C转换成MIPS汇编代码?_C_Assembly_Mips - Fatal编程技术网

如何将C转换成MIPS汇编代码?

如何将C转换成MIPS汇编代码?,c,assembly,mips,C,Assembly,Mips,或者 .data i: .word .text sign: bgtz i, IF bltz i, ELSE addi $a0, $zero, $zero j END IF: addi $a0, $zero, 1 ELSE: addi $a0, $zero, -1 END: jr $ra 我来到这里。。。在这种情况下,elseif是如何工作的。。。我试图寻找它,

或者

.data
  i:       .word
.text
    sign: 
          bgtz i, IF
          bltz i, ELSE
          addi $a0, $zero, $zero
          j END
    IF:   addi $a0, $zero, 1
    ELSE: addi $a0, $zero, -1
    END:  jr $ra

我来到这里。。。在这种情况下,elseif是如何工作的。。。我试图寻找它,但没有一个例子让我回顾和看。这个实现是否正确?

我确信一定有其他方法,但您可以编译它,然后将其反汇编。

如果
I
大于零或小于零,则进行分支并继续 如果
i=0
,则正常执行

.data
  i:       .word
.text
    sign: 
          bgtz i, IF
          bltz i, ELSE
          addi $ra, $zero, $zero
          j END
    IF:   addi $ra, $zero, 1
    ELSE: addi $ra, $zero, -1
    END:  jr $ra
<代码>。数据 i:字 .文本 签名: bgtz i,如果//如果i大于零,则转到IF bltz i,ELSE//如果i小于零,则转到ELSE addi$ra,$zero,$zero//如果我们没有分支,i不大于0,i不小于0,即i=0 j端 IF:addi$ra$zero,1//IF body j END//Note,我认为您需要这样做,以避免同时执行else体 ELSE:addi$ra,$zero,-1//ELSE正文 完:jr$ra
使用-S选项编译它以查看部件信息。i、 e
gcc file.c-S file.S

“如何将c转换为MIPS汇编代码?”-可能使用MIPS编译器?
else if
只是第一个
if
else
分支中的另一个
if
else分支中的另一个
if
,一个
if
也可以。第二个
else
也是无用的。第二个
else
是if
i==0
。此外,在这种情况下,如果使用
else,也没有什么错。如果你使用另一个
If
,你每次都让cpu做比较,即使它不需要。我实际上在上汇编语言课程,这个问题出现了,我没有答案。我写了上面的一个,但我发现在MIPS中编写代码时返回的结果很尴尬。if语句顺序是切换的,但我这样做是为了练习操作码。必须在汇编模式下使用编译器(
-S
,对于gcc)。不需要反编译,这将是x86 AT&T汇编。您需要一个命令行选项来转换为MIPS-至少可以从as开始工作。
.data
  i:       .word
.text
    sign: 
          bgtz i, IF
          bltz i, ELSE
          addi $ra, $zero, $zero
          j END
    IF:   addi $ra, $zero, 1
    ELSE: addi $ra, $zero, -1
    END:  jr $ra
.data
  i:       .word
.text
    sign: 
          bgtz i, IF // if i greater than zero, go to IF 
          bltz i, ELSE // if i less than zero go to ELSE
          addi $ra, $zero, $zero // If we didn't branch, i not > 0 and i not < 0, i.e. i = 0
          j END
    IF:   addi $ra, $zero, 1 // If body
          j END // Note, I think you need this to avoid also executing the else body
    ELSE: addi $ra, $zero, -1 // else body
    END:  jr $ra