MIPS 传递两个参数并保存
MIPS passing two arguments and saving it
我在 C 中有以下代码
int bitIndex = hash_str(input, i);
hash_str
只是我调用的一个函数。 input
是指向 char
的指针,i
是标准整数。
我想在 MIPS 中实现这个功能。我已经确定 input
= $a0
和 i
= $s0
(我已经在堆栈上保存了 $s0
)。
传统智慧告诉我,当谈到调用函数时,我只是
ARG I
ARG II
jal LABEL
我的难题是 $a0
和 $s0
已经 'exist',那么我如何调用它们的 hash_str
函数?此外,我如何将其存储在 MIPS 中的整数中?
C 编译器将遵循标准调用约定,但可能有一些针对不同行为的选项。
一般来说第一个int
或指针类型的参数进入$a0
,第二个进入$a1
,第三个进入$a2
,第四个进入$a3
。 int
或指针类型 return 值进入 $v0
.
填充寄存器的顺序无关紧要,只要在调用指令 (jal
) 之前将正确的值放入正确的寄存器即可。因此,您可以先将参数 2 放入 $a1
,然后再将参数 1 放入 $a0
,它仍然可以正常工作。
有关详细信息,请参阅此处:https://www.dyncall.org/docs/manual/manualse11.html 并向下滚动到您的架构和 ABI。
我在 C 中有以下代码
int bitIndex = hash_str(input, i);
hash_str
只是我调用的一个函数。 input
是指向 char
的指针,i
是标准整数。
我想在 MIPS 中实现这个功能。我已经确定 input
= $a0
和 i
= $s0
(我已经在堆栈上保存了 $s0
)。
传统智慧告诉我,当谈到调用函数时,我只是
ARG I
ARG II
jal LABEL
我的难题是 $a0
和 $s0
已经 'exist',那么我如何调用它们的 hash_str
函数?此外,我如何将其存储在 MIPS 中的整数中?
C 编译器将遵循标准调用约定,但可能有一些针对不同行为的选项。
一般来说第一个int
或指针类型的参数进入$a0
,第二个进入$a1
,第三个进入$a2
,第四个进入$a3
。 int
或指针类型 return 值进入 $v0
.
填充寄存器的顺序无关紧要,只要在调用指令 (jal
) 之前将正确的值放入正确的寄存器即可。因此,您可以先将参数 2 放入 $a1
,然后再将参数 1 放入 $a0
,它仍然可以正常工作。
有关详细信息,请参阅此处:https://www.dyncall.org/docs/manual/manualse11.html 并向下滚动到您的架构和 ABI。