簡體   English   中英

將C ++函數轉換為MIPS

[英]Convert C++ function to MIPS

如果給出:

calc (int b) {
return b - 2;
}

它將如何轉換為MIPS?

我考慮過以下幾點:

addi $v0, $a0, -2
jr $ra
***********************
jr $ra
addi $v0, $a0, -2
***********************
addi $v0, $a0, 2
jr $ra 
***********************
lw $v0, 0($a0)
addi $v0, $v0, -2
jr $ra

我只是在學習MIPS中的功能,不勝感激建議。 在這種情況下使用“ lw”指令有什么意義嗎?

您的結果是正確的,至少是第一個。 根據這里您的第一個答案:

addi $v0, $a0, -2
jr $ra

是正確的。 它使用的指令量最少,可以提高執行速度,更不用說使用立即指令可以減少從內存中的提取。 查看鏈接中的表格,然后會告訴您:

  • $v0是函數的第一個返回值應存放的寄存器。
  • $a0是調用函數時要使用的第一個輸入參數的寄存器。
  • $ra是保存上一條跳轉指令返回地址的寄存器。

因此,有人想調用您的匯編函數,如下所示:

int x = calc(5); // This line is the `C` equivalent and not part of assembly code.

大會將是:

li $a0, 5  # Load immediate the value 5 into register $a0.
jal __calc # Jump to the sub routine '__calc' and store return address in $ra.
           # Result will now be in $v0.
...

__calc:
  addi $v0, $a0, -2
  jr $ra 

如果可以,請盡量遠離lw說明。 它們進入RAM並獲取內存,與將值保留在CPU寄存器中相比,這是非常慢的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM