[英]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.