⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fat.lst

📁 Philips LPC2138 Demo Application with Keil C
💻 LST
📖 第 1 页 / 共 5 页
字号:
 00000078  D110      BNE         L_19  ; T=0x0000009C
   97:                 part_relSect(fs->part,buf);
 0000007A  1C30      MOV         R0,R6 ; fs
 0000007C  6800      LDR         R0,[R0,#0x0] ; fs
 0000007E  1C29      MOV         R1,R5 ; buf
 00000080  F7FF      BL          part_relSect?T  ; T=0x0001  (1)
 00000082  FFBE      BL          part_relSect?T  ; T=0x0001  (2)
   98:                 buf=part_getSect(fs->part,sector+1,IOM_MODE_READONLY);
 00000084  1C30      MOV         R0,R6 ; fs
 00000086  6800      LDR         R0,[R0,#0x0] ; fs
 00000088  9902      LDR         R1,[R13,#0x8] ; sector
 0000008A  3101      ADD         R1,#0x1
 0000008C  2201      MOV         R2,#0x1
 0000008E  F7FF      BL          part_getSect?T  ; T=0x0001  (1)
 00000090  FFB7      BL          part_getSect?T  ; T=0x0001  (2)
 00000092  1C05      MOV         R5,R0 ; buf
   99:                 lb = buf[0];
 00000094  7801      LDRB        R1,[R0,#0x0] ; buf
 00000096  A801      ADD         R0,R13,#0x4
 00000098  7001      STRB        R1,[R0,#0x0] ; lb
  100:             }else{
 0000009A  E007      B           L_20  ; T=0x000000AC
 0000009C          L_19:
  101:                 lb = buf[offset + 1];
 0000009C  1C20      MOV         R0,R4 ; offset
 0000009E  0401      LSL         R1,R0,#0x10 ; offset
 000000A0  0C09      LSR         R1,R1,#0x10
 000000A2  1C28      MOV         R0,R5 ; buf
 000000A4  1840      ADD         R0,R1 ; buf
 000000A6  7841      LDRB        R1,[R0,#0x1]
 000000A8  A801      ADD         R0,R13,#0x4
 000000AA  7001      STRB        R1,[R0,#0x0] ; lb
  102:             }
 000000AC          L_20:
  103:             if(cluster_addr%2==0){
 000000AC  1C38      MOV         R0,R7 ; cluster_addr
 000000AE  2101      MOV         R1,#0x1
 000000B0  4208      TST         R0,R1 ; cluster_addr
 000000B2  D109      BNE         L_21  ; T=0x000000C8
  104:                 nextcluster = ( ((lb&0x0F)<<8) + (hb) );
 000000B4  A801      ADD         R0,R13,#0x4
 000000B6  7800      LDRB        R0,[R0,#0x0] ; lb
 000000B8  210F      MOV         R1,#0xF
 000000BA  4008      AND         R0,R1
 000000BC  0200      LSL         R0,R0,#0x8
 000000BE  A900      ADD         R1,R13,#0x0
 000000C0  7809      LDRB        R1,[R1,#0x0] ; hb
 000000C2  1840      ADD         R0,R1
 000000C4  9003      STR         R0,[R13,#0xC] ; nextcluster
  105:             }else{
 000000C6  E022      B           L_15  ; T=0x0000010E
 000000C8          L_21:
  106:                 nextcluster = ( (lb<<4) + (hb>>4) );
 000000C8  A800      ADD         R0,R13,#0x0
ARM COMPILER V2.42,  fat                                                                   27/03/06  10:45:49  PAGE 14  

 000000CA  7800      LDRB        R0,[R0,#0x0] ; hb
 000000CC  1C01      MOV         R1,R0
 000000CE  0909      LSR         R1,R1,#0x4
 000000D0  A801      ADD         R0,R13,#0x4
 000000D2  7800      LDRB        R0,[R0,#0x0] ; lb
 000000D4  0100      LSL         R0,R0,#0x4
 000000D6  1840      ADD         R0,R1
 000000D8  9003      STR         R0,[R13,#0xC] ; nextcluster
  108:             break;
 000000DA  E018      B           L_15  ; T=0x0000010E
  109:         case FAT16:
 000000DC          L_17:
  110:             offset=cluster_addr%256;
 000000DC  1C3C      MOV         R4,R7 ; cluster_addr
 000000DE  20FF      MOV         R0,#0xFF
 000000E0  4004      AND         R4,R0
 000000E2  0424      LSL         R4,R4,#0x10
 000000E4  0C24      LSR         R4,R4,#0x10
  111:             nextcluster = *((euint16 *)buf + offset);
 000000E6  1C20      MOV         R0,R4 ; offset
 000000E8  0401      LSL         R1,R0,#0x10 ; offset
 000000EA  0C09      LSR         R1,R1,#0x10
 000000EC  0049      LSL         R1,R1,#0x1
 000000EE  1C28      MOV         R0,R5 ; buf
 000000F0  5A40      LDRH        R0,[R0,R1]
 000000F2  9003      STR         R0,[R13,#0xC] ; nextcluster
  112:             break;
 000000F4  E00B      B           L_15  ; T=0x0000010E
  113:         case FAT32:
 000000F6          L_18:
  114:             offset=cluster_addr%128;
 000000F6  1C3C      MOV         R4,R7 ; cluster_addr
 000000F8  207F      MOV         R0,#0x7F
 000000FA  4004      AND         R4,R0
 000000FC  0424      LSL         R4,R4,#0x10
 000000FE  0C24      LSR         R4,R4,#0x10
  115:             nextcluster = *((euint32 *)buf + offset);
 00000100  1C20      MOV         R0,R4 ; offset
 00000102  0401      LSL         R1,R0,#0x10 ; offset
 00000104  0C09      LSR         R1,R1,#0x10
 00000106  0089      LSL         R1,R1,#0x2
 00000108  1C28      MOV         R0,R5 ; buf
 0000010A  5840      LDR         R0,[R0,R1]
 0000010C  9003      STR         R0,[R13,#0xC] ; nextcluster
  117:     }
 0000010E          L_15:
  119:     part_relSect(fs->part,buf);
 0000010E  1C30      MOV         R0,R6 ; fs
 00000110  6800      LDR         R0,[R0,#0x0] ; fs
 00000112  1C29      MOV         R1,R5 ; buf
 00000114  F7FF      BL          part_relSect?T  ; T=0x0001  (1)
 00000116  FF74      BL          part_relSect?T  ; T=0x0001  (2)
  121:     return(nextcluster);
 00000118  9803      LDR         R0,[R13,#0xC] ; nextcluster
 0000011A            ; SCOPE-END
  122: }
 0000011A          L_14:
 0000011A  B004      ADD         R13,#0x10
 0000011C  BCF0      POP         {R4-R7}
 0000011E  BC08      POP         {R3}
 00000120  4718      BX          R3
 00000122          ENDP ; 'fat_getNextClusterAddress?T'


*** CODE SEGMENT '?PR?fat_setNextClusterAddress?T?fat':
  131: void fat_setNextClusterAddress(FileSystem *fs,euint32 cluster_addr,euint32 next_cluster_addr)
 00000000  B5F0      PUSH        {R4-R7,LR}
 00000002  1C16      MOV         R6,R2 ; next_cluster_addr
ARM COMPILER V2.42,  fat                                                                   27/03/06  10:45:49  PAGE 15  

 00000004  ---- Variable 'next_cluster_addr' assigned to Register 'R6' ----
 00000004  1C0F      MOV         R7,R1 ; cluster_addr
 00000006  ---- Variable 'cluster_addr' assigned to Register 'R7' ----
 00000006  1C05      MOV         R5,R0 ; fs
 00000008  ---- Variable 'fs' assigned to Register 'R5' ----
 00000008  B082      SUB         R13,#0x8
 0000000A  ---- Variable 'offset' assigned to Register 'R4' ----
  132: {
 0000000A            ; SCOPE-START
  137:     sector=fat_getSectorAddressFatEntry(fs,cluster_addr);
 0000000A  1C28      MOV         R0,R5 ; fs
 0000000C  1C39      MOV         R1,R7 ; cluster_addr
 0000000E  F7FF      BL          fat_getSectorAddressFatEntry?T  ; T=0x0001  (1)
 00000010  FFF7      BL          fat_getSectorAddressFatEntry?T  ; T=0x0001  (2)
 00000012  9001      STR         R0,[R13,#0x4] ; sector
  138:     if(fs->FatSectorCount<sector){
 00000014  1C28      MOV         R0,R5 ; fs
 00000016  6A40      LDR         R0,[R0,#0x24]
 00000018  9901      LDR         R1,[R13,#0x4] ; sector
 0000001A  4288      CMP         R0,R1
 0000001C  D203      BCS         L_23  ; T=0x00000026
  139:         DBG((TXT("HARDERROR:::fat_getNextClusterAddress READ PAST FAT BOUNDARY\n")));
 0000001E  4800      LDR         R0,=??S_1 ; ??S_1
 00000020  F7FF      BL          lpc2000_debug_printf?T  ; T=0x0001  (1)
 00000022  FFEE      BL          lpc2000_debug_printf?T  ; T=0x0001  (2)
  140:         return;
 00000024  E0DB      B           L_24  ; T=0x000001DE
  141:     }
 00000026          L_23:
  143:     buf=part_getSect(fs->part,sector,IOM_MODE_READWRITE);
 00000026  1C28      MOV         R0,R5 ; fs
 00000028  6800      LDR         R0,[R0,#0x0] ; fs
 0000002A  9901      LDR         R1,[R13,#0x4] ; sector
 0000002C  2202      MOV         R2,#0x2
 0000002E  F7FF      BL          part_getSect?T  ; T=0x0001  (1)
 00000030  FFE7      BL          part_getSect?T  ; T=0x0001  (2)
 00000032  9000      STR         R0,[R13,#0x0] ; buf
  145:     switch(fs->type){
 00000034  1C28      MOV         R0,R5 ; fs
 00000036  303C      ADD         R0,#0x3C
 00000038  7800      LDRB        R0,[R0,#0x0]
 0000003A  2802      CMP         R0,#0x2
 0000003C  D100      BEQ         $+4
 0000003E  E0A9      B           L_27  ; T=0x00000194
 00000042  2803      CMP         R0,#0x3
 00000044  D100      BEQ         $+4
 00000046  E0B9      B           L_28  ; T=0x000001BC
 0000004A  2801      CMP         R0,#0x1
 0000004C  D000      BNE         $+4
 0000004E  E0C6      B           L_24  ; T=0x000001DE
  146:         case FAT12:
 00000052          L_26:
  147:             offset = ((cluster_addr%1024)*3/2)%512;
 00000052  1C3C      MOV         R4,R7 ; cluster_addr
 00000054  4800      LDR         R0,=0x3FF
 00000056  4004      AND         R4,R0
 00000058  2003      MOV         R0,#0x3
 0000005A  4344      MUL         R4,R0
 0000005C  0864      LSR         R4,R4,#0x1
 0000005E  4800      LDR         R0,=0x1FF
 00000060  4004      AND         R4,R0
 00000062  0424      LSL         R4,R4,#0x10
 00000064  0C24      LSR         R4,R4,#0x10
  148:             if(offset == 511){
 00000066  1C20      MOV         R0,R4 ; offset
 00000068  0400      LSL         R0,R0,#0x10 ; offset
ARM COMPILER V2.42,  fat                                                                   27/03/06  10:45:49  PAGE 16  

 0000006A  0C00      LSR         R0,R0,#0x10
 0000006C  4800      LDR         R1,=0x1FF
 0000006E  4288      CMP         R0,R1
 00000070  D149      BNE         L_29  ; T=0x00000106
  149:                 if(cluster_addr%2==0){
 00000072  1C38      MOV         R0,R7 ; cluster_addr
 00000074  2101      MOV         R1,#0x1
 00000076  4208      TST         R0,R1 ; cluster_addr
 00000078  D107      BNE         L_30  ; T=0x0000008A
  150:                     buf[offset]=next_cluster_addr&0xFF;
 0000007A  1C30      MOV         R0,R6 ; next_cluster_addr
 0000007C  21FF      MOV         R1,#0xFF
 0000007E  4008      AND         R0,R1
 00000080  0600      LSL         R0,R0,#0x18
 00000082  0E00      LSR         R0,R0,#0x18
 00000084  1C21      MOV         R1,R4 ; offset
 00000086  040A      LSL         R2,R1,#0x10 ; offset
 00000088  0C12      LSR         R2,R2,#0x10
 0000008A  9900      LDR         R1,[R13,#0x0] ; buf
 0000008C  5488      STRB        R0,[R1,R2]
  151:                 }else{
 0000008E  E00E      B           L_31  ; T=0x000000AE
 00000090          L_30:
  152:                     buf[offset]=(buf[offset]&0xF)+((next_cluster_addr<<4)&0xF0);
 00000090  1C20      MOV         R0,R4 ; offset
 00000092  0400      LSL         R0,R0,#0x10 ; offset
 00000094  0C00      LSR         R0,R0,#0x10
 00000096  9900      LDR         R1,[R13,#0x0] ; buf
 00000098  5C08      LDRB        R0,[R1,R0]
 0000009A  220F      MOV         R2,#0xF
 0000009C  4010      AND         R0,R2
 0000009E  1C32      MOV         R2,R6 ; next_cluster_addr
 000000A0  0112      LSL         R2,R2,#0x4 ; next_cluster_addr
 000000A2  23F0      MOV         R3,#0xF0
 000000A4  401A      AND         R2,R3
 000000A6  1880      ADD         R0,R2
 000000A8  0600      LSL         R0,R0,#0x18
 000000AA  0E00      LSR         R0,R0,#0x18
 000000AC  1C22      MOV         R2,R4 ; offset
 000000AE  0412      LSL         R2,R2,#0x10 ; offset
 000000B0  0C12      LSR         R2,R2,#0x10
 000000B2  5488      STRB        R0,[R1,R2]
  153:                 }
 000000B4          L_31:
  154:                 buf2=part_getSect(fs->part,fat_getSectorAddressFatEntry(fs,cluster_addr)+1,IOM_MODE_READWRITE);
 000000B4  1C28      MOV         R0,R5 ; fs
 000000B6  1C39      MOV         R1,R7 ; cluster_addr
 000000B8  F7FF      BL          fat_getSectorAddressFatEntry?T  ; T=0x0001  (1)
 000000BA  FFA2      BL          fat_getSectorAddressFatEntry?T  ; T=0x0001  (2)
 000000BC  1C01      MOV         R1,R0 ; fat_getSectorAddressFatEntry?T
 000000BE  3101      ADD         R1,#0x1
 000000C0  1C28      MOV         R0,R5 ; fs
 000000C2  6800      LDR         R0,[R0,#0x0] ; fs
 000000C4  2202      MOV         R2,#0x2
 000000C6  F7FF      BL          part_getSect?T  ; T=0x0001  (1)
 000000C8  FF9B      BL          part_getSect?T  ; T=0x0001  (2)
 000000CA  1C03      MOV         R3,R0 ; buf2
 000000CC  ---- Variable 'buf2' assigned to Register 'R3' ----
  155:                 if(cluster_addr%2==0){
 000000CC  1C38      MOV         R0,R7 ; cluster_addr
 000000CE  2101      MOV         R1,#0x1
 000000D0  4208      TST         R0,R1 ; cluster_addr
 000000D2  D10A      BNE         L_32  ; T=0x000000EA
  156:                     buf2[0]=(buf2[0]&0xF0)+((next_cluster_addr>>8)&0xF);
 000000D4  1C18      MOV         R0,R3 ; buf2
 000000D6  7801      LDRB        R1,[R0,#0x0] ; buf2
ARM COMPILER V2.42,  fat                                                                   27/03/06  10:45:49  PAGE 17  

 000000D8  20F0      MOV         R0,#0xF0
 000000DA  4001      AND         R1,R0
 000000DC  1C30      MOV         R0,R6 ; next_cluster_addr
 000000DE  0A00      LSR         R0,R0,#0x8 ; next_cluster_addr
 000000E0  220F      MOV         R2,#0xF
 000000E2  4010      AND         R0,R2
 000000E4  1809      ADD         R1,R0
 000000E6  0609      LSL         R1,R1,#0x18

⌨️ 快捷键说明

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