MIPS-如何与C编译器链接?

时间:2016-05-18 00:15:18

标签: assembly mips mips32

我想与C编译器链接。 我的问题是 - 使用MIPS将值传递给函数的正确方法是什么。 我应该将所有内容加载到$ a0 ... 3或$ v0..1?

1 个答案:

答案 0 :(得分:2)

没有正确的方法,使用汇编语言,您可以随心所欲。

但是,如果您尝试使用C编译器进行链接,那么为什么不尝试使用您拥有的编译器?它显然可以创建与同一编译器生成的其他对象链接的对象。

extern unsigned int more_fun ( unsigned int a, unsigned int b );
unsigned int fun ( unsigned int a, unsigned int b )
{
    unsigned int c;
    c = more_fun(a,b+7);
    return(c+a+5);
}

这是我的产生(带有某些标志),对象没有链接......

00000000 <fun>:
   0:   27bdffe8    addiu   sp,sp,-24
   4:   24a50007    addiu   a1,a1,7
   8:   afbf0014    sw  ra,20(sp)
   c:   afb00010    sw  s0,16(sp)
  10:   0c000000    jal 0 <fun>
  14:   00808025    move    s0,a0
  18:   8fbf0014    lw  ra,20(sp)
  1c:   26100005    addiu   s0,s0,5
  20:   02021021    addu    v0,s0,v0
  24:   8fb00010    lw  s0,16(sp)
  28:   03e00008    jr  ra
  2c:   27bd0018    addiu   sp,sp,24

我认为这会解决它,并为您提供一种方法来找出更复杂的参数或返回值。我更喜欢编译和反汇编来编译成程序集。更容易阅读和实际看到生产的东西。 YMMV。