如何在MIPS中使用函数
我刚开始使用MIPS,对MIPS中main函数的调用感到困惑,比如如何发送参数并从函数中获取返回值。如果您能提供一些帮助,我们将不胜感激。以下是一段简单的代码,可以帮助您了解如何在MIPS中实现函数。这里我们只是使用一个函数来计算三个值的和如何在MIPS中使用函数,mips,Mips,我刚开始使用MIPS,对MIPS中main函数的调用感到困惑,比如如何发送参数并从函数中获取返回值。如果您能提供一些帮助,我们将不胜感激。以下是一段简单的代码,可以帮助您了解如何在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
.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中传递。对于integer,第三个参数必须以$a2形式传递,如果第三个参数是float,则必须在堆栈上传递。类似地,第四个参数必须在$a3上传递,如果第四个参数是float,则必须在堆栈上传递。在堆栈上传递任何附加参数。
整数寄存器$v0/$v1用于从函数调用返回整数值,浮点寄存器$f0和$f1用于从函数返回浮点值。
对函数的调用如下所示:
日本航空公司名称,
鉴于函数的返回如下所示:
jr$ra。
您还可以使用下面提到的书作为使用QTSpim软件学习MIPS的指南,它可能会帮助您解决任何其他困惑。
MIPS汇编语言编程使用QtSpim Ed Jorgensen博士。版本1.1.50 2019年7月。
希望这有帮助。- 向函数发送参数: 使用$a0或$f12($a0如果是整数或$f12如果是浮点单精度或双精度)传递第一个参数。 使用$a1或$f14($a1如果是整数,则为a1;如果是浮点单精度或双精度,则为$f14)传递第二个参数。 使用$a2传递第三个参数(仅限整数)。如果第三个参数是float,则必须在堆栈上传递它。 使用$a3传递第四个参数(仅限整数),但如果第四个参数是float,则必须在堆栈上传递
- 从函数返回值:
函数的浮点值。函数初始化:
.globl functionName
.ent functionName
functionName:
#Code here
.end functionName
呼叫约定:
.globl functionName
.ent functionName
functionName:
#Code here
.end functionName
-论据:
◦ 第一个参数以$a0或$f12形式传递(如果为整数,则为$a0;如果为整数,则为$f12)
浮动单精度或双精度)。
◦ 第二个参数以$a1或$f14的形式传递(如果为整数,则为$a1;如果为整数,则为$f14)
浮动单精度或双精度)。
◦ 第三个参数传入$a2(仅限整数)。
◦ 如果第三个参数是float,则必须在堆栈上传递它。
◦ 第四个参数传入$a3(仅限整数)。
◦ 如果第四个参数是float,则必须在堆栈上传递它
其余参数在堆栈上传递。应在堆栈上放置参数
按相反的顺序在堆栈上。按引用调用参数加载地址(la指令)
并按值调用加载值
调用函数:
为了从main调用函数,您将使用jal functionName
返回函数:
为了返回到主函数,您将使用jr$ra
功能结果:
整数寄存器$v0或$v1/$v0用于从
函数/过程调用。浮点寄存器$f0和$f1用于返回
函数/过程中的浮点值
注册保存约定:
MIPS调用约定要求仅保存特定寄存器(而不是全部寄存器)
跨过程调用。
•程序必须保存整数寄存器$s0-$s7。
•程序必须保存浮点寄存器$f20-$f30