############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 18/Feb/2008 00:21:55 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT\TextReader\add.c # # Command line = D:\Pasha\elf\_MY_PROJECT\TextReader\add.c -D # # NEWSGOLD -D ELKA -lC D:\Pasha\elf\_MY_PROJECT\TextRe # # ader\Release_ELKA\List\ -o # # D:\Pasha\elf\_MY_PROJECT\TextReader\Release_ELKA\Obj # # \ -s9 --cpu_mode arm --endian little --cpu # # ARM926EJ-S --stack_align 4 --interwork -e --fpu # # None --dlib_config "D:\Pasha\ARM_Embedded_Workbench\ # # Embedded Workbench 4.0 Evaluation\ARM\LIB\dl5tpainl8 # # n.h" -I "D:\Pasha\ARM_Embedded_Workbench\Embedded # # Workbench 4.0 Evaluation\ARM\INC\" # # --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT\TextReader\Release_ELKA\Lis # # t\add.lst # # Object file = D:\Pasha\elf\_MY_PROJECT\TextReader\Release_ELKA\Obj # # \add.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT\TextReader\add.c 1 #include "..\inc\swilib.h" 2 //#include "main.h" 3 //------------------------------ \ In segment CODE, align 4, keep-with-next 4 int start(const char *f) 5 { \ start: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 6 WSHDR *ws; 7 ws=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 0050A0E1 MOV R5,R0 8 str_2ws(ws,f,256); \ 00000014 402FA0E3 MOV R2,#+256 \ 00000018 0410A0E1 MOV R1,R4 \ 0000001C 6C0100EF SWI +364 9 ExecuteFile(ws,0,0); \ 00000020 0020A0E3 MOV R2,#+0 \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 0500A0E1 MOV R0,R5 \ 0000002C 940000EF SWI +148 10 FreeWS(ws); \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 290100EF SWI +297 11 return(1); \ 00000038 0100A0E3 MOV R0,#+1 \ 0000003C 3080BDE8 POP {R4,R5,PC} ;; return 12 } 13 //=============================== \ In segment CODE, align 4, keep-with-next 14 int atoi(char *attr) 15 { 16 int ret=0; \ atoi: \ 00000000 0010A0E3 MOV R1,#+0 17 int neg=1; \ 00000004 0120A0E3 MOV R2,#+1 18 for (int k=0;;k++) \ 00000008 0AC0A0E3 MOV R12,#+10 \ 0000000C 040000EA B ??atoi_0 19 { 20 if ( attr[k]>0x2F && attr[k]<0x3A) {ret=ret*10+attr[k]-0x30;} \ ??atoi_1: \ 00000010 3A0053E3 CMP R3,#+58 \ 00000014 0800002A BCS ??atoi_2 \ 00000018 9C3121E0 MLA R1,R12,R1,R3 \ 0000001C 301041E2 SUB R1,R1,#+48 \ ??atoi_3: \ 00000020 010080E2 ADD R0,R0,#+1 \ ??atoi_0: \ 00000024 0030D0E5 LDRB R3,[R0, #+0] \ 00000028 300053E3 CMP R3,#+48 \ 0000002C F7FFFF2A BCS ??atoi_1 21 else 22 { 23 if ( attr[k]=='-') {neg=-1;} \ 00000030 2D0053E3 CMP R3,#+45 \ 00000034 0020E003 MVNEQ R2,#+0 \ 00000038 F8FFFF0A BEQ ??atoi_3 24 else {return(ret*neg);} \ ??atoi_2: \ 0000003C 920100E0 MUL R0,R2,R1 \ 00000040 1EFF2FE1 BX LR ;; return 25 } 26 } 27 28 } 29 30 //======================================================= \ In segment CODE, align 4, keep-with-next 31 void *about() 32 { 33 char s[128]; 34 snprintf(s,255,"TextReader/Editor v0.1.5fix\n(c)kluchnik\n%s %s",__DATE__,__TIME__); \ about: \ 00000000 34209FE5 LDR R2,??about_0 ;; `?` \ 00000004 00402DE9 PUSH {LR} \ 00000008 80D04DE2 SUB SP,SP,#+128 \ 0000000C 3C0082E2 ADD R0,R2,#+60 \ 00000010 01002DE9 PUSH {R0} \ 00000014 303082E2 ADD R3,R2,#+48 \ 00000018 FF10A0E3 MOV R1,#+255 \ 0000001C 04008DE2 ADD R0,SP,#+4 \ 00000020 1B0100EF SWI +283 35 ShowMSG(2, (int)s); \ 00000024 04108DE2 ADD R1,SP,#+4 \ 00000028 0200A0E3 MOV R0,#+2 \ 0000002C 480100EF SWI +328 36 return 0; \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 84D08DE2 ADD SP,SP,#+132 \ 00000038 0080BDE8 POP {PC} ;; return \ ??about_0: \ 0000003C ........ DC32 `?` 37 } 38 39 //======================================================== 40 \ In segment CODE, align 4, keep-with-next 41 int fread32(int fh, char *buf, int len, unsigned int *err) 42 { \ fread32: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 \ 00000010 0370A0E1 MOV R7,R3 43 int clen; 44 int rlen; 45 int total=0; \ 00000014 0080A0E3 MOV R8,#+0 \ 00000018 010000EA B ??fread32_0 46 while(len) 47 { 48 if (len>16384) clen=16384; else clen=len; 49 total+=(rlen=fread(fh, buf, clen, err)); 50 if (rlen!=clen) break; 51 buf+=rlen; \ ??fread32_1: \ 0000001C 055080E0 ADD R5,R0,R5 52 len-=clen; \ 00000020 096046E0 SUB R6,R6,R9 \ ??fread32_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 0C00000A BEQ ??fread32_2 \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 400C80E3 ORR R0,R0,#0x4000 \ 00000034 000056E1 CMP R6,R0 \ 00000038 409CA0A3 MOVGE R9,#+16384 \ 0000003C 0690A0B1 MOVLT R9,R6 \ 00000040 0730A0E1 MOV R3,R7 \ 00000044 0920A0E1 MOV R2,R9 \ 00000048 0510A0E1 MOV R1,R5 \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 0B0000EF SWI +11 \ 00000054 088080E0 ADD R8,R0,R8 \ 00000058 090050E1 CMP R0,R9 \ 0000005C EEFFFF0A BEQ ??fread32_1 53 } 54 return(total); \ ??fread32_2: \ 00000060 0800A0E1 MOV R0,R8 \ 00000064 F083BDE8 POP {R4-R9,PC} ;; return 55 } 56 \ In segment CODE, align 4, keep-with-next 57 int fwrite32(int fh, char *buf, int len, unsigned int *err) 58 { \ fwrite32: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 \ 00000010 0370A0E1 MOV R7,R3 59 int clen; 60 int rlen; 61 int total=0; \ 00000014 0080A0E3 MOV R8,#+0 \ 00000018 010000EA B ??fwrite32_0 62 while(len) 63 { 64 if (len>16384) clen=16384; else clen=len; 65 total+=(rlen=fwrite(fh, buf, clen, err)); 66 if (rlen!=clen) break; 67 buf+=rlen; \ ??fwrite32_1: \ 0000001C 055080E0 ADD R5,R0,R5 68 len-=clen; \ 00000020 096046E0 SUB R6,R6,R9 \ ??fwrite32_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 0C00000A BEQ ??fwrite32_2 \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 400C80E3 ORR R0,R0,#0x4000 \ 00000034 000056E1 CMP R6,R0 \ 00000038 409CA0A3 MOVGE R9,#+16384 \ 0000003C 0690A0B1 MOVLT R9,R6 \ 00000040 0730A0E1 MOV R3,R7 \ 00000044 0920A0E1 MOV R2,R9 \ 00000048 0510A0E1 MOV R1,R5 \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 0C0000EF SWI +12 \ 00000054 088080E0 ADD R8,R0,R8 \ 00000058 090050E1 CMP R0,R9 \ 0000005C EEFFFF0A BEQ ??fwrite32_1 69 //progressbar();//add 70 } 71 return(total); \ ??fwrite32_2: \ 00000060 0800A0E1 MOV R0,R8 \ 00000064 F083BDE8 POP {R4-R9,PC} ;; return 72 } 73 74 //========================================================================== 75 \ In segment CODE, align 4, keep-with-next 76 char *GetName(char *file,int type)//Вытаскиваем имя из пути к файлу, type==0-без расширения,1 - с расширением 77 { \ GetName: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0140A0E1 MOV R4,R1 78 char *p=strrchr(file,'\\'); \ 00000008 5C10A0E3 MOV R1,#+92 \ 0000000C 170100EF SWI +279 79 if(type) return p+1; \ 00000010 000054E3 CMP R4,#+0 \ 00000014 01008012 ADDNE R0,R0,#+1 \ 00000018 3080BD18 POPNE {R4,R5,PC} 80 char *name; 81 if (p) \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0200000A BEQ ??GetName_0 82 { 83 name=strchr(p,'.'); \ 00000024 2E10A0E3 MOV R1,#+46 \ 00000028 180000EF SWI +24 \ 0000002C 0050A0E1 MOV R5,R0 84 } 85 return name; \ ??GetName_0: \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 3080BDE8 POP {R4,R5,PC} ;; return 86 } \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 546578745265 DC8 "TextReader/Editor v0.1.5fix\012(c)kluchnik\012%s %s" \ 616465722F45 \ 6469746F7220 \ 76302E312E35 \ 6669780A2863 \ 296B6C756368 \ 6E696B0A2573 \ 20257300 \ 0000002E 0000 DC8 0, 0 \ 00000030 466562203138 DC8 "Feb 18 2008" \ 203230303800 \ 0000003C 30303A32313A DC8 "00:21:55" \ 353500 \ 00000045 000000 DC8 0, 0, 0 Maximum stack usage in bytes: Function CSTACK -------- ------ GetName 12 about 136 atoi 0 fread32 28 fwrite32 28 start 12 Segment part sizes: Function/Label Bytes -------------- ----- start 64 atoi 68 about 64 fread32 104 fwrite32 104 GetName 56 ? 72 Others 24 484 bytes in segment CODE 72 bytes in segment DATA_C 460 bytes of CODE memory (+ 24 bytes shared) 72 bytes of CONST memory Errors: none Warnings: none