如何将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
是ifi==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