为什么会有一个';移动零点,ra';在进入MIPS程序时?

为什么会有一个';移动零点,ra';在进入MIPS程序时?,mips,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:

我使用交叉编译器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
00400d00:
400d00:03e00021移动零点,ra
400d04:04110001余额400d0c
400d08:00000000 nop
400d0c:3c1c004b lui总成,0x4b
400d10:279c2010附加总成,总成,8208
400d14:0000f821移动ra,零位
400d18:8f848018 lw a0,-32744(总成)
400d1c:8fa50000 lw a1,0(sp)
400d20:27a60004增补a2,sp,4
400d24:2401FF8 li位于-8
400d28:03a1e824和sp,sp,at
400d2c:27bdffe0附加sp,sp,-32
400d30:8f87801c lw a3,-32740(总成)
400d34:8f888020 lw t0,-32736(总成)
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(总成)
400d4c:00000000无
400d50:04110097 bal 400fb0
400d54:00000000 nop

第一条指令是0x03e00021,我将其翻译为操作码=0,rs=31,rt=0,rd=0,shamt=0,funct=33,因此它是
addu$0,$31,$0
,写入寄存器$0,它始终为零。为什么会有这样一条奇怪的指令?

我查看了一些使用mipsel linux uclibc gcc编译的MIPS可执行文件,但在disassembly的任何地方都没有看到该指令。我检查了代码,代码来自glibc。