[root@kingfisher01 tmp]# cat > a.c << EOF
> int func(int a1,int a2,int a3,int a4,int a5,int a6, int a7){ return a1+a2+a3+a4+a5+a6+a7; }
> int main() { int rc = func(1,2,3,4,5,6,7); return rc; }
> [root@kingfisher01 tmp]#
[root@kingfisher01 tmp]# /opt/montavista/cee/devkit/arm/iwmmxt_le/bin/iwmmxt_le-gcc -g -fomit-frame-pointer -c a.c
[root@kingfisher01 tmp]# /opt/montavista/cee/devkit/arm/iwmmxt_le/bin/iwmmxt_le-objdump -d -S a.o
a.o: ファイル形式 elf32-littlearm
セクション .text の逆アセンブル:
00000000 :
int func(int a1,int a2,int a3,int a4,int a5,int a6, int a7){ return a1+a2+a3+a4+a5+a6+a7; }
0: e24dd010 sub sp, sp, #16 ; 0x10 ! 作業領域の確保:"sp"はスタックポインタ
4: e58d000c str r0, [sp, #12] ! 引数をスタックから取り出す
8: e58d1008 str r1, [sp, #8]
c: e58d2004 str r2, [sp, #4]
10: e58d3000 str r3, [sp]
14: e59d200c ldr r2, [sp, #12]
18: e59d3008 ldr r3, [sp, #8]
1c: e0823003 add r3, r2, r3 ! 足し算
20: e59d2004 ldr r2, [sp, #4]
24: e0833002 add r3, r3, r2
28: e59d2000 ldr r2, [sp]
2c: e0833002 add r3, r3, r2
30: e59d2010 ldr r2, [sp, #16]
34: e0833002 add r3, r3, r2
38: e59d2014 ldr r2, [sp, #20]
3c: e0833002 add r3, r3, r2
40: e59d2018 ldr r2, [sp, #24]
44: e0833002 add r3, r3, r2
48: e1a00003 mov r0, r3 ! 戻り値は"r3"に格納
4c: e28dd010 add sp, sp, #16 ; 0x10 ! スタックポインタの復元
50: e1a0f00e mov pc, lr ! "return address"へ戻る
00000054 :
int main() { int rc = func(1,2,3,4,5,6,7); return rc; }
54: e92d4010 stmdb sp!, {r4, lr} ! "return address"をスタックに保存
58: e24dd010 sub sp, sp, #16 ; 0x10 ! 作業領域の確保:"sp"はスタックポインタ
5c: e3a03005 mov r3, #5 ; 0x5 ! 引数はスタック+レジスタ
60: e58d3000 str r3, [sp]
64: e3a03006 mov r3, #6 ; 0x6
68: e58d3004 str r3, [sp, #4]
6c: e3a03007 mov r3, #7 ; 0x7
70: e58d3008 str r3, [sp, #8]
74: e3a00001 mov r0, #1 ; 0x1
78: e3a01002 mov r1, #2 ; 0x2
7c: e3a02003 mov r2, #3 ; 0x3
80: e3a03004 mov r3, #4 ; 0x4
84: ebfffffe bl 0 ! 関数コール
88: e1a03000 mov r3, r0 ! 関数の戻り値"r"3
8c: e58d300c str r3, [sp, #12]
90: e59d300c ldr r3, [sp, #12]
94: e1a00003 mov r0, r3 ! 戻り値は"r3"に格納
98: e28dd010 add sp, sp, #16 ; 0x10 ! スタックポインタの復元
9c: e8bd8010 ldmia sp!, {r4, pc} ! "return address"へ戻る