如何在MIPS汇编程序中使用库?

时间:2014-05-11 09:53:05

标签: c++ c assembly mips qtspim

如何在使用MIPSQtSpim模拟器)编译的MIPS汇编程序中使用库(用c / c ++制作)?使用这个论坛,我可以在一个非常有才华的人@rkhb的帮助下使用英特尔汇编程序来做到这一点。这是他提供的解决方案:

how to use a library in masm or more specifcally a .lib file?

现在我想在MIPS汇编中做同样的事情。既然我使用英特尔处理器并使用QtSpim运行MIPS汇编程序,那么在使用QtSpim时如何才能执行此操作?

1 个答案:

答案 0 :(得分:0)

要从汇编程序调用C编译函数(反之亦然),寄存器必须具有以下内容:

  • 注册表4-7必须包含前4个参数
  • 使用较新的C编译器寄存器8-11包含4个以上的参数
  • 寄存器29必须是堆栈指针
  • 据我所知,必须在堆栈中存储4个或8个以上(取决于编译器)(第n个参数ist位于地址(n-1)* 4 +(寄存器29);第一个堆栈上的4或8个字可能被被调用的例程
  • 覆盖
  • 使用“JAL”或“JALR”简单地调用例程。一些使用“-PIC”开关编译的GNU C编译函数假定带有某个寄存器(28?)的“JALR”指令,以便寄存器包含函数本身的地址。
  • 从函数寄存器2返回时包含返回的值;寄存器3高位32位用于64位结果

如果SPIM不支持加载可执行文件但只支持源代码,则可以创建静态链接的可执行文件并执行反汇编。

您可以将反汇编传递给SPIM模拟器。

请注意,“系统调用”指令(“syscall”或“syscall #n”)在不同的操作系统中具有不同的含义。如果库包含系统调用,则不能使用在SPIM中为Linux编写的库,反之亦然。

---编辑---

使用“-pic”开关编译的库函数必须使用“JALR $ t9”调用,因此寄存器25(“t9”)保存被调用函数的地址。