|
|
发表于 2007-1-5 20:00:44
|
显示全部楼层
lemote.com的源看起来是很普通的debian mirror,debian的arch是mipsel
ustc@debian:/bin$ file arch
arch: ELF 32-bit LSB executable, MIPS, MIPS-I version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1, stripped
里面的文件采用的指令集是MIPS-I(未修改的gcc只支持到MPIS-II),这个版本的指令集在所有访存指令后面都要有延迟槽,所以生成的目标文件中会有很多nop,效率是很低的。要是有优化的编译器,代码效率估计会高不少
上面的arch命令的一段反汇编:
4005c0: 3c1c0005 lui gp,0x5
4005c4: 279c83f0 addiu gp,gp,-31760
4005c8: 0399e021 addu gp,gp,t9
4005cc: 27bdffd8 addiu sp,sp,-40
4005d0: afbf0020 sw ra,32(sp)
4005d4: afb1001c sw s1,28(sp)
4005d8: afb00018 sw s0,24(sp)
4005dc: afbc0010 sw gp,16(sp)
4005e0: 8f91801c lw s1,-32740(gp)
4005e4: 00000000 nop
4005e8: 92220a20 lbu v0,2592(s1)
4005ec: 00000000 nop
4005f0: 14400013 bnez v0,400640 <_init+0x1d0>
4005f4: 00000000 nop
4005f8: 8f90801c lw s0,-32740(gp)
4005fc: 00000000 nop
400600: 8e0209a0 lw v0,2464(s0)
400604: 00000000 nop
400608: 8c590000 lw t9,0(v0)
40060c: 00000000 nop
400610: 13200009 beqz t9,400638 <_init+0x1c8>
400614: 24420004 addiu v0,v0,4
400618: 0320f809 jalr t9
40061c: ae0209a0 sw v0,2464(s0)
400620: 8e0209a0 lw v0,2464(s0)
400624: 8fbc0010 lw gp,16(sp)
400628: 8c590000 lw t9,0(v0)
40062c: 00000000 nop
400630: 1720fff9 bnez t9,400618 <_init+0x1a8>
400634: 24420004 addiu v0,v0,4
400638: 24020001 li v0,1
40063c: a2220a20 sb v0,2592(s1)
400640: 8fbf0020 lw ra,32(sp)
400644: 8fb1001c lw s1,28(sp)
400648: 8fb00018 lw s0,24(sp)
40064c: 03e00008 jr ra
400650: 27bd0028 addiu sp,sp,40
400654: 3c1c0005 lui gp,0x5
400658: 279c835c addiu gp,gp,-31908
40065c: 0399e021 addu gp,gp,t9
400660: 8f84801c lw a0,-32740(gp)
400664: 8f998044 lw t9,-32700(gp)
400668: 8c82097c lw v0,2428(a0)
40066c: 00000000 nop
400670: 10400005 beqz v0,400688 <_init+0x218>
400674: 2484097c addiu a0,a0,2428
400678: 13200003 beqz t9,400688 <_init+0x218>
40067c: 00000000 nop
400680: 03200008 jr t9
400684: 00000000 nop
400688: 03e00008 jr ra
40068c: 00000000 nop |
|