📄 fat.lst
字号:
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 + -