将 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' 指令有什么意义吗?
你的结果是正确的,至少第一个是正确的。根据 here 你的第一个答案:
addi $v0, $a0, -2
jr $ra
是正确的。它使用最少的指令来提高执行速度,更不用说使用立即指令减少从内存中获取数据。查看 link 中的 table 并会告诉您:
$v0
是函数第一个 return 值应该去的寄存器。
$a0
是调用函数时使用的第一个入参寄存器。
$ra
是保存前一个跳转指令的 return 地址的寄存器。
所以有人想调用你的汇编函数,它看起来像:
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 的寄存器中相比非常慢。
如果给你:
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' 指令有什么意义吗?
你的结果是正确的,至少第一个是正确的。根据 here 你的第一个答案:
addi $v0, $a0, -2
jr $ra
是正确的。它使用最少的指令来提高执行速度,更不用说使用立即指令减少从内存中获取数据。查看 link 中的 table 并会告诉您:
$v0
是函数第一个 return 值应该去的寄存器。$a0
是调用函数时使用的第一个入参寄存器。$ra
是保存前一个跳转指令的 return 地址的寄存器。
所以有人想调用你的汇编函数,它看起来像:
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 的寄存器中相比非常慢。