(gdb) disassemble memmove
Dump of assembler code for function memmove:
0x76c32c20 <+0>: lui gp,0x5
0x76c32c24 <+4>: addiu gp,gp,-26832
0x76c32c28 <+8>: addu gp,gp,t9
0x76c32c2c <+12>: addiu sp,sp,-32
0x76c32c30 <+16>: subu a3,a0,a1
0x76c32c34 <+20>: sltu a3,a3,a2
0x76c32c38 <+24>: sw gp,16(sp)
0x76c32c3c <+28>: sw s0,24(sp)
0x76c32c40 <+32>: sw ra,28(sp)
0x76c32c44 <+36>: bnez a3,0x76c32c60 <memmove+64>
0x76c32c48 <+40>: move s0,a0
0x76c32c4c <+44>: lw t9,-32564(gp)
0x76c32c50 <+48>: bal 0x76c32210 <memcpy>
0x76c32c54 <+52>: nop
0x76c32c58 <+56>: b 0x76c32f04 <memmove+740>
0x76c32c5c <+60>: lw ra,28(sp)
0x76c32c60 <+64>: addu v0,a0,a2
0x76c32c64 <+68>: sltiu a0,a2,16
0x76c32c68 <+72>: move v1,a2
0x76c32c6c <+76>: bnez a0,0x76c32ee4 <memmove+708>
0x76c32c70 <+80>: addu a1,a1,a2
0x76c32c74 <+84>: andi a0,v0,0x3
0x76c32c78 <+88>: subu a3,a2,a0
0x76c32c7c <+92>: move v1,v0
0x76c32c80 <+96>: subu a2,a1,a0
0x76c32c84 <+100>: beq a1,a2,0x76c32c9c <memmove+124>
0x76c32c88 <+104>: addiu a1,a1,-1
0x76c32c8c <+108>: lbu t0,0(a1)
0x76c32c90 <+112>: addiu v1,v1,-1
0x76c32c94 <+116>: b 0x76c32c84 <memmove+100>
0x76c32c98 <+120>: sb t0,0(v1)
0x76c32c9c <+124>: andi a1,a2,0x3
0x76c32ca0 <+128>: subu v0,v0,a0
0x76c32ca4 <+132>: bnez a1,0x76c32dd4 <memmove+436>
0x76c32ca8 <+136>: srl v1,a3,0x2
0x76c32cac <+140>: andi a0,v1,0x7
0x76c32cb0 <+144>: addiu a0,a0,-1
0x76c32cb4 <+148>: sltiu a1,a0,7
0x76c32cb8 <+152>: beqz a1,0x76c32d58 <memmove+312>
0x76c32cbc <+156>: move t0,v1
0x76c32cc0 <+160>: lw a1,-32736(gp)
0x76c32cc4 <+164>: sll a0,a0,0x2
0x76c32cc8 <+168>: addiu a1,a1,29884
0x76c32ccc <+172>: addu a0,a1,a0
0x76c32cd0 <+176>: lw a0,0(a0)
0x76c32cd4 <+180>: addu a0,a0,gp
0x76c32cd8 <+184>: jr a0
0x76c32cdc <+188>: nop
0x76c32ce0 <+192>: addiu a1,a2,-8
0x76c32ce4 <+196>: addiu a0,v0,-4
0x76c32ce8 <+200>: lw t2,-4(a2)
0x76c32cec <+204>: b 0x76c32db0 <memmove+400>
0x76c32cf0 <+208>: addiu t0,v1,6
0x76c32cf4 <+212>: addiu a1,a2,-12
0x76c32cf8 <+216>: addiu a0,v0,-8
0x76c32cfc <+220>: lw t1,-4(a2)
0x76c32d00 <+224>: b 0x76c32da8 <memmove+392>
0x76c32d04 <+228>: addiu t0,v1,5
0x76c32d08 <+232>: addiu a1,a2,-16
0x76c32d0c <+236>: addiu a0,v0,-12
0x76c32d10 <+240>: lw t2,-4(a2)
0x76c32d14 <+244>: b 0x76c32da0 <memmove+384>
0x76c32d18 <+248>: addiu t0,v1,4
0x76c32d1c <+252>: addiu a1,a2,-20
0x76c32d20 <+256>: addiu a0,v0,-16
0x76c32d24 <+260>: lw t1,-4(a2)
0x76c32d28 <+264>: b 0x76c32d98 <memmove+376>
0x76c32d2c <+268>: addiu t0,v1,3
0x76c32d30 <+272>: addiu a1,a2,-24
0x76c32d34 <+276>: addiu a0,v0,-20
0x76c32d38 <+280>: lw t2,-4(a2)
0x76c32d3c <+284>: b 0x76c32d90 <memmove+368>
0x76c32d40 <+288>: addiu t0,v1,2
0x76c32d44 <+292>: addiu a1,a2,-28
0x76c32d48 <+296>: addiu a0,v0,-24
0x76c32d4c <+300>: lw t1,-4(a2)
0x76c32d50 <+304>: b 0x76c32d88 <memmove+360>
0x76c32d54 <+308>: addiu t0,v1,1
0x76c32d58 <+312>: addiu a1,a2,-32
0x76c32d5c <+316>: addiu a0,v0,-28
0x76c32d60 <+320>: b 0x76c32d80 <memmove+352>
0x76c32d64 <+324>: lw v1,-4(a2)
0x76c32d68 <+328>: lw t1,-4(a2)
0x76c32d6c <+332>: addiu a1,a2,-36
0x76c32d70 <+336>: addiu a0,v0,-32
0x76c32d74 <+340>: addiu t0,v1,-1
0x76c32d78 <+344>: lw v1,28(a1)
0x76c32d7c <+348>: sw t1,28(a0)
0x76c32d80 <+352>: lw t1,24(a1)
0x76c32d84 <+356>: sw v1,24(a0)
0x76c32d88 <+360>: lw t2,20(a1)
0x76c32d8c <+364>: sw t1,20(a0)
0x76c32d90 <+368>: lw t1,16(a1)
0x76c32d94 <+372>: sw t2,16(a0)
0x76c32d98 <+376>: lw t2,12(a1)
0x76c32d9c <+380>: sw t1,12(a0)
0x76c32da0 <+384>: lw t1,8(a1)
0x76c32da4 <+388>: sw t2,8(a0)
0x76c32da8 <+392>: lw t2,4(a1)
0x76c32dac <+396>: sw t1,4(a0)
0x76c32db0 <+400>: addiu t0,t0,-8
0x76c32db4 <+404>: lw t1,0(a1)
0x76c32db8 <+408>: beqz t0,0x76c32dcc <memmove+428>
0x76c32dbc <+412>: sw t2,0(a0)
0x76c32dc0 <+416>: addiu a1,a1,-32
0x76c32dc4 <+420>: b 0x76c32d78 <memmove+344>
0x76c32dc8 <+424>: addiu a0,a0,-32
0x76c32dcc <+428>: b 0x76c32ed0 <memmove+688>
0x76c32dd0 <+432>: sw t1,-4(a0)
0x76c32dd4 <+436>: sll t2,a1,0x3
0x76c32dd8 <+440>: li t1,32
0x76c32ddc <+444>: li a0,-4
0x76c32de0 <+448>: andi a1,v1,0x3
0x76c32de4 <+452>: li t0,2
0x76c32de8 <+456>: subu t4,t1,t2
0x76c32dec <+460>: beq a1,t0,0x76c32e1c <memmove+508>
0x76c32df0 <+464>: and a0,a2,a0
0x76c32df4 <+468>: li t0,3
0x76c32df8 <+472>: beq a1,t0,0x76c32e34 <memmove+532>
0x76c32dfc <+476>: addiu t3,a0,-12
0x76c32e00 <+480>: li t0,1
0x76c32e04 <+484>: beq a1,t0,0x76c32e48 <memmove+552>
0x76c32e08 <+488>: addiu t3,a0,-16
0x76c32e0c <+492>: addiu t0,v0,-12
0x76c32e10 <+496>: lw a1,0(a0)
0x76c32e14 <+500>: b 0x76c32e70 <memmove+592>
0x76c32e18 <+504>: lw t6,-4(a0)
0x76c32e1c <+508>: addiu t3,a0,-8
0x76c32e20 <+512>: addiu t0,v0,-4
0x76c32e24 <+516>: lw t5,0(a0)
0x76c32e28 <+520>: lw t1,-4(a0)
0x76c32e2c <+524>: b 0x76c32e98 <memmove+632>
0x76c32e30 <+528>: addiu v1,v1,2
0x76c32e34 <+532>: addiu t0,v0,-8
0x76c32e38 <+536>: lw t6,0(a0)
0x76c32e3c <+540>: lw t5,-4(a0)
0x76c32e40 <+544>: b 0x76c32e84 <memmove+612>
0x76c32e44 <+548>: addiu v1,v1,1
0x76c32e48 <+552>: lw t1,0(a0)
0x76c32e4c <+556>: lw a1,-4(a0)
0x76c32e50 <+560>: addiu t3,a0,-20
0x76c32e54 <+564>: addiu t0,v0,-16
0x76c32e58 <+568>: addiu v1,v1,-1
0x76c32e5c <+572>: srlv t5,a1,t2
0x76c32e60 <+576>: sllv a0,t1,t4
0x76c32e64 <+580>: or t1,t5,a0
0x76c32e68 <+584>: lw t6,12(t3)
0x76c32e6c <+588>: sw t1,12(t0)
0x76c32e70 <+592>: srlv t1,t6,t2
0x76c32e74 <+596>: sllv a0,a1,t4
0x76c32e78 <+600>: or a1,t1,a0
0x76c32e7c <+604>: lw t5,8(t3)
0x76c32e80 <+608>: sw a1,8(t0)
0x76c32e84 <+612>: srlv a0,t5,t2
0x76c32e88 <+616>: sllv t6,t6,t4
0x76c32e8c <+620>: or t6,a0,t6
0x76c32e90 <+624>: lw t1,4(t3)
0x76c32e94 <+628>: sw t6,4(t0)
0x76c32e98 <+632>: srlv a0,t1,t2
0x76c32e9c <+636>: sllv t5,t5,t4
0x76c32ea0 <+640>: or t5,a0,t5
0x76c32ea4 <+644>: addiu v1,v1,-4
0x76c32ea8 <+648>: lw a1,0(t3)
0x76c32eac <+652>: beqz v1,0x76c32ec0 <memmove+672>
0x76c32eb0 <+656>: sw t5,0(t0)
0x76c32eb4 <+660>: addiu t3,t3,-16
0x76c32eb8 <+664>: b 0x76c32e5c <memmove+572>
0x76c32ebc <+668>: addiu t0,t0,-16
0x76c32ec0 <+672>: srlv a1,a1,t2
0x76c32ec4 <+676>: sllv t1,t1,t4
0x76c32ec8 <+680>: or a1,a1,t1
0x76c32ecc <+684>: sw a1,-4(t0)
0x76c32ed0 <+688>: li v1,-4
0x76c32ed4 <+692>: and v1,a3,v1
0x76c32ed8 <+696>: subu a1,a2,v1
0x76c32edc <+700>: subu v0,v0,v1
0x76c32ee0 <+704>: andi v1,a3,0x3
0x76c32ee4 <+708>: subu v1,a1,v1
0x76c32ee8 <+712>: beq a1,v1,0x76c32f00 <memmove+736>
0x76c32eec <+716>: addiu a1,a1,-1
0x76c32ef0 <+720>: lbu a0,0(a1)
0x76c32ef4 <+724>: addiu v0,v0,-1
0x76c32ef8 <+728>: b 0x76c32ee8 <memmove+712>
0x76c32efc <+732>: sb a0,0(v0)
0x76c32f00 <+736>: lw ra,28(sp)
0x76c32f04 <+740>: move v0,s0
0x76c32f08 <+744>: lw s0,24(sp)
0x76c32f0c <+748>: jr ra
0x76c32f10 <+752>: addiu sp,sp,32
End of assembler dump.
以上是memmove函数的反汇编,继续分析
最新发布