我正在使用为MIPS R3000A芯片编写的一些代码,并且有很多功能对我来说似乎完全无用......我想验证它们是否符合我的想法。
FNC_0000e3bc: #
jr ra # 0000e3bc:03e00008
addiu zero, zero, 0x0006 # 0000e3c0:24000006
FNC_0000e3c4: #
jr ra # 0000e3c4:03e00008
addiu zero, zero, 0x0007 # 0000e3c8:24000007
我正在读这两个作为“返回,并且在延迟槽中什么都不做”,这是正确的吗?
如果是这种情况,addiu
不仅仅是nop
的原因吗?或者为什么应该调用这些函数?
我觉得奇怪的是这些函数的addiu编号从4到0x21不等。让我想要他们做某事,但我不知道他们会怎么做。
无论哪种方式,感谢任何输入!
编辑:好吧,我将使用“调试器的剩余”想法。似乎它们都被称为唯一,所以它适合。这是为了声音回放,所以我真的怀疑他们正在进行操作码检查(永远不知道,但我对此表示怀疑)。
答案 0 :(得分:0)
这是什么平台?这很奇怪,但它确实相当于nop
,是的,我怀疑调试器或代码的其他部分使用它在运行时在可执行文件中做一些时髦的东西(但很难说不知道平台)。
答案 1 :(得分:0)
好的,这是对此的更新。我发现这些实际上是系统调用。这就是PS1和PS2 IOP处理器使用系统调用的方式。
我在一个不同的模块中击中了更多,所以最后又看了一遍。 PS2 IOP真的是PS1处理器,所以我从那里开始。从this link找到PS1系统调用的用法,如
jr
li zero, 0 #system call number
li zero, 0
编译为与addiu zero, zero, 0
相同的值,这就是我所见过的。
我仍然觉得通过设置zero
并在延迟槽中完成它已经完成了,但它确实有效。