Assembly MIPS是否有编码约定?

Assembly MIPS是否有编码约定?,assembly,mips,calling-convention,abi,mips32,Assembly,Mips,Calling Convention,Abi,Mips32,我想链接到一个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); } 使用MIPS向函数传递值的约定是什么 是否有编码约定或类似RFC的文档 没有正确的方法,用汇编语言你可

我想链接到一个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);
}
  • 使用MIPS向函数传递值的约定是什么
  • 是否有编码约定或类似RFC的文档

    • 没有正确的方法,用汇编语言你可以做任何你想做的事情

      但是,如果你正在尝试链接一个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
      
      00000000:
      0:27bdffe8附加sp,sp,-24
      4:24a50007增补a1、a1、7
      8:afbf0014西南ra,20(sp)
      c:afb00010 sw s0,16(sp)
      10:0亿日航0
      14:00808025移动s0,a0
      18:8fbf0014 lw ra,20(sp)
      1c:2610005 addiu s0,s0,5
      20:0201021地址v0、s0、v0
      24:8fb00010 lw s0,16(sp)
      28:03e00008 jr ra
      2c:27bd0018附加sp,sp,24
      

      我认为这说明了这一点,并为更复杂的参数或返回值提供了一种解决方法。我更喜欢编译和反汇编来编译成汇编。更容易阅读和实际查看所生成的内容。YMMV.

      你做过什么调查吗?例如,您至少检查过吗?您可以通过几种方式消除正常gcc
      -S
      输出中的“噪声”。最简单的方法通常是使用已安装MIPS和MIPS64 gcc5.4的锁紧螺栓。例如。不幸的是,它通常对汇编指令和注释进行的过滤似乎不能很好地处理32位输出,函数调用将函数地址加载到寄存器中,而不是使用直接jal。我想有一个代码模型选项我不知道?无论如何,也请参见。尽管汇编+反汇编可能对MIPS更好,因为gcc输出使用编号寄存器,如
      $31
      ,而不是
      ra
      。我构建了自己的binutils,并将其从s0、a0、ra(EWW)更改为使用简单补丁注册编号……我认为arm binutils现在需要相同的补丁。