2013-12-16 96 views
-2
int sign (int i) { 
if (i > 0) 
return 1; 
else if (i < 0) 
return -1; 
else 
return 0; 

MIPS如何将C转换成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 

或者......

.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 

我起身到这里...怎么做在这种情况下ELSEIF工作......我试图寻找它,但有并不是我要审查和看看的例子。这个实现是否正确?

+7

“如何将C转换为MIPS汇编代码?” - 使用MIPS编译器,也许? – 2013-12-16 22:42:17

+0

'else if'只是恰好在第一个'if'的'else'分支中的另一个'if'。 – Barmar

+0

在'else if'的示例C代码中没有合乎逻辑的原因,单个'if'也可以。第二个'else'也没用。 – usr2564301

回答

0

我确定必须有另一种方式,但是你可以编译它然后反汇编它。

+2

只需在汇编模式下使用编译器('-S'代表gcc)。无需反编译 – ldrumm

+0

好得多:-) – aalku

0

如果i大于零或小于零并且如果i = 0正常执行则继续 这可以通过分支工作。

.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 
3

编译使用-S选项查看程序集信息。即gcc file.c -S file.s

+2

这将是x86 AT&T组件。你需要一个命令行选项来转换为MIPS - 至少可以使用as。 – gnometorule