gpt4 book ai didi

c++ - 将 C++ 函数转换为 MIPS

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:19 24 4
gpt4 key购买 nike

如果给定:

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

是正确的。它使用最少的指令来提高执行速度,更不用说使用立即指令减少从内存中获取数据。查看链接中的表格,会告诉您:

  • $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 的寄存器中相比非常慢。

关于c++ - 将 C++ 函数转换为 MIPS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46500112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com