为什么有一个零移动,ra'在MIPS计划的入口?

时间:2014-10-28 23:55:07

标签: mips

我使用交叉编译器mipsel-unknown-linux-gnu-gcc来编译一个hello-world C程序,并使用mipsel-unknown-linux-gnu-objdump对其进行反汇编,并获得以下内容:

00400d00 <__start>:
  400d00:   03e00021        move    zero,ra
  400d04:   04110001        bal     400d0c <__start+0xc>
  400d08:   00000000        nop
  400d0c:   3c1c004b        lui     gp,0x4b
  400d10:   279c2010        addiu   gp,gp,8208
  400d14:   0000f821        move    ra,zero
  400d18:   8f848018        lw      a0,-32744(gp)
  400d1c:   8fa50000        lw      a1,0(sp)
  400d20:   27a60004        addiu   a2,sp,4
  400d24:   2401fff8        li      at,-8
  400d28:   03a1e824        and     sp,sp,at
  400d2c:   27bdffe0        addiu   sp,sp,-32
  400d30:   8f87801c        lw      a3,-32740(gp)
  400d34:   8f888020        lw      t0,-32736(gp)
  400d38:   00000000        nop
  400d3c:   afa80010        sw      t0,16(sp)
  400d40:   afa20014        sw      v0,20(sp)
  400d44:   afbd0018        sw      sp,24(sp)
  400d48:   8f998024        lw      t9,-32732(gp)
  400d4c:   00000000        nop
  400d50:   04110097        bal     400fb0 <__libc_start_main>
  400d54:   00000000        nop

第一条指令是0x03e00021,我把它翻译为操作码= 0,rs = 31,rt = 0,rd = 0,shamt = 0,功能= 33,所以它是addu $0, $31, $0,写入寄存器$ 0,始终为零。为什么会有这么奇怪的指示?

0 个答案:

没有答案