📄 fat.txt
字号:
0004f4 e28d9000 ADD r9,sp,#0
0004f8 e2426001 SUB r6,r2,#1
0004fc ea00001a B |L1.1388|
|L1.1280|
;;;1102 {
;;;1103 p++;
000500 e2844001 ADD r4,r4,#1
;;;1104 for(j=0;j<11;j++)name[j]=0x20;
000504 e3a01000 MOV r1,#0
|L1.1288|
000508 e7c98001 STRB r8,[r9,r1]
00050c e2811001 ADD r1,r1,#1
000510 e20110ff AND r1,r1,#0xff
000514 e351000b CMP r1,#0xb
000518 3afffffa BCC |L1.1288|
;;;1105 j=0;
00051c e3a01000 MOV r1,#0
;;;1106 while(*p != '\\')
000520 ea000006 B |L1.1344|
|L1.1316|
;;;1107 {
;;;1108 if((*p) >= 'a' && (*p) <= 'z')name[j] = (*p++)-0x20;
000524 e2423061 SUB r3,r2,#0x61
000528 e3530019 CMP r3,#0x19
00052c 92422020 SUBLS r2,r2,#0x20
;;;1109 else name[j] = *p++;
000530 e7c92001 STRB r2,[r9,r1]
;;;1110 j++;
000534 e2811001 ADD r1,r1,#1
000538 e2844001 ADD r4,r4,#1 ;1109
00053c e20110ff AND r1,r1,#0xff
|L1.1344|
000540 e5d42000 LDRB r2,[r4,#0] ;1106
000544 e352005c CMP r2,#0x5c ;1106
000548 1afffff5 BNE |L1.1316|
;;;1111 }
;;;1112 if(FAT_FindItem(cluster,name, &FileInfo))return 1;//find the directory
00054c e59f2994 LDR r2,|L1.3816|
000550 e28d1000 ADD r1,sp,#0
000554 ebfffffe BL FAT_FindItem
000558 e3500000 CMP r0,#0
00055c 1a00002a BNE |L1.1548|
000560 e5970000 LDR r0,[r7,#0] ;1101 ; FileInfo
000564 e2851001 ADD r1,r5,#1 ;1101
000568 e20150ff AND r5,r1,#0xff ;1101
|L1.1388|
00056c e1550006 CMP r5,r6 ;1101
000570 baffffe2 BLT |L1.1280|
;;;1113 cluster = FileInfo.StartCluster;
;;;1114 }
;;;1115 p++;
000574 e2841001 ADD r1,r4,#1
;;;1116 for(j=0;j<11;j++)name[j]=0x20;
000578 e3a02000 MOV r2,#0
|L1.1404|
00057c e7c98002 STRB r8,[r9,r2]
000580 e2822001 ADD r2,r2,#1
000584 e20220ff AND r2,r2,#0xff
000588 e352000b CMP r2,#0xb
00058c 3afffffa BCC |L1.1404|
;;;1117 j=0;
000590 e3a02000 MOV r2,#0
;;;1118 while(*p != '.')//file must have a extention
000594 ea000006 B |L1.1460|
|L1.1432|
;;;1119 {
;;;1120 if(*p>='a' && *p<='z')name[j]=(*p++)-0x20;
000598 e243c061 SUB r12,r3,#0x61
00059c e35c0019 CMP r12,#0x19
0005a0 92433020 SUBLS r3,r3,#0x20
;;;1121 else name[j]=*p++;
0005a4 e7c93002 STRB r3,[r9,r2]
;;;1122 j++;
0005a8 e2822001 ADD r2,r2,#1
0005ac e2811001 ADD r1,r1,#1 ;1121
0005b0 e20220ff AND r2,r2,#0xff
|L1.1460|
0005b4 e5d13000 LDRB r3,[r1,#0] ;1118
0005b8 e353002e CMP r3,#0x2e ;1118
0005bc 1afffff5 BNE |L1.1432|
;;;1123 }
;;;1124 j=8;
0005c0 e3a02008 MOV r2,#8
;;;1125 p++;
0005c4 e2811001 ADD r1,r1,#1
;;;1126 while(*p)
0005c8 ea000006 B |L1.1512|
|L1.1484|
;;;1127 {
;;;1128 if(*p>='a' && *p<='z')name[j]=(*p++)-0x20;
0005cc e243c061 SUB r12,r3,#0x61
0005d0 e35c0019 CMP r12,#0x19
0005d4 92433020 SUBLS r3,r3,#0x20
;;;1129 else name[j]=*p++;
0005d8 e7c93002 STRB r3,[r9,r2]
;;;1130 j++;
0005dc e2822001 ADD r2,r2,#1
0005e0 e2811001 ADD r1,r1,#1 ;1129
0005e4 e20220ff AND r2,r2,#0xff
|L1.1512|
0005e8 e5d13000 LDRB r3,[r1,#0] ;1126
0005ec e3530000 CMP r3,#0 ;1126
0005f0 1afffff5 BNE |L1.1484|
;;;1131 }
;;;1132 if(FAT_FindItem(cluster,name, &FileInfo))return 1;//find the file
0005f4 e59f28ec LDR r2,|L1.3816|
0005f8 e28d1000 ADD r1,sp,#0
0005fc ebfffffe BL FAT_FindItem
000600 e3500000 CMP r0,#0
;;;1133 cluster = FileInfo.StartCluster;
000604 05970000 LDREQ r0,[r7,#0] ; FileInfo
;;;1134 return cluster;
000608 0a000000 BEQ |L1.1552|
|L1.1548|
00060c e3a00001 MOV r0,#1 ;1132
|L1.1552|
000610 e8bd43fe POP {r1-r9,lr} ;1132
;;;1135 }
000614 e12fff1e BX lr
;;;1136
ENDP
FAT_OpenDir PROC
;;;1138 DWORD FAT_OpenDir(BYTE * dir)
;;;1139 {
000618 e92d43fe PUSH {r1-r9,lr}
;;;1140 BYTE name[11];
;;;1141 BYTE *p=dir;
;;;1142 BYTE deep=0;
;;;1143 BYTE i,j;
;;;1144 DWORD cluster=0;
;;;1145 if(FAT32_Enable)cluster = FirstDirClust;
00061c e59f38bc LDR r3,|L1.3808|
000620 e1a04000 MOV r4,r0 ;1139
000624 e5d3c002 LDRB r12,[r3,#2] ; FAT32_Enable
000628 e1a01000 MOV r1,r0 ;1141
00062c e3a02000 MOV r2,#0 ;1142
000630 e35c0000 CMP r12,#0
000634 e1a00002 MOV r0,r2 ;1144
000638 1593000c LDRNE r0,[r3,#0xc] ; FirstDirClust
;;;1146 if(*p != '\\')return 1;//invalid path
00063c e5d13000 LDRB r3,[r1,#0]
000640 e353005c CMP r3,#0x5c
000644 1a000044 BNE |L1.1884|
|L1.1608|
;;;1147 while(*p)
;;;1148 {
;;;1149 if(*p == '\\')
000648 e5d13000 LDRB r3,[r1,#0]
00064c e353005c CMP r3,#0x5c
000650 e5f13001 LDRB r3,[r1,#1]! ;1147
;;;1150 {
;;;1151 deep++;
000654 02822001 ADDEQ r2,r2,#1
000658 020220ff ANDEQ r2,r2,#0xff
00065c e3530000 CMP r3,#0 ;1147
000660 1afffff8 BNE |L1.1608|
;;;1152 }
;;;1153 p++;
;;;1154 }
;;;1155 p=dir;
;;;1156 for(i=0;i<deep-1;i++)
000664 e59f787c LDR r7,|L1.3816|
000668 e3a05000 MOV r5,#0
00066c e3a08020 MOV r8,#0x20
000670 e28d9000 ADD r9,sp,#0
000674 e2426001 SUB r6,r2,#1
000678 ea00001a B |L1.1768|
|L1.1660|
;;;1157 {
;;;1158 p++;
00067c e2844001 ADD r4,r4,#1
;;;1159 for(j=0;j<11;j++)name[j]=0x20;
000680 e3a01000 MOV r1,#0
|L1.1668|
000684 e7c98001 STRB r8,[r9,r1]
000688 e2811001 ADD r1,r1,#1
00068c e20110ff AND r1,r1,#0xff
000690 e351000b CMP r1,#0xb
000694 3afffffa BCC |L1.1668|
;;;1160 j=0;
000698 e3a01000 MOV r1,#0
;;;1161 while(*p != '\\')
00069c ea000006 B |L1.1724|
|L1.1696|
;;;1162 {
;;;1163 if((*p) >= 'a' && (*p) <= 'z')name[j] = (*p++)-0x20;
0006a0 e2423061 SUB r3,r2,#0x61
0006a4 e3530019 CMP r3,#0x19
0006a8 92422020 SUBLS r2,r2,#0x20
;;;1164 else name[j] = *p++;
0006ac e7c92001 STRB r2,[r9,r1]
;;;1165 j++;
0006b0 e2811001 ADD r1,r1,#1
0006b4 e2844001 ADD r4,r4,#1 ;1164
0006b8 e20110ff AND r1,r1,#0xff
|L1.1724|
0006bc e5d42000 LDRB r2,[r4,#0] ;1161
0006c0 e352005c CMP r2,#0x5c ;1161
0006c4 1afffff5 BNE |L1.1696|
;;;1166 }
;;;1167 if(FAT_FindItem(cluster,name, &FileInfo))return 1;//find the directory
0006c8 e59f2818 LDR r2,|L1.3816|
0006cc e28d1000 ADD r1,sp,#0
0006d0 ebfffffe BL FAT_FindItem
0006d4 e3500000 CMP r0,#0
0006d8 1a00001f BNE |L1.1884|
0006dc e5970000 LDR r0,[r7,#0] ;1156 ; FileInfo
0006e0 e2851001 ADD r1,r5,#1 ;1156
0006e4 e20150ff AND r5,r1,#0xff ;1156
|L1.1768|
0006e8 e1550006 CMP r5,r6 ;1156
0006ec baffffe2 BLT |L1.1660|
;;;1168 cluster = FileInfo.StartCluster;
;;;1169 }
;;;1170 p++;
0006f0 e2841001 ADD r1,r4,#1
;;;1171 for(j=0;j<11;j++)name[j]=0x20;
0006f4 e3a02000 MOV r2,#0
|L1.1784|
0006f8 e7c98002 STRB r8,[r9,r2]
0006fc e2822001 ADD r2,r2,#1
000700 e20220ff AND r2,r2,#0xff
000704 e352000b CMP r2,#0xb
000708 3afffffa BCC |L1.1784|
;;;1172 j=0;
00070c e3a02000 MOV r2,#0
;;;1173 while(*p)
000710 ea000006 B |L1.1840|
|L1.1812|
;;;1174 {
;;;1175 if(*p>='a' && *p<='z')name[j]=(*p++)-0x20;
000714 e243c061 SUB r12,r3,#0x61
000718 e35c0019 CMP r12,#0x19
00071c 92433020 SUBLS r3,r3,#0x20
;;;1176 else name[j]=*p++;
000720 e7c93002 STRB r3,[r9,r2]
;;;1177 j++;
000724 e2822001 ADD r2,r2,#1
000728 e2811001 ADD r1,r1,#1 ;1176
00072c e20220ff AND r2,r2,#0xff
|L1.1840|
000730 e5d13000 LDRB r3,[r1,#0] ;1173
000734 e3530000 CMP r3,#0 ;1173
000738 1afffff5 BNE |L1.1812|
;;;1178 }
;;;1179 if(j == 0)return cluster;
00073c e3520000 CMP r2,#0
000740 0a000006 BEQ |L1.1888|
;;;1180 if(FAT_FindItem(cluster,name, &FileInfo))return 1;//find the final directory
000744 e59f279c LDR r2,|L1.3816|
000748 e28d1000 ADD r1,sp,#0
00074c ebfffffe BL FAT_FindItem
000750 e3500000 CMP r0,#0
;;;1181 cluster = FileInfo.StartCluster;
000754 05970000 LDREQ r0,[r7,#0] ; FileInfo
;;;1182 return cluster;
000758 0a000000 BEQ |L1.1888|
|L1.1884|
00075c e3a00001 MOV r0,#1 ;1180
|L1.1888|
000760 e8bd43fe POP {r1-r9,lr} ;1180
;;;1183 }
000764 e12fff1e BX lr
;;;1184
ENDP
CopyDirentruyItem PROC
000768 e3a02000 MOV r2,#0 ;0
|L1.1900|
00076c e491c004 LDR r12,[r1],#4 ;0
000770 e2822001 ADD r2,r2,#1 ;0
000774 e2803004 ADD r3,r0,#4 ;0
000778 e20220ff AND r2,r2,#0xff ;0
00077c e580c000 STR r12,[r0,#0] ;0
000780 e3520008 CMP r2,#8 ;0
000784 e1a00003 MOV r0,r3 ;0
000788 3afffff7 BCC |L1.1900|
00078c e12fff1e BX lr ;0
ENDP
WriteFolderCluster PROC
000790 e59f2754 LDR r2,|L1.3820|
000794 e7821000 STR r1,[r2,r0] ;0
000798 e12fff1e BX lr ;0
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -