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

时间:2013-12-16 22:36:21

标签: c assembly mips

int sign (int i) { 
 if (i > 0) 
 return 1; 
 else if (i < 0) 
 return -1; 
 else 
 return 0; 

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是如何工作的...我试图搜索它但是没有例子可供我查看并查看。这个实现也是正确的吗?

3 个答案:

答案 0 :(得分:3)

使用-S选项编译它以查看装配信息。即gcc file.c -S file.s

答案 1 :(得分:0)

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

答案 2 :(得分: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