2013-12-16 135 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