我在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
已经"存在",所以我怎么用它们调用hash_str
函数?此外,如何将其存储在MIPS中的整数中?
C编译器将遵循标准调用约定,尽管可能有一些不同行为的选项。
一般来说,第一个int
或指针类型参数在$a0
中,第二个在$a1
中,第三个在$a2
中,第四个在$a3
中。int
或指针类型返回值进入$v0
填充寄存器的顺序并不重要,只要在调用指令(jal
)之前将正确的值放置在正确的寄存器中。所以,你可以先把参数2放在$a1
中,然后把参数1放在$a0
中,它仍然会一样工作。
有关更多信息,请参阅此处:https://www.dyncall.org/docs/manual/manualse11.html并向下滚动到您的架构&ABI。