如何在MIPS汇编程序中使用库
How to use a library in a MIPS assembly program?
如何在使用QtSpim
(MIPS
模拟器)编译的MIPS
汇编程序中使用c/c++编写的库?使用这个论坛,我能够在一个非常有才华的人@rkhb的帮助下使用英特尔汇编程序做到这一点。这是他提供的解决方案:
如何在masm或更具体地说。lib文件中使用库?
现在我想在MIPS
汇编中做同样的事情。现在,由于我使用的是英特尔处理器,并使用QtSpim
来运行MIPS
汇编程序,我如何在使用QtSpim
时做到这一点?
要从汇编器调用C编译函数(反之亦然),寄存器必须具有以下内容:
- 寄存器4-7必须包含前4个参数
- 使用较新的C编译器寄存器8-11包含4个参数 寄存器29必须是堆栈指针
- 超过4或8(取决于编译器)必须存储在堆栈上(据我所知,第n个参数位于地址(n-1)*4+(寄存器29);栈上的前4或8个字可能被调用的例程 覆盖。
- 程序被简单地称为"JAL"或"JALR"。一些使用"-PIC"开关编译的GNU C编译函数假设一个带有特定寄存器(28?)的"JALR"指令,因此该寄存器包含函数本身的地址。
- 当从函数寄存器返回时,2包含返回值;寄存器3高32位为64位的结果
如果SPIM不支持加载可执行文件,而只支持加载源代码,您可以创建一个静态链接的可执行文件并执行反汇编。
您可以将反汇编传递给SPIM模拟器。
请注意"系统调用"指令("syscall"或"syscall #n")在不同的操作系统中具有不同的含义。如果库包含系统调用,则不能在SPIM中使用为Linux编写的库,反之亦然。
—Edit—
使用"-pic"开关编译的库函数必须使用"JALR $t9"调用,因此寄存器25 ("t9")保存了被调用函数的地址。
相关文章:
- 在 MIPS 中快速排序
- 为什么编程语言被编译为汇编程序而不是二进制?
- 只需要帮助启动从 c++/c 传输到 mips 的程序
- 如何使用 LLVM 库编写汇编程序
- 我如何将4个以上的参数添加到MIPS中的一个函数
- ICC 中的 -O2 搞砸了汇编程序,ICC 中的 -O1 和 GCC / Clang 中的所有优化都很好
- MIPS 和 x86_64 之间的对象对齐差异
- 将此C 代码转换为MIPS
- 为什么汇编代码因我使用的反汇编程序而异
- C2400 内联汇编程序语法错误,与 2015 年
- 使用libwebrtc-audio-Processing-Devel汇编程序
- 编译基本汇编程序时链接错误
- C阵列在MIPS组件中索引
- 输入汇编程序-顶点着色器链接错误
- 使用intel内联汇编程序对bigint-add进行进位编码
- MIPS(EL)VU SOLO2 VLAN模块支持(8021Q)的交叉串联Linux 3.15.3
- 在C++中嵌入汇编程序可以接受吗
- Microsoft Visual Studio 2010 Compile for MIPS
- 将C++转换为 MIPS 汇编
- 如何在MIPS汇编程序中使用库