?? my_lib.lst
字號:
ARM COMPILER V2.53, my_lib 23/07/06 16:59:04 PAGE 1
ARM COMPILER V2.53, COMPILATION OF MODULE my_lib
OBJECT MODULE PLACED IN my_lib.obj
COMPILER INVOKED BY: C:\Keil\ARM\BIN\CA.exe lib\my_lib.c THUMB WARNINGLEVEL(3) OPTIMIZE(8,SPEED) DEBUG PRINT(.\MY_LIB.LS
-T) TABS(4) OBJECT(my_lib.obj)
stmt level source
1 /*------------------------------------------------------
2 FILE NAME : my_lib.c
3 DESCRIPTION : my standard lib.
4 VERSION : 0.0.0 (C)aureole
5 AUTHOR : Aureole
6 CREATE DATE : 4.9.2006
7 MODIFY DATE : ---
8 LOGS :-\
9 1. First create . 4.9.2006
10
11
12 --------------------------------------------------------*/
13
14
15
16 //-----------------Include files------------------------//
17 #include "..\include\my_lib.h"
18 #include <ctype.h>
19 #include <stdarg.h>
20 #include <stdio.h>
21
22 /*---------------------------------------------------------------
23 NAME : _atof
24 ENTRY TYPE: char *s
25 RETURN TYPE: double
26 PURPOSE : ---
27 VERSION : 0.1
28 DESCRIPTION:
29 CREATE DATE: 4.9.2006
30 LOGS : 1.first create;
31 -----------------------------------------------------------------*/
32
33 double __atof(char *s)
34 {
35 1 double value,fraction;
36 1 int sign;
37 1
38 1 //skip leading blanks;
39 1 while(isspace(*s))s++;
40 1
41 1 //Get sign;
42 1 if(*s=='-'){
43 2 sign=1;
44 2 s++;
45 2 }else{
46 2 sign=0;
47 2 if(*s=='+')s++;
48 2 }
49 1
50 1 //get value;
51 1 for(value=0.0;isdigit(*s);s++)value=value*10.0+(*s-'0');
52 1
53 1 if(*s=='.'){
54 2 s++;
55 2 for(fraction=0.1;isdigit(*s);s++){
56 3 value+=(*s-'0')*fraction;
57 3 fraction*=0.1;
58 3 }
ARM COMPILER V2.53, my_lib 23/07/06 16:59:04 PAGE 2
59 2 }
60 1
61 1
62 1
63 1 if(sign)value*=-1.0;
64 1 return value;
65 1 }
66
67 int _my_sprintf(char * str,char const *format,...)
68 {
69 1 va_list args;
70 1 int re;
71 1
72 1 va_start(args,format);
73 1 re=vsprintf(str,format,args);
74 1 va_end(args);
75 1 return re;
76 1 }
ARM COMPILER V2.53, my_lib 23/07/06 16:59:04 PAGE 3
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** EXTERNALS:
EXTERN CODE16 (isdigit?T)
EXTERN CODE16 (isspace?T)
EXTERN CODE16 (vsprintf?T)
EXTERN CODE16 (?C?FPMUL?T)
EXTERN CODE16 (?C?FCAST?T)
EXTERN CODE16 (?C?FPADD?T)
*** PUBLICS:
PUBLIC __atof?T
PUBLIC _my_sprintf?T
*** CODE SEGMENT '?PR?__atof?T?my_lib':
33: double __atof(char *s)
00000000 B5F0 PUSH {R4-R7,LR}
00000002 1C07 MOV R7,R0 ; s
00000004 ---- Variable 's' assigned to Register 'R7' ----
00000004 ---- Variable 'value' assigned to Register 'R5' ----
00000004 ---- Variable 'sign' assigned to Register 'R4' ----
34: {
00000004 ; SCOPE-START
39: while(isspace(*s))s++;
00000004 E000 B L_1 ; T=0x00000008
00000006 L_3:
00000006 3701 ADD R7,#0x1
00000008 L_1:
00000008 1C38 MOV R0,R7 ; s
0000000A 7800 LDRB R0,[R0,#0x0] ; s
0000000C F7FF BL isspace?T ; T=0x0001 (1)
0000000E FFF8 BL isspace?T ; T=0x0001 (2)
00000010 2800 CMP R0,#0x0 ; isspace?T
00000012 D1F8 BNE L_3 ; T=0x00000006
42: if(*s=='-'){
00000014 1C38 MOV R0,R7 ; s
00000016 7801 LDRB R1,[R0,#0x0] ; s
00000018 292D CMP R1,#0x2D
0000001A D102 BNE L_5 ; T=0x00000022
43: sign=1;
0000001C 2401 MOV R4,#0x1
44: s++;
0000001E 3701 ADD R7,#0x1
45: }else{
00000020 E003 B L_12 ; T=0x0000002A
00000022 L_5:
46: sign=0;
00000022 2400 MOV R4,#0x0
47: if(*s=='+')s++;
00000024 292B CMP R1,#0x2B
00000026 D100 BNE L_12 ; T=0x0000002A
00000028 3701 ADD R7,#0x1
51: for(value=0.0;isdigit(*s);s++)value=value*10.0+(*s-'0');
0000002A L_12:
0000002A 2500 MOV R5,#0x0
0000002C E00F B L_10 ; T=0x0000004E
0000002E L_11:
0000002E 4800 LDR R1,=0x41200000
00000030 1C28 MOV R0,R5 ; value
00000032 F7FF BL ?C?FPMUL?T ; T=0x0001 (1) ; ?C?FPMUL?T
00000034 FFE5 BL ?C?FPMUL?T ; T=0x0001 (2) ; ?C?FPMUL?T
00000036 1C02 MOV R2,R0
00000038 1C38 MOV R0,R7 ; s
0000003A 7800 LDRB R0,[R0,#0x0] ; s
0000003C 3830 SUB R0,#0x30
ARM COMPILER V2.53, my_lib 23/07/06 16:59:04 PAGE 4
0000003E F7FF BL ?C?FCAST?T ; T=0x0001 (1) ; ?C?FCAST?T
00000040 FFDF BL ?C?FCAST?T ; T=0x0001 (2) ; ?C?FCAST?T
00000042 1C01 MOV R1,R0
00000044 1C10 MOV R0,R2
00000046 F7FF BL ?C?FPADD?T ; T=0x0001 (1) ; ?C?FPADD?T
00000048 FFDB BL ?C?FPADD?T ; T=0x0001 (2) ; ?C?FPADD?T
0000004A 1C05 MOV R5,R0 ; value
0000004C 3701 ADD R7,#0x1
0000004E L_10:
0000004E 1C38 MOV R0,R7 ; s
00000050 7800 LDRB R0,[R0,#0x0] ; s
00000052 F7FF BL isdigit?T ; T=0x0001 (1)
00000054 FFD5 BL isdigit?T ; T=0x0001 (2)
00000056 2800 CMP R0,#0x0 ; isdigit?T
00000058 D1E9 BNE L_11 ; T=0x0000002E
53: if(*s=='.'){
0000005A 1C38 MOV R0,R7 ; s
0000005C 7800 LDRB R0,[R0,#0x0] ; s
0000005E 282E CMP R0,#0x2E
00000060 D11B BNE L_13 ; T=0x0000009A
54: s++;
00000062 3701 ADD R7,#0x1
55: for(fraction=0.1;isdigit(*s);s++){
00000064 4800 LDR R6,=0x3DCCCCCD
00000066 ---- Variable 'fraction' assigned to Register 'R6' ----
00000066 E012 B L_16 ; T=0x0000008E
00000068 L_17:
56: value+=(*s-'0')*fraction;
00000068 1C38 MOV R0,R7 ; s
0000006A 7800 LDRB R0,[R0,#0x0] ; s
0000006C 3830 SUB R0,#0x30
0000006E F7FF BL ?C?FCAST?T ; T=0x0001 (1) ; ?C?FCAST?T
00000070 FFC7 BL ?C?FCAST?T ; T=0x0001 (2) ; ?C?FCAST?T
00000072 1C31 MOV R1,R6 ; fraction
00000074 F7FF BL ?C?FPMUL?T ; T=0x0001 (1) ; ?C?FPMUL?T
00000076 FFC4 BL ?C?FPMUL?T ; T=0x0001 (2) ; ?C?FPMUL?T
00000078 1C01 MOV R1,R0
0000007A 1C28 MOV R0,R5 ; value
0000007C F7FF BL ?C?FPADD?T ; T=0x0001 (1) ; ?C?FPADD?T
0000007E FFC0 BL ?C?FPADD?T ; T=0x0001 (2) ; ?C?FPADD?T
00000080 1C05 MOV R5,R0 ; value
57: fraction*=0.1;
00000082 1C30 MOV R0,R6 ; fraction
00000084 4800 LDR R1,=0x3DCCCCCD
00000086 F7FF BL ?C?FPMUL?T ; T=0x0001 (1) ; ?C?FPMUL?T
00000088 FFBB BL ?C?FPMUL?T ; T=0x0001 (2) ; ?C?FPMUL?T
0000008A 1C06 MOV R6,R0 ; fraction
58: }
0000008C 3701 ADD R7,#0x1
0000008E L_16:
0000008E 1C38 MOV R0,R7 ; s
00000090 7800 LDRB R0,[R0,#0x0] ; s
00000092 F7FF BL isdigit?T ; T=0x0001 (1)
00000094 FFB5 BL isdigit?T ; T=0x0001 (2)
00000096 2800 CMP R0,#0x0 ; isdigit?T
00000098 D1E6 BNE L_17 ; T=0x00000068
59: }
0000009A L_13:
63: if(sign)value*=-1.0;
0000009A 1C20 MOV R0,R4 ; sign
0000009C 2800 CMP R0,#0x0 ; sign
0000009E D004 BEQ L_19 ; T=0x000000AA
000000A0 1C28 MOV R0,R5 ; value
000000A2 4800 LDR R1,=0xBF800000
000000A4 F7FF BL ?C?FPMUL?T ; T=0x0001 (1) ; ?C?FPMUL?T
000000A6 FFAC BL ?C?FPMUL?T ; T=0x0001 (2) ; ?C?FPMUL?T
ARM COMPILER V2.53, my_lib 23/07/06 16:59:04 PAGE 5
000000A8 1C05 MOV R5,R0 ; value
000000AA L_19:
64: return value;
000000AA 1C28 MOV R0,R5 ; value
000000AC ; SCOPE-END
65: }
000000AC BCF0 POP {R4-R7}
000000AE BC08 POP {R3}
000000B0 4718 BX R3
000000B2 ENDP ; '__atof?T'
*** CODE SEGMENT '?PR?_my_sprintf?T?my_lib':
67: int _my_sprintf(char * str,char const *format,...)
00000000 B40C PUSH {R2-R3}
00000002 B500 PUSH {LR}
00000004 1C0A MOV R2,R1 ; format
00000006 ---- Variable 'format' assigned to Register 'R2' ----
00000006 1C01 MOV R1,R0 ; str
00000008 ---- Variable 'str' assigned to Register 'R1' ----
68: {
00000008 ; SCOPE-START
72: va_start(args,format);
00000008 AB00 ADD R3,R13,#0x0
0000000A ---- Variable 'args' assigned to Register 'R3' ----
73: re=vsprintf(str,format,args);
0000000A 1C08 MOV R0,R1 ; str
0000000C 1C11 MOV R1,R2 ; format
0000000E 1C1A MOV R2,R3 ; args
00000010 F7FF BL vsprintf?T ; T=0x0001 (1)
00000012 FFF6 BL vsprintf?T ; T=0x0001 (2)
00000014 1C01 MOV R1,R0 ; re
00000016 ---- Variable 're' assigned to Register 'R1' ----
75: return re;
00000016 1C08 MOV R0,R1 ; re
00000018 ; SCOPE-END
00000018 BC08 POP {R3}
0000001A B002 ADD R13,#0x8
0000001C 4718 BX R3
0000001E ENDP ; '_my_sprintf?T'
Module Information Static
----------------------------------
code size = ------
data size = ------
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -