让我先说我是 MIPS 的新手。
我正在尝试反转我使用 Psy-Q 为 PSX 编译的一些示例代码。我编译了一个小的“hello world”程序,它恰好包含以下 C 函数调用
int main() {
FntLoad(960, 256) // load the font from the BIOS into the framebuffer
}
我想函数调用是什么并不重要,但是上面那一行带有这两个参数。
对于十六进制的该函数调用,我的反汇编如下所示:
C0 03 04 24 E7 45 00 0C 00 01 05 24
在我的反汇编程序中,它看起来像以下 3 条指令:
TEXT:800103E4 li $a0, 0x3C0
TEXT:800103E8 jal FntLoad
TEXT:800103EC li $a1, 0x100
在我到目前为止看到的示例中,所有函数参数都在该jal
行之前加载,但在我的反汇编中,加载立即发生在跳转之后。
这是正确的还是这里发生了什么奇怪的事情?如果我的理解jal
不正确,有人介意解释最后一个参数是如何传递的吗?