您的位置:首页 > 编程语言 > C语言/C++

最简单的C语言工程,汇编代码

2009-03-30 13:22 716 查看
; 最简单的C语言工程
; simple.c 只定义了一个空的main函数:int main(void) {}
; simple.s 只实现了__user_initial_stackheap函数
; 生成ARM920T/DebugRel汇编代码

; C代码入口
; 初始化RW/ZI区域
__main	[0xe28f8090]   add      r8,pc,#0x90 ; #0x30000098
30000004	[0xe898000f]   ldmia    r8,{r0-r3}
30000008	[0xe0800008]   add      r0,r0,r8
3000000c	[0xe0811008]   add      r1,r1,r8
30000010	[0xe0822008]   add      r2,r2,r8
30000014	[0xe0833008]   add      r3,r3,r8
30000018	[0xe240b001]   sub      r11,r0,#1
3000001c	[0xe242c001]   sub      r12,r2,#1
_move_region	[0xe1500001]   cmp      r0,r1
30000024	[0x0a00000e]   beq      _zero_region
30000028	[0xe8b00070]   ldmia    r0!,{r4-r6}
3000002c	[0xe1540005]   cmp      r4,r5
30000030	[0x0afffffa]   beq      _move_region
30000034	[0xe3140001]   tst      r4,#1
30000038	[0x1084400b]   addne    r4,r4,r11
3000003c	[0xe3150001]   tst      r5,#1
30000040	[0x1085500b]   addne    r5,r5,r11
30000044	[0xe3150002]   tst      r5,#2
30000048	[0x10855009]   addne    r5,r5,r9
3000004c	[0xe3c55003]   bic      r5,r5,#3
_move_loop	[0xe2566004]   subs     r6,r6,#4
30000054	[0x24947004]   ldrcs    r7,[r4],#4
30000058	[0x24857004]   strcs    r7,[r5],#4
3000005c	[0x8afffffb]   bhi      _move_loop
30000060	[0xeaffffee]   b        _move_region
_zero_region	[0xe1520003]   cmp      r2,r3
30000068	[0x0b000012]   bleq     __rt_entry	; 初始化完成
3000006c	[0xe3a07000]   mov      r7,#0
30000070	[0xe8b20030]   ldmia    r2!,{r4,r5}
30000074	[0xe3140001]   tst      r4,#1
30000078	[0x1084400c]   addne    r4,r4,r12
3000007c	[0xe3140002]   tst      r4,#2
30000080	[0x10844009]   addne    r4,r4,r9
30000084	[0xe3c44003]   bic      r4,r4,#3
_zero_loop	[0xe2555004]   subs     r5,r5,#4
3000008c	[0x24847004]   strcs    r7,[r4],#4
30000090	[0x8afffffc]   bhi      _zero_loop
30000094	[0xeafffff2]   b        _zero_region

; 区域信息
_region_table	[0x000002bc]   dcd      0x000002bc  ....
3000009c	[0x000002e0]   dcd      0x000002e0  ....
300000a0	[0x000002e0]   dcd      0x000002e0  ....
300000a4	[0x000002f8]   dcd      0x000002f8  ....

; main()函数
main	[0xe3a00000] * mov      r0,#0
300000ac	[0xe1a0f00e]   mov      pc,r14
_main_redirection	[0xe1a0f00e]   mov      pc,r14
_main	[0xe1a0f00e]   mov      pc,r14

