MIPS 传递两个参数并保存

MIPS passing two arguments and saving it

我在 C 中有以下代码

int bitIndex = hash_str(input, i);

hash_str 只是我调用的一个函数。 input 是指向 char 的指针,i 是标准整数。

我想在 MIPS 中实现这个功能。我已经确定 input = $a0i = $s0 (我已经在堆栈上保存了 $s0)。

传统智慧告诉我,当谈到调用函数时,我只是

ARG I
ARG II
jal LABEL

我的难题是 $a0$s0 已经 'exist',那么我如何调用它们的 hash_str 函数?此外,我如何将其存储在 MIPS 中的整数中?

C 编译器将遵循标准调用约定,但可能有一些针对不同行为的选项。

一般来说第一个int或指针类型的参数进入$a0,第二个进入$a1,第三个进入$a2,第四个进入$a3int 或指针类型 return 值进入 $v0.

填充寄存器的顺序无关紧要,只要在调用指令 (jal) 之前将正确的值放入正确的寄存器即可。因此,您可以先将参数 2 放入 $a1,然后再将参数 1 放入 $a0,它仍然可以正常工作。

有关详细信息,请参阅此处:https://www.dyncall.org/docs/manual/manualse11.html 并向下滚动到您的架构和 ABI。