📄 fat.lst
字号:
000000E8 0E09 LSR R1,R1,#0x18
000000EA 1C18 MOV R0,R3 ; buf2
000000EC 7001 STRB R1,[R0,#0x0] ; buf2
157: }else{
000000EE E004 B L_33 ; T=0x000000FA
000000F0 L_32:
158: buf2[0]=(next_cluster_addr>>4)&0xFF;
000000F0 1C31 MOV R1,R6 ; next_cluster_addr
000000F2 0909 LSR R1,R1,#0x4 ; next_cluster_addr
000000F4 20FF MOV R0,#0xFF
000000F6 4001 AND R1,R0
000000F8 0609 LSL R1,R1,#0x18
000000FA 0E09 LSR R1,R1,#0x18
000000FC 1C18 MOV R0,R3 ; buf2
000000FE 7001 STRB R1,[R0,#0x0] ; buf2
159: }
00000100 L_33:
160: part_relSect(fs->part,buf2);
00000100 1C28 MOV R0,R5 ; fs
00000102 6800 LDR R0,[R0,#0x0] ; fs
00000104 1C19 MOV R1,R3 ; buf2
00000106 F7FF BL part_relSect?T ; T=0x0001 (1)
00000108 FF7B BL part_relSect?T ; T=0x0001 (2)
161: }else{
0000010A E03D B L_34 ; T=0x00000188
0000010C L_29:
162: if(cluster_addr%2==0){
0000010C 1C38 MOV R0,R7 ; cluster_addr
0000010E 2101 MOV R1,#0x1
00000110 4208 TST R0,R1 ; cluster_addr
00000112 D11B BNE L_35 ; T=0x0000014C
163: buf[offset]=next_cluster_addr&0xFF;
00000114 1C30 MOV R0,R6 ; next_cluster_addr
00000116 21FF MOV R1,#0xFF
00000118 4008 AND R0,R1
0000011A 0600 LSL R0,R0,#0x18
0000011C 0E00 LSR R0,R0,#0x18
0000011E 1C21 MOV R1,R4 ; offset
00000120 040A LSL R2,R1,#0x10 ; offset
00000122 0C12 LSR R2,R2,#0x10
00000124 9900 LDR R1,[R13,#0x0] ; buf
00000126 5488 STRB R0,[R1,R2]
164: buf[offset+1]=(buf[offset+1]&0xF0)+((next_cluster_addr>>8)&0xF);
00000128 1C20 MOV R0,R4 ; offset
0000012A 0400 LSL R0,R0,#0x10 ; offset
0000012C 0C00 LSR R0,R0,#0x10
0000012E 9900 LDR R1,[R13,#0x0] ; buf
00000130 1808 ADD R0,R1,R0
00000132 7840 LDRB R0,[R0,#0x1]
00000134 22F0 MOV R2,#0xF0
00000136 4010 AND R0,R2
00000138 1C32 MOV R2,R6 ; next_cluster_addr
0000013A 0A12 LSR R2,R2,#0x8 ; next_cluster_addr
0000013C 230F MOV R3,#0xF
0000013E 401A AND R2,R3
00000140 1880 ADD R0,R2
00000142 0600 LSL R0,R0,#0x18
00000144 0E00 LSR R0,R0,#0x18
ARM COMPILER V2.42, fat 27/03/06 10:45:49 PAGE 18
00000146 1C22 MOV R2,R4 ; offset
00000148 0412 LSL R2,R2,#0x10 ; offset
0000014A 0C12 LSR R2,R2,#0x10
0000014C 1889 ADD R1,R2
0000014E 7048 STRB R0,[R1,#0x1]
165: }else{
00000150 E01A B L_34 ; T=0x00000188
00000152 L_35:
166: buf[offset]=(buf[offset]&0xF)+((next_cluster_addr<<4)&0xF0);
00000152 1C20 MOV R0,R4 ; offset
00000154 0400 LSL R0,R0,#0x10 ; offset
00000156 0C00 LSR R0,R0,#0x10
00000158 9900 LDR R1,[R13,#0x0] ; buf
0000015A 5C08 LDRB R0,[R1,R0]
0000015C 220F MOV R2,#0xF
0000015E 4010 AND R0,R2
00000160 1C32 MOV R2,R6 ; next_cluster_addr
00000162 0112 LSL R2,R2,#0x4 ; next_cluster_addr
00000164 23F0 MOV R3,#0xF0
00000166 401A AND R2,R3
00000168 1880 ADD R0,R2
0000016A 0600 LSL R0,R0,#0x18
0000016C 0E00 LSR R0,R0,#0x18
0000016E 1C22 MOV R2,R4 ; offset
00000170 0412 LSL R2,R2,#0x10 ; offset
00000172 0C12 LSR R2,R2,#0x10
00000174 5488 STRB R0,[R1,R2]
167: buf[offset+1]=(next_cluster_addr>>4)&0xFF;
00000176 1C30 MOV R0,R6 ; next_cluster_addr
00000178 0900 LSR R0,R0,#0x4 ; next_cluster_addr
0000017A 21FF MOV R1,#0xFF
0000017C 4008 AND R0,R1
0000017E 0600 LSL R0,R0,#0x18
00000180 0E00 LSR R0,R0,#0x18
00000182 1C21 MOV R1,R4 ; offset
00000184 040A LSL R2,R1,#0x10 ; offset
00000186 0C12 LSR R2,R2,#0x10
00000188 9900 LDR R1,[R13,#0x0] ; buf
0000018A 1889 ADD R1,R2
0000018C 7048 STRB R0,[R1,#0x1]
169: }
0000018E L_34:
170: part_relSect(fs->part,buf);
0000018E 1C28 MOV R0,R5 ; fs
00000190 6800 LDR R0,[R0,#0x0] ; fs
00000192 9900 LDR R1,[R13,#0x0] ; buf
00000194 F7FF BL part_relSect?T ; T=0x0001 (1)
00000196 FF34 BL part_relSect?T ; T=0x0001 (2)
171: break;
00000198 E021 B L_24 ; T=0x000001DE
172: case FAT16:
0000019A L_27:
173: offset=cluster_addr%256;
0000019A 1C3C MOV R4,R7 ; cluster_addr
0000019C 20FF MOV R0,#0xFF
0000019E 4004 AND R4,R0
000001A0 0424 LSL R4,R4,#0x10
000001A2 0C24 LSR R4,R4,#0x10
174: *((euint16*)buf+offset)=next_cluster_addr;
000001A4 1C30 MOV R0,R6 ; next_cluster_addr
000001A6 0400 LSL R0,R0,#0x10 ; next_cluster_addr
000001A8 0C00 LSR R0,R0,#0x10
000001AA 1C21 MOV R1,R4 ; offset
000001AC 040A LSL R2,R1,#0x10 ; offset
000001AE 0C12 LSR R2,R2,#0x10
000001B0 0052 LSL R2,R2,#0x1
ARM COMPILER V2.42, fat 27/03/06 10:45:49 PAGE 19
000001B2 9900 LDR R1,[R13,#0x0] ; buf
000001B4 5288 STRH R0,[R1,R2]
175: part_relSect(fs->part,buf);
000001B6 1C28 MOV R0,R5 ; fs
000001B8 6800 LDR R0,[R0,#0x0] ; fs
000001BA 9900 LDR R1,[R13,#0x0] ; buf
000001BC F7FF BL part_relSect?T ; T=0x0001 (1)
000001BE FF20 BL part_relSect?T ; T=0x0001 (2)
176: break;
000001C0 E00D B L_24 ; T=0x000001DE
177: case FAT32:
000001C2 L_28:
178: offset=cluster_addr%128;
000001C2 1C3C MOV R4,R7 ; cluster_addr
000001C4 207F MOV R0,#0x7F
000001C6 4004 AND R4,R0
000001C8 0424 LSL R4,R4,#0x10
000001CA 0C24 LSR R4,R4,#0x10
179: *((euint32*)buf+offset)=next_cluster_addr;
000001CC 1C30 MOV R0,R6 ; next_cluster_addr
000001CE 1C21 MOV R1,R4 ; offset
000001D0 040A LSL R2,R1,#0x10 ; offset
000001D2 0C12 LSR R2,R2,#0x10
000001D4 0092 LSL R2,R2,#0x2
000001D6 9900 LDR R1,[R13,#0x0] ; buf
000001D8 5088 STR R0,[R1,R2]
180: part_relSect(fs->part,buf);
000001DA 1C28 MOV R0,R5 ; fs
000001DC 6800 LDR R0,[R0,#0x0] ; fs
000001DE 9900 LDR R1,[R13,#0x0] ; buf
000001E0 F7FF BL part_relSect?T ; T=0x0001 (1)
000001E2 FF0E BL part_relSect?T ; T=0x0001 (2)
182: }
000001E4 ; SCOPE-END
184: }
000001E4 L_24:
000001E4 B002 ADD R13,#0x8
000001E6 BCF0 POP {R4-R7}
000001E8 BC08 POP {R3}
000001EA 4718 BX R3
000001EC ENDP ; 'fat_setNextClusterAddress?T'
*** CODE SEGMENT '?PR?fat_isEocMarker?T?fat':
194: eint16 fat_isEocMarker(FileSystem *fs,euint32 fat_entry)
00000000 1C0A MOV R2,R1 ; fat_entry
00000002 ---- Variable 'fat_entry' assigned to Register 'R2' ----
00000002 1C01 MOV R1,R0 ; fs
00000004 ---- Variable 'fs' assigned to Register 'R1' ----
196: switch(fs->type){
00000004 1C08 MOV R0,R1 ; fs
00000006 303C ADD R0,#0x3C
00000008 7800 LDRB R0,[R0,#0x0]
0000000A 2802 CMP R0,#0x2
0000000C D009 BEQ L_39 ; T=0x00000022
0000000E 2803 CMP R0,#0x3
00000010 D00D BEQ L_40 ; T=0x0000002E
00000012 2801 CMP R0,#0x1
00000014 D113 BNE L_37 ; T=0x0000003E
197: case FAT12:
00000016 L_38:
198: if(fat_entry<0xFF8){
00000016 1C10 MOV R0,R2 ; fat_entry
00000018 4800 LDR R1,=0xFF8
0000001A 4288 CMP R0,R1 ; fat_entry
0000001C D20F BCS L_37 ; T=0x0000003E
199: return(0);
0000001E 2000 MOV R0,#0x0
ARM COMPILER V2.42, fat 27/03/06 10:45:49 PAGE 20
00000020 E00E B L_42 ; T=0x00000040
202: case FAT16:
00000022 L_39:
203: if(fat_entry<0xFFF8){
00000022 1C10 MOV R0,R2 ; fat_entry
00000024 4800 LDR R1,=0xFFF8
00000026 4288 CMP R0,R1 ; fat_entry
00000028 D209 BCS L_37 ; T=0x0000003E
204: return(0);
0000002A 2000 MOV R0,#0x0
0000002C E008 B L_42 ; T=0x00000040
207: case FAT32:
0000002E L_40:
208: if((fat_entry&0x0FFFFFFF)<0xFFFFFF8){
0000002E 1C10 MOV R0,R2 ; fat_entry
00000030 4800 LDR R1,=0xF0000000
00000032 4388 BIC R0,R1
00000034 4800 LDR R1,=0xF0000008
00000036 42C8 CMN R0,R1
00000038 D201 BCS L_37 ; T=0x0000003E
209: return(0);
0000003A 2000 MOV R0,#0x0
0000003C E000 B L_42 ; T=0x00000040
212: }
0000003E L_37:
213: return(1);
0000003E 2001 MOV R0,#0x1
214: }
00000040 L_42:
00000040 4770 BX R14
00000042 ENDP ; 'fat_isEocMarker?T'
*** CODE SEGMENT '?PR?fat_giveEocMarker?T?fat':
226: euint32 fat_giveEocMarker(FileSystem *fs)
00000000 1C01 MOV R1,R0 ; fs
00000002 ---- Variable 'fs' assigned to Register 'R1' ----
228: switch(fs->type)
00000002 1C08 MOV R0,R1 ; fs
00000004 303C ADD R0,#0x3C
00000006 7800 LDRB R0,[R0,#0x0]
00000008 2802 CMP R0,#0x2
0000000A D005 BEQ L_47 ; T=0x00000018
0000000C 2803 CMP R0,#0x3
0000000E D005 BEQ L_48 ; T=0x0000001C
00000010 2801 CMP R0,#0x1
00000012 D105 BNE L_45 ; T=0x00000020
230: case FAT12:
00000014 L_46:
231: return(0xFFF);
00000014 4800 LDR R0,=0xFFF
00000016 E004 B L_49 ; T=0x00000022
233: case FAT16:
00000018 L_47:
234: return(0xFFFF);
00000018 4800 LDR R0,=0xFFFF
0000001A E002 B L_49 ; T=0x00000022
236: case FAT32:
0000001C L_48:
237: return(0x0FFFFFFF);
0000001C 4800 LDR R0,=0xFFFFFFF
0000001E E000 B L_49 ; T=0x00000022
239: }
00000020 L_45:
240: return(0);
00000020 2000 MOV R0,#0x0
241: }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -