首页 > 解决方案 > 如何在 MIPS 中使用函数

问题描述

我刚开始使用 MIPS,并且对从 MIPS 中的 main 调用函数感到困惑,例如如何发送参数并从函数中获取返回值。一点帮助将不胜感激。

标签: mips

解决方案


下面是一个简单的代码来了解如何在 MIPS 中实现函数。这里我们只是使用一个函数来计算三个值的总和。

.data
A: .word 2
B: .word 3
C: .word 9
Answer: .word 0
 
.text
.globl main

main:

#These are basically the parameters
lw $a0, A   #Load value from memory location A into the register $a0
lw $a1, B   #Load value from memory location B into the register $a1
lw $a2, C   #Load value from memory location C into the register $a2

jal Sum     #Calling the function

sw $v0, Answer  #Storing the contents of $v0 into the memory location Answer(The returning value)

li $v0, 10
syscall
.end main

.globl Sum      #Function for Sum
.ent Sum

Sum:

add $v0, $a0, $a1
add $v0, $v0, $a2

jr $ra
.end Sum

您可以关注评论并查看该功能的使用方式。以下是一些需要注意的要点: 寄存器和堆栈的组合用于参数转换。整数参数使用寄存器 $a0、$a1、$a2、$a3 传递,浮点值可以使用 $f12 和 $f14 传递。第一个参数应该在 $a0 或 $f12 中传递,具体取决于参数是整数还是浮点数。同样,第二个参数应该在 $a1 或 $f14 中传递。第三个参数必须在 $a2 中传递整数,如果第三个参数是浮点数,那么它必须在堆栈上传递。同样,第四个参数必须在 $a3 上传递,如果第四个参数是浮点数,那么它必须在堆栈上传递。任何其他参数都在堆栈上传递。整数寄存器 $v0/$v1 用于从函数调用返回整数值,浮点寄存器 $f0 和 $f1 用于从函数返回浮点值。函数调用如下:jal FunctionName,而函数返回如下:jr $ra。您还可以使用下面提到的书作为使用名为 QTSpim 的软件学习 MIPS 的指南,它可能会帮助您解决任何其他困惑。使用 QtSpim 进行 MIPS 汇编语言编程 Ed Jorgensen 博士 版本 1.1.50 2019 年 7 月。希望这会有所帮助。您还可以使用下面提到的书作为使用名为 QTSpim 的软件学习 MIPS 的指南,它可能会帮助您解决任何其他困惑。使用 QtSpim 进行 MIPS 汇编语言编程 Ed Jorgensen 博士 版本 1.1.50 2019 年 7 月。希望这会有所帮助。您还可以使用下面提到的书作为使用名为 QTSpim 的软件学习 MIPS 的指南,它可能会帮助您解决任何其他困惑。使用 QtSpim 进行 MIPS 汇编语言编程 Ed Jorgensen 博士 版本 1.1.50 2019 年 7 月。希望这会有所帮助。


推荐阅读