; 运行时
__rt_entry	[0xeb00004d]   bl       __rt_stackheap_init
300000bc	[0xeb00000d]   bl       __rt_lib_init
300000c0	[0xebfffff8]   bl       main
300000c4	[0xea000005]   b        exit
__rt_exit	[0xe92d4001]   stmfd    r13!,{r0,r14}
300000cc	[0xeb000042]   bl       __rt_lib_shutdown
300000d0	[0xe8bd4001]   ldmfd    r13!,{r0,r14}
300000d4	[0xea000000]   b        __rt_abort1
__rt_abort	[0xe3e00000]   mvn      r0,#0
__rt_abort1	[0xea000083]   b        _sys_exit
exit	[0xe92d4010]   stmfd    r13!,{r4,r14}
300000e4	[0xe1a04000]   mov      r4,r0
300000e8	[0xebffffff]   bl       0x300000ec  ; (exit + 0xc)
300000ec	[0xe1a00004]   mov      r0,r4
300000f0	[0xe8bd4010]   ldmfd    r13!,{r4,r14}
300000f4	[0xeafffff3]   b        __32__rt_exit
__rt_lib_init	[0xe92d40f0]   stmfd    r13!,{r4-r7,r14}
300000fc	[0xe24dd00c]   sub      r13,r13,#0xc
30000100	[0xe1a05001]   mov      r5,r1
30000104	[0xe1a04000]   mov      r4,r0
30000108	[0xeb00008c]   bl       _fp_init
3000010c	[0xe3a00000]   mov      r0,#0
30000110	[0xe58d4000]   str      r4,[r13,#0]
30000114	[0xe58d5004]   str      r5,[r13,#4]
30000118	[0xebffffff]   bl       0x3000011c  ; (__rt_lib_init + 0x24)
3000011c	[0xe58d0008]   str      r0,[r13,#8]
30000120	[0xe59f00c8]   ldr      r0,0x300001f0 ; = #0x000000c0
30000124	[0xe1a0100d]   mov      r1,r13
30000128	[0xe08f0000]   add      r0,pc,r0
3000012c	[0xebffffff]   bl       0x30000130  ; (__rt_lib_init + 0x38)
30000130	[0xe1a05000]   mov      r5,r0
30000134	[0xe1a06001]   mov      r6,r1
30000138	[0xe89d0003]   ldmia    r13,{r0,r1}
3000013c	[0xebffffff]   bl       0x30000140  ; (__rt_lib_init + 0x48)
30000140	[0xebffffff]   bl       0x30000144  ; (__rt_lib_init + 0x4c)
30000144	[0xebffffff]   bl       0x30000148  ; (__rt_lib_init + 0x50)
30000148	[0xe3a01000]   mov      r1,#0
3000014c	[0xe3a00000]   mov      r0,#0
30000150	[0xebffffff]   bl       0x30000154  ; (__rt_lib_init + 0x5c)
30000154	[0xe1a07000]   mov      r7,r0
30000158	[0xeb00006a]   bl       __user_libspace
3000015c	[0xe1a04000]   mov      r4,r0
30000160	[0xe5807020]   str      r7,[r0,#0x20]
30000164	[0xe3a00000]   mov      r0,#0
30000168	[0xe3a01000]   mov      r1,#0
3000016c	[0xebffffff]   bl       0x30000170  ; (__rt_lib_init + 0x78)
30000170	[0xe2801001]   add      r1,r0,#1
30000174	[0xe5841024]   str      r1,[r4,#0x24]
30000178	[0xe3a01000]   mov      r1,#0
3000017c	[0xe3a00000]   mov      r0,#0
30000180	[0xebffffff]   bl       0x30000184  ; (__rt_lib_init + 0x8c)
30000184	[0xe5840028]   str      r0,[r4,#0x28]
30000188	[0xe3a00000]   mov      r0,#0
3000018c	[0xe3a01000]   mov      r1,#0
30000190	[0xebffffff]   bl       0x30000194  ; (__rt_lib_init + 0x9c)
30000194	[0xe584002c]   str      r0,[r4,#0x2c]
30000198	[0xe3a00000]   mov      r0,#0
3000019c	[0xe3a01000]   mov      r1,#0
300001a0	[0xebffffff]   bl       0x300001a4  ; (__rt_lib_init + 0xac)
300001a4	[0xe5840030]   str      r0,[r4,#0x30]
300001a8	[0xebffffff]   bl       0x300001ac  ; (__rt_lib_init + 0xb4)
300001ac	[0xebffffff]   bl       0x300001b0  ; (__rt_lib_init + 0xb8)
300001b0	[0xebffffff]   bl       0x300001b4  ; (__rt_lib_init + 0xbc)
300001b4	[0xebffffff]   bl       0x300001b8  ; (__rt_lib_init + 0xc0)
300001b8	[0xebffffff]   bl       0x300001bc  ; (__rt_lib_init + 0xc4)
300001bc	[0xebffffff]   bl       0x300001c0  ; (__rt_lib_init + 0xc8)
300001c0	[0xebffffff]   bl       0x300001c4  ; (__rt_lib_init + 0xcc)
300001c4	[0xebffffff]   bl       0x300001c8  ; (__rt_lib_init + 0xd0)
300001c8	[0xe1a00005]   mov      r0,r5
300001cc	[0xe1a01006]   mov      r1,r6
300001d0	[0xe28dd00c]   add      r13,r13,#0xc
300001d4	[0xe8bd00f0]   ldmfd    r13!,{r4-r7}
300001d8	[0xe49df004]   ldr      pc,[r13],#4
__rt_lib_shutdown	[0xe92d4008]   stmfd    r13!,{r3,r14}
300001e0	[0xebffffff]   bl       0x300001e4  ; (__rt_lib_shutdown + 0x8)
300001e4	[0xebffffff]   bl       0x300001e8  ; (__rt_lib_shutdown + 0xc)
300001e8	[0xebffffff]   bl       0x300001ec  ; (__rt_lib_shutdown + 0x10)
300001ec	[0xe8bd8008]   ldmfd    r13!,{r3,pc}
300001f0	[0x000000c0]   dcd      0x000000c0  ....
__rt_stackheap_init	[0xe1a0500e]   mov      r5,r14
300001f8	[0xeb000042]   bl       __user_libspace
300001fc	[0xe1a0e005]   mov      r14,r5
300001fc	[0xe1a0e005]   mov      r14,r5
30000200	[0xe1a04000]   mov      r4,r0
30000204	[0xe1a0100d]   mov      r1,r13
30000208	[0xe1a0300a]   mov      r3,r10
3000020c	[0xe3c00007]   bic      r0,r0,#7
30000210	[0xe280d060]   add      r13,r0,#0x60
30000214	[0xe92d4010]   stmfd    r13!,{r4,r14}
30000218	[0xeb000042]   bl       __user_initial_stackheap	;调用堆栈分配函数
3000021c	[0xe8bd4010]   ldmfd    r13!,{r4,r14}
30000220	[0xe3c1d007]   bic      r13,r1,#7
30000224	[0xe3a06000]   mov      r6,#0
30000228	[0xe3a07000]   mov      r7,#0
3000022c	[0xe3a08000]   mov      r8,#0
30000230	[0xe3a0b000]   mov      r11,#0
30000234	[0xe1a0c004]   mov      r12,r4
30000238	[0xe8ac09c0]   stmia    r12!,{r6-r8,r11}
3000023c	[0xe8ac09c0]   stmia    r12!,{r6-r8,r11}
30000240	[0xe8ac09c0]   stmia    r12!,{r6-r8,r11}
30000244	[0xe8ac09c0]   stmia    r12!,{r6-r8,r11}
30000248	[0xe92d4013]   stmfd    r13!,{r0,r1,r4,r14}
3000024c	[0xe3a00000]   mov      r0,#0
30000250	[0xe3a01000]   mov      r1,#0
30000254	[0xebffffff]   bl       0x30000258  ; (__rt_stackheap_init + 0x64)
30000258	[0xe2811040]   add      r1,r1,#0x40
3000025c	[0xe0802001]   add      r2,r0,r1
30000260	[0xe2822f44]   add      r2,r2,#0x110
30000264	[0xe584201c]   str      r2,[r4,#0x1c]
30000268	[0xe5841018]   str      r1,[r4,#0x18]
3000026c	[0xe3a00001]   mov      r0,#1
30000270	[0xe5840010]   str      r0,[r4,#0x10]
30000274	[0xe8bd4013]   ldmfd    r13!,{r0,r1,r4,r14}
30000278	[0xe5840014]   str      r0,[r4,#0x14]
3000027c	[0xe1a01000]   mov      r1,r0
30000280	[0xe1a0f00e]   mov      pc,r14
__rt_heap_extend	[0xe92d4010]   stmfd    r13!,{r4,r14}
30000288	[0xe92d0003]   stmfd    r13!,{r0,r1}
3000028c	[0xeb00001d]   bl       __user_libspace
30000290	[0xe1a04000]   mov      r4,r0
30000294	[0xe8bd0003]   ldmfd    r13!,{r0,r1}
30000298	[0xe594301c]   ldr      r3,[r4,#0x1c]
3000029c	[0xe04d3003]   sub      r3,r13,r3
300002a0	[0xe5942014]   ldr      r2,[r4,#0x14]
300002a4	[0xe5812000]   str      r2,[r1,#0]
300002a8	[0xe082e000]   add      r14,r2,r0
300002ac	[0xe15e0003]   cmp      r14,r3
300002b0	[0x8a00000a]   bhi      _heap_overflow
300002b4	[0xe093300e]   adds     r3,r3,r14
300002b8	[0xe1a03063]   mov      r3,r3,rrx
300002bc	[0xe3c33007]   bic      r3,r3,#7
300002c0	[0xe28e1d40]   add      r1,r14,#0x1000
300002c4	[0xe2811007]   add      r1,r1,#7
300002c8	[0xe3c11007]   bic      r1,r1,#7
300002cc	[0xe1510003]   cmp      r1,r3
300002d0	[0x81a01003]   movhi    r1,r3
300002d4	[0xe0410002]   sub      r0,r1,r2
300002d8	[0xe5841014]   str      r1,[r4,#0x14]
300002dc	[0xe8bd8010]   ldmfd    r13!,{r4,pc}
_heap_overflow	[0xe1a02000]   mov      r2,r0
300002e4	[0xe3a00000]   mov      r0,#0
300002e8	[0xebffffff]   bl       0x300002ec  ; (_heap_overflow + 0xc)
300002ec	[0xe8bd8010]   ldmfd    r13!,{r4,pc}
_sys_exit	[0xe3a00018]   mov      r0,#0x18
300002f4	[0xe59f1008]   ldr      r1,0x30000304 ; = #0x00020026
300002f8	[0xef123456]   swi      0x123456
300002fc	[0xe1a0f00e]   mov      pc,r14
30000300	[0x00000014]   dcd      0x00000014  ....
30000304	[0x00020026]   dcd      0x00020026  &...
__user_libspace	[0xe59f0000]   ldr      r0,0x30000310 ; = #0x30000390
3000030c	[0xe1a0f00e]   mov      pc,r14
30000310	[0x30000390]   dcd      0x30000390  ...0
__semihosting_swi_guard	[0xe1a0f00e]   mov      pc,r14
__rt_fp_status_addr	[0xe92d4010]   stmfd    r13!,{r4,r14}
3000031c	[0xebfffff9]   bl       __user_libspace
30000320	[0xe2800004]   add      r0,r0,#4
30000324	[0xe8bd8010]   ldmfd    r13!,{r4,pc}

; 自己实现的堆栈分配函数,地址在Image$$ZI$$Limit之后
__user_initial_stackheap	[0xe59f000c]   ldr      r0,0x3000033c ; = #0x300003f0
3000032c	[0xe2802e40]   add      r2,r0,#0x400
30000330	[0xe1a03002]   mov      r3,r2
30000334	[0xe2831e40]   add      r1,r3,#0x400
30000338	[0xe1a0f00e]   mov      pc,r14

3000033c	[0x300003f0]   dcd      0x300003f0  ...0
_fp_init	[0xe92d4010]   stmfd    r13!,{r4,r14}
30000344	[0xebfffff3]   bl       __rt_fp_status_addr
30000348	[0xe3a01000]   mov      r1,#0
3000034c	[0xe5801000]   str      r1,[r0,#0]
__fplib_config_pureend_doubles	[0xe8bd8010]   ldmfd    r13!,{r4,pc}

; 数据段
Region$$Table$$Base	[0x00000000]   dcd      0x00000000  ....
30000358	[0x00000000]   dcd      0x00000000  ....
3000035c	[0x00000000]   dcd      0x00000000  ....
30000360	[0x00000000]   dcd      0x00000000  ....
30000364	[0x00000000]   dcd      0x00000000  ....
30000368	[0x00000000]   dcd      0x00000000  ....
3000036c	[0x00000000]   dcd      0x00000000  ....
30000370	[0x00000000]   dcd      0x00000000  ....
30000374	[0x00000000]   dcd      0x00000000  ....
ZISection$$Table$$Base	[0x30000390]   dcd      0x30000390  ...0
3000037c	[0x00000000]   dcd      0x00000000  ....
30000380	[0x30000390]   dcd      0x30000390  ...0
30000384	[0x00000000]   dcd      0x00000000  ....
30000388	[0x30000390]   dcd      0x30000390  ...0
3000038c	[0x00000060]   dcd      0x00000060  `...
ZISection$$Table$$Limit	[0x00000000]   dcd      0x00000000  ....
30000394	[0x00000000]   dcd      0x00000000  ....
30000398	[0x00000000]   dcd      0x00000000  ....
3000039c	[0x00000000]   dcd      0x00000000  ....
300003a0	[0x00000000]   dcd      0x00000000  ....
300003a4	[0x00000000]   dcd      0x00000000  ....
300003a8	[0x00000000]   dcd      0x00000000  ....
300003ac	[0x00000000]   dcd      0x00000000  ....
300003b0	[0x00000000]   dcd      0x00000000  ....
300003b4	[0x00000000]   dcd      0x00000000  ....
300003b8	[0x00000000]   dcd      0x00000000  ....
300003bc	[0x00000000]   dcd      0x00000000  ....
300003c0	[0x00000000]   dcd      0x00000000  ....
300003c4	[0x00000000]   dcd      0x00000000  ....
300003c8	[0x00000000]   dcd      0x00000000  ....
300003cc	[0x00000000]   dcd      0x00000000  ....
300003d0	[0x00000000]   dcd      0x00000000  ....
300003d4	[0x00000000]   dcd      0x00000000  ....
300003d8	[0x00000000]   dcd      0x00000000  ....
300003dc	[0x00000000]   dcd      0x00000000  ....
300003e0	[0x00000000]   dcd      0x00000000  ....
300003e4	[0x00000000]   dcd      0x00000000  ....
300003e8	[0x00000000]   dcd      0x00000000  ....
300003ec	[0x00000000]   dcd      0x00000000  ....
Image$$ZI$$Limit	[0x00000000]   dcd      0x00000000  ....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: