file.lst

来自「Philips LPC2138 Demo Application with Ke」· LST 代码 · 共 1,317 行 · 第 1/5 页

LST
1,317
字号
 EXTERN CODE16 (fs_clusterToSector?T)
 EXTERN CODE16 (fs_getNextFreeCluster?T)
 EXTERN CODE16 (fs_giveFreeClusterHint?T)
 EXTERN CODE16 (fs_findFreeFile?T)
 EXTERN CODE16 (fs_findFile?T)
 EXTERN CODE16 (fs_setFirstClusterInDirEntry?T)
 EXTERN CODE16 (fs_initClusterChain?T)
 EXTERN CODE16 (fat_setNextClusterAddress?T)
 EXTERN CODE16 (fat_giveEocMarker?T)
 EXTERN CODE16 (fat_LogicToDiscCluster?T)
 EXTERN CODE16 (fat_allocClusterChain?T)
 EXTERN CODE16 (fat_countClustersInChain?T)
 EXTERN CODE16 (dir_getFileStructure?T)
 EXTERN CODE16 (dir_createDirectoryEntry?T)
 EXTERN CODE16 (dir_createDefaultEntry?T)
 EXTERN CODE16 (dir_setFirstCluster?T)
 EXTERN CODE16 (dir_setFileSize?T)
 EXTERN CODE16 (dir_getFatFileName?T)
 EXTERN CODE16 (dir_updateDirectoryEntry?T)
 EXTERN CODE16 (?C?UDIV?T)



*** PUBLICS:
 PUBLIC         file_fopen?T
 PUBLIC         file_fclose?T
 PUBLIC         file_setpos?T
 PUBLIC         file_fread?T
 PUBLIC         file_read?T
 PUBLIC         file_fwrite?T
 PUBLIC         file_write?T
 PUBLIC         file_normalToFatName?T
 PUBLIC         file_validateChar?T
 PUBLIC         file_initFile?T
 PUBLIC         file_setAttr?T
 PUBLIC         file_getAttr?T
 PUBLIC         file_requiredCluster?T



*** CODE SEGMENT '?PR?file_fread?T?file':
   34: euint32 file_fread(File *file,euint32 offset, euint32 size,euint8 *buf)
 00000000  B5F0      PUSH        {R4-R7,LR}
 00000002  1C1D      MOV         R5,R3 ; buf
 00000004  ---- Variable 'buf' assigned to Register 'R5' ----
 00000004  1C17      MOV         R7,R2 ; size
 00000006  ---- Variable 'size' assigned to Register 'R7' ----
 00000006  1C0E      MOV         R6,R1 ; offset
 00000008  ---- Variable 'offset' assigned to Register 'R6' ----
 00000008  1C04      MOV         R4,R0 ; file
 0000000A  ---- Variable 'file' assigned to Register 'R4' ----
 0000000A  B084      SUB         R13,#0x10
   35: {
 0000000C            ; SCOPE-START
   36:     euint32 bytes_read=0,size_left=size,coffset=offset;
 0000000C  2000      MOV         R0,#0x0
 0000000E  9000      STR         R0,[R13,#0x0] ; bytes_read
 00000010  1C38      MOV         R0,R7 ; size
 00000012  9001      STR         R0,[R13,#0x4] ; size_left
ARM COMPILER V2.42,  file                                                                  27/03/06  10:45:50  PAGE 10  

 00000014  1C30      MOV         R0,R6 ; offset
 00000016  9002      STR         R0,[R13,#0x8] ; coffset
   42:     if(!file_getAttr(file,FILE_STATUS_OPEN))return(0);
 00000018  1C20      MOV         R0,R4 ; file
 0000001A  2100      MOV         R1,#0x0
 0000001C  F7FF      BL          file_getAttr?T  ; T=0x0001  (1)
 0000001E  FFF0      BL          file_getAttr?T  ; T=0x0001  (2)
 00000020  0600      LSL         R0,R0,#0x18 ; file_getAttr?T
 00000022  0E00      LSR         R0,R0,#0x18
 00000024  2800      CMP         R0,#0x0
 00000026  D101      BNE         L_1  ; T=0x0000002C
 00000028  2000      MOV         R0,#0x0
 0000002A  E08C      B           L_2  ; T=0x00000146
 0000002C          L_1:
   44:     if(offset>=file->FileSize)
 0000002C  1C20      MOV         R0,R4 ; file
 0000002E  6CC0      LDR         R0,[R0,#0x4C]
 00000030  1C31      MOV         R1,R6 ; offset
 00000032  4281      CMP         R1,R0 ; offset
 00000034  D301      BCC         L_3  ; T=0x0000003A
   45:         size_left=0; /* Offset check */
 00000036  2100      MOV         R1,#0x0
 00000038  9101      STR         R1,[R13,#0x4] ; size_left
 0000003A          L_3:
   47:     if( (offset+size > file->FileSize) && size_left!=0)
 0000003A  1C3A      MOV         R2,R7 ; size
 0000003C  1C31      MOV         R1,R6 ; offset
 0000003E  1889      ADD         R1,R2 ; offset
 00000040  4281      CMP         R1,R0
 00000042  D905      BLS         L_8  ; T=0x00000050
 00000044  9901      LDR         R1,[R13,#0x4] ; size_left
 00000046  2900      CMP         R1,#0x0
 00000048  D002      BEQ         L_8  ; T=0x00000050
   48:         size_left=file->FileSize-offset;
 0000004A  1C31      MOV         R1,R6 ; offset
 0000004C  1A40      SUB         R0,R1 ; offset
 0000004E  9001      STR         R0,[R13,#0x4] ; size_left
   50:     while(size_left>0){
 00000050          L_8:
 00000050  E075      B           L_5  ; T=0x0000013E
 00000052          L_7:
   52:         cclus = coffset/(512*file->fs->volumeId.SectorsPerCluster);
 00000052  1C20      MOV         R0,R4 ; file
 00000054  6A87      LDR         R7,[R0,#0x28]
 00000056  79BE      LDRB        R6,[R7,#0x6]
 00000058  1C31      MOV         R1,R6
 0000005A  0249      LSL         R1,R1,#0x9
 0000005C  9A02      LDR         R2,[R13,#0x8] ; coffset
 0000005E  1C10      MOV         R0,R2
 00000060  F7FF      BL          ?C?UDIV?T  ; T=0x0001  (1) ; ?C?UDIV?T
 00000062  FFCE      BL          ?C?UDIV?T  ; T=0x0001  (2) ; ?C?UDIV?T
 00000064  1C08      MOV         R0,R1
 00000066  1C03      MOV         R3,R0 ; cclus
 00000068  ---- Variable 'cclus' assigned to Register 'R3' ----
   53:         csec = (coffset/(512))%file->fs->volumeId.SectorsPerCluster;
 00000068  1C31      MOV         R1,R6
 0000006A  0A50      LSR         R0,R2,#0x9
 0000006C  F7FF      BL          ?C?UDIV?T  ; T=0x0001  (1) ; ?C?UDIV?T
 0000006E  FFC8      BL          ?C?UDIV?T  ; T=0x0001  (2) ; ?C?UDIV?T
 00000070  1C01      MOV         R1,R0
 00000072  1C0F      MOV         R7,R1 ; csec
 00000074  ---- Variable 'csec' assigned to Register 'R7' ----
   54:         cbyte = coffset%512;
 00000074  9A02      LDR         R2,[R13,#0x8] ; coffset
 00000076  4800      LDR         R0,=0x1FF
 00000078  4002      AND         R2,R0
ARM COMPILER V2.42,  file                                                                  27/03/06  10:45:50  PAGE 11  

 0000007A  ---- Variable 'cbyte' assigned to Register 'R2' ----
   56:         if(cbyte!=0 || size_left<512){
 0000007A  1C11      MOV         R1,R2 ; cbyte
 0000007C  2900      CMP         R1,#0x0 ; cbyte
 0000007E  D103      BNE         L_10  ; T=0x00000088
 00000080  9901      LDR         R1,[R13,#0x4] ; size_left
 00000082  4A80      LDR         R2,=0x200
 00000084  4291      CMP         R1,R2
 00000086  D20E      BCS         L_9  ; T=0x000000A6
 00000088          L_10:
   57:             btr = 512-(coffset%512)>=size_left?size_left:512-(coffset%512);
 00000088  9A02      LDR         R2,[R13,#0x8] ; coffset
 0000008A  4002      AND         R2,R0
 0000008C  4980      LDR         R1,=0x200
 0000008E  1A88      SUB         R0,R1,R2
 00000090  9A01      LDR         R2,[R13,#0x4] ; size_left
 00000092  4290      CMP         R0,R2
 00000094  D301      BCC         L_11  ; T=0x0000009A
 00000096  9801      LDR         R0,[R13,#0x4] ; size_left
 00000098  E003      B           L_12  ; T=0x000000A2
 0000009A          L_11:
 0000009A  9A02      LDR         R2,[R13,#0x8] ; coffset
 0000009C  4800      LDR         R0,=0x1FF
 0000009E  4002      AND         R2,R0
 000000A0  1A88      SUB         R0,R1,R2
 000000A2          L_12:
 000000A2  9003      STR         R0,[R13,#0xC] ; btr
   58:         }else{
 000000A4  E001      B           L_13  ; T=0x000000AA
 000000A6          L_9:
   59:             btr = 512;
 000000A6  4880      LDR         R0,=0x200
 000000A8  9003      STR         R0,[R13,#0xC] ; btr
   60:         }
 000000AA          L_13:
   62:         if((fat_LogicToDiscCluster(file->fs,&(file->Cache),cclus))!=0){
 000000AA  1C20      MOV         R0,R4 ; file
 000000AC  6A80      LDR         R0,[R0,#0x28]
 000000AE  1C21      MOV         R1,R4 ; file
 000000B0  312C      ADD         R1,#0x2C
 000000B2  1C1A      MOV         R2,R3 ; cclus
 000000B4  F7FF      BL          fat_LogicToDiscCluster?T  ; T=0x0001  (1)
 000000B6  FFA4      BL          fat_LogicToDiscCluster?T  ; T=0x0001  (2)
 000000B8  0400      LSL         R0,R0,#0x10 ; fat_LogicToDiscCluster?T
 000000BA  1400      ASR         R0,R0,#0x10
 000000BC  2800      CMP         R0,#0x0
 000000BE  D001      BEQ         L_14  ; T=0x000000C4
   63:             return(0);
 000000C0  2000      MOV         R0,#0x0
 000000C2  E040      B           L_2  ; T=0x00000146
   64:         }
 000000C4          L_14:
   65:         rclus=file->Cache.DiscCluster;
 000000C4  1C20      MOV         R0,R4 ; file
 000000C6  6B46      LDR         R6,[R0,#0x34]
 000000C8  ---- Variable 'rclus' assigned to Register 'R6' ----
   66:         rsec=fs_clusterToSector(file->fs,rclus);
 000000C8  1C20      MOV         R0,R4 ; file
 000000CA  6A80      LDR         R0,[R0,#0x28]
 000000CC  1C31      MOV         R1,R6 ; rclus
 000000CE  F7FF      BL          fs_clusterToSector?T  ; T=0x0001  (1)
 000000D0  FF97      BL          fs_clusterToSector?T  ; T=0x0001  (2)
 000000D2  1C06      MOV         R6,R0 ; rsec
 000000D4  ---- Variable 'rsec' assigned to Register 'R6' ----
   69:         if(btr==512){
 000000D4  9803      LDR         R0,[R13,#0xC] ; btr
ARM COMPILER V2.42,  file                                                                  27/03/06  10:45:50  PAGE 12  

 000000D6  4980      LDR         R1,=0x200
 000000D8  4288      CMP         R0,R1
 000000DA  D10B      BNE         L_15  ; T=0x000000F4
   71:             part_directSectorRead(file->fs->part,rsec+csec,buf+bytes_read);
 000000DC  1C20      MOV         R0,R4 ; file
 000000DE  6A80      LDR         R0,[R0,#0x28]
 000000E0  6800      LDR         R0,[R0,#0x0]
 000000E2  1C3A      MOV         R2,R7 ; csec
 000000E4  1C31      MOV         R1,R6 ; rsec
 000000E6  1889      ADD         R1,R2 ; rsec
 000000E8  9B00      LDR         R3,[R13,#0x0] ; bytes_read
 000000EA  1C2A      MOV         R2,R5 ; buf
 000000EC  18D2      ADD         R2,R3 ; buf
 000000EE  F7FF      BL          part_directSectorRead?T  ; T=0x0001  (1)
 000000F0  FF87      BL          part_directSectorRead?T  ; T=0x0001  (2)
   72:         }else{
 000000F2  E01A      B           L_16  ; T=0x0000012A
 000000F4          L_15:
   74:             tbuf = part_getSect(file->fs->part,rsec+csec,IOM_MODE_READONLY);
 000000F4  1C20      MOV         R0,R4 ; file
 000000F6  6A80      LDR         R0,[R0,#0x28]
 000000F8  6800      LDR         R0,[R0,#0x0]
 000000FA  1C3A      MOV         R2,R7 ; csec
 000000FC  1C31      MOV         R1,R6 ; rsec
 000000FE  1889      ADD         R1,R2 ; rsec
 00000100  2201      MOV         R2,#0x1
 00000102  F7FF      BL          part_getSect?T  ; T=0x0001  (1)
 00000104  FF7D      BL          part_getSect?T  ; T=0x0001  (2)
 00000106  1C06      MOV         R6,R0 ; tbuf
 00000108  ---- Variable 'tbuf' assigned to Register 'R6' ----
   75:             memCpy(tbuf+(coffset%512),buf+bytes_read,btr);
 00000108  9902      LDR         R1,[R13,#0x8] ; coffset
 0000010A  4800      LDR         R0,=0x1FF
 0000010C  4001      AND         R1,R0
 0000010E  1C30      MOV         R0,R6 ; tbuf
 00000110  1840      ADD         R0,R1 ; tbuf
 00000112  9A00      LDR         R2,[R13,#0x0] ; bytes_read
 00000114  1C29      MOV         R1,R5 ; buf
 00000116  1889      ADD         R1,R2 ; buf
 00000118  9A03      LDR         R2,[R13,#0xC] ; btr
 0000011A  F7FF      BL          memCpy?T  ; T=0x0001  (1)
 0000011C  FF71      BL          memCpy?T  ; T=0x0001  (2)
   76:             part_relSect(file->fs->part,tbuf);
 0000011E  1C20      MOV         R0,R4 ; file
 00000120  6A80      LDR         R0,[R0,#0x28]
 00000122  6800      LDR         R0,[R0,#0x0]
 00000124  1C31      MOV         R1,R6 ; tbuf
 00000126  F7FF      BL          part_relSect?T  ; T=0x0001  (1)
 00000128  FF6B      BL          part_relSect?T  ; T=0x0001  (2)
   77:         }
 0000012A          L_16:
   79:         coffset+=btr;
 0000012A  9903      LDR         R1,[R13,#0xC] ; btr
 0000012C  9802      LDR         R0,[R13,#0x8] ; coffset
 0000012E  1840      ADD         R0,R1
 00000130  9002      STR         R0,[R13,#0x8] ; coffset
   80:         bytes_read+=btr;
 00000132  9800      LDR         R0,[R13,#0x0] ; bytes_read
 00000134  1840      ADD         R0,R1
 00000136  9000      STR         R0,[R13,#0x0] ; bytes_read
   81:         size_left-=btr;
 00000138  9801      LDR         R0,[R13,#0x4] ; size_left
 0000013A  1A40      SUB         R0,R1
 0000013C  9001      STR         R0,[R13,#0x4] ; size_left
   82:     }
 0000013E          L_5:
ARM COMPILER V2.42,  file                                                                  27/03/06  10:45:50  PAGE 13  

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?