📄 fat16.txt
字号:
;;;381 GetFileName(dirAddr, i, m, filename, &len);
00004e ab02 ADD r3,sp,#8
000050 9300 STR r3,[sp,#0]
000052 ab03 ADD r3,sp,#0xc
000054 462a MOV r2,r5
000056 b2a1 UXTH r1,r4
000058 4650 MOV r0,r10
00005a f7fffffe BL GetFileName
;;;382 if(len != namelen) //两个文件名长度不等,直接跳过
00005e f89d2008 LDRB r2,[sp,#8]
000062 4542 CMP r2,r8
000064 d13f BNE |L7.230|
;;;383 continue;
;;;384 if(IsEqual(foldername, filename, len))//文件名相等,读取其首扇区号
000066 a903 ADD r1,sp,#0xc
000068 9844 LDR r0,[sp,#0x110]
00006a f7fffffe BL IsEqual
00006e b3c0 CBZ r0,|L7.226|
;;;385 {
;;;386 cluster = BUFFER[m * 32 + 0x1A] + (BUFFER[m * 32 + 0x1B] << 8);//首族号
000070 eb0b1045 ADD r0,r11,r5,LSL #5
000074 7e80 LDRB r0,[r0,#0x1a]
000076 7ef1 LDRB r1,[r6,#0x1b]
000078 eb002001 ADD r0,r0,r1,LSL #8
00007c 0400 LSLS r0,r0,#16
00007e 0c00 LSRS r0,r0,#16
;;;387 if(cluster == 0)
000080 d100 BNE |L7.132|
;;;388 return ClusConvLBA(1) ; //到达根目录,转化为扇区并返回
000082 2001 MOVS r0,#1
|L7.132|
;;;389 else
;;;390 return ( ClusConvLBA(cluster)) ; //将族号转化为扇区号并返回
000084 f7fffffe BL ClusConvLBA
|L7.136|
;;;391 }
;;;392 }
;;;393 else if(BUFFER[m * 32] != 0x00 && BUFFER[m * 32] != 0xE5 && BUFFER[m * 32 + 0xB] != 0x0F && (!(BUFFER[m * 32 + 0xB] & 0x10 )) && (!type))
;;;394 //该项为文件名
;;;395 {
;;;396 ID = (DIR*)(&BUFFER[m * 32]);
;;;397 GetFileName(dirAddr, i, m, filename, &len);
;;;398 if(len != namelen) //两个文件名长度不等,直接跳过
;;;399 continue;
;;;400 if(IsEqual(foldername, filename, len))//文件名相等,读取其首扇区号
;;;401 {
;;;402 cluster = BUFFER[m * 32 + 0x1A] + (BUFFER[m * 32 + 0x1B] << 8);//首族号
;;;403 FAT_FileOpen(ClusConvLBA(cluster));//初始化FATFileIndex结构
;;;404 //返回文件长度
;;;405 return ( BUFFER[m * 32 + 0x1c]+ (BUFFER[m * 32 + 0x1c + 1] << 8) + (BUFFER[m * 32 + 0x1c + 2]<< 16) + (BUFFER[m * 32 + 0x1c + 3]<< 24)) ;
;;;406 }
;;;407 }
;;;408 }
;;;409 }
;;;410 cluster = ReadFAT(cluster);
;;;411 if(cluster != 0x00 && cluster < 0xFFF0); //有下一个簇
;;;412 else if( cluster <= 0xFFFF && cluster >= 0xFFF8) //最后一个簇
;;;413 break;
;;;414 else if (cluster <= 0xFFF7 && cluster >= 0xFFF0) //坏簇或保留值
;;;415 return 0;
;;;416 }
;;;417 return 0;
;;;418 }
000088 b047 ADD sp,sp,#0x11c
00008a e8bd8ff0 POP {r4-r11,pc}
|L7.142|
00008e f1b90f00 CMP r9,#0 ;393
000092 d128 BNE |L7.230|
000094 ab02 ADD r3,sp,#8 ;397
000096 9300 STR r3,[sp,#0] ;397
000098 ab03 ADD r3,sp,#0xc ;397
00009a 462a MOV r2,r5 ;397
00009c b2a1 UXTH r1,r4 ;397
00009e 4650 MOV r0,r10 ;397
0000a0 f7fffffe BL GetFileName
0000a4 f89d2008 LDRB r2,[sp,#8] ;398
0000a8 4542 CMP r2,r8 ;398
0000aa d11c BNE |L7.230|
0000ac a903 ADD r1,sp,#0xc ;400
0000ae 9844 LDR r0,[sp,#0x110] ;400
0000b0 f7fffffe BL IsEqual
0000b4 b1a8 CBZ r0,|L7.226|
0000b6 eb0b1045 ADD r0,r11,r5,LSL #5 ;402
0000ba 7e80 LDRB r0,[r0,#0x1a] ;402
0000bc 7ef1 LDRB r1,[r6,#0x1b] ;402
0000be eb002001 ADD r0,r0,r1,LSL #8 ;402
0000c2 b280 UXTH r0,r0 ;402
0000c4 f7fffffe BL ClusConvLBA
0000c8 f7fffffe BL FAT_FileOpen
0000cc 7f30 LDRB r0,[r6,#0x1c] ;405
0000ce 7f71 LDRB r1,[r6,#0x1d] ;405
0000d0 7ff2 LDRB r2,[r6,#0x1f] ;405
0000d2 eb002001 ADD r0,r0,r1,LSL #8 ;405
0000d6 7fb1 LDRB r1,[r6,#0x1e] ;405
0000d8 0409 LSLS r1,r1,#16 ;405
0000da eb016102 ADD r1,r1,r2,LSL #24 ;405
0000de 4408 ADD r0,r0,r1 ;405
0000e0 e7d2 B |L7.136|
|L7.226|
0000e2 e000 B |L7.230|
|L7.228|
0000e4 e01a B |L7.284|
|L7.230|
0000e6 1c6d ADDS r5,r5,#1 ;375
0000e8 b2ed UXTB r5,r5 ;375
0000ea 2d10 CMP r5,#0x10 ;375
0000ec d3a0 BCC |L7.48|
0000ee 1c64 ADDS r4,r4,#1 ;372
|L7.240|
0000f0 480c LDR r0,|L7.292|
0000f2 7840 LDRB r0,[r0,#1] ;372 ; BPB_SecPerClus
0000f4 4284 CMP r4,r0 ;372
0000f6 d395 BCC |L7.36|
0000f8 4638 MOV r0,r7 ;410
0000fa f7fffffe BL ReadFAT
0000fe 0007 MOVS r7,r0 ;410
000100 d003 BEQ |L7.266|
000102 f64f70f0 MOV r0,#0xfff0 ;411
000106 4287 CMP r7,r0 ;411
000108 d386 BCC |L7.24|
|L7.266|
00010a f5a7407f SUB r0,r7,#0xff00 ;412
00010e 38f8 SUBS r0,r0,#0xf8 ;412
000110 2807 CMP r0,#7 ;412
000112 d903 BLS |L7.284|
000114 3008 ADDS r0,r0,#8 ;414
000116 2807 CMP r0,#7 ;414
000118 f63faf7e BHI |L7.24|
|L7.284|
00011c 2000 MOVS r0,#0 ;417
00011e e7b3 B |L7.136|
;;;419
ENDP
|L7.288|
000120 00000000 DCD ||.bss||
|L7.292|
000124 00000000 DCD ||.data||
AREA ||i.List_AllDir_Long||, CODE, READONLY, ALIGN=2
List_AllDir_Long PROC
;;;428 void List_AllDir_Long(u32 dirAddr)
;;;429 {
000000 e92d4ff0 PUSH {r4-r11,lr}
000004 b0c3 SUB sp,sp,#0x10c
;;;430 u16 i, m;
;;;431 DIR *ID;
;;;432 u8 tmp;
;;;433 u8 filename[256];
;;;434 u8 len;
;;;435 u16 cluster ;
;;;436 cluster = LBAConvClus(dirAddr); //将扇区号转化为簇号
000006 f7fffffe BL LBAConvClus
00000a f8dfa0f0 LDR r10,|L8.252|
00000e f8df90f0 LDR r9,|L8.256|
000012 4607 MOV r7,r0
000014 f10d0b0c ADD r11,sp,#0xc
|L8.24|
;;;437 while(1)
;;;438 { //这里一个目录如果占用的空间不只一个簇,也可以解决
;;;439 dirAddr = ClusConvLBA(cluster); //将簇号转为扇区号
000018 4638 MOV r0,r7
00001a f7fffffe BL ClusConvLBA
00001e 4680 MOV r8,r0
;;;440 for(i = 0; i < BPB_SecPerClus; i++)
000020 2600 MOVS r6,#0
000022 e053 B |L8.204|
|L8.36|
;;;441 {
;;;442 ReadBlock(dirAddr + i);
000024 eb080006 ADD r0,r8,r6
000028 f7fffffe BL ReadBlock
;;;443 for(m = 0; m < 16; m++)
00002c f05f0400 MOVS.W r4,#0
|L8.48|
;;;444 {
;;;445 if(BUFFER[m * 32] != 0x00 && BUFFER[m * 32] != 0xE5 && BUFFER[m * 32 + 0xB] != 0x0F)
000030 eb0a1344 ADD r3,r10,r4,LSL #5
000034 7818 LDRB r0,[r3,#0]
000036 2800 CMP r0,#0
000038 d042 BEQ |L8.192|
00003a 28e5 CMP r0,#0xe5
00003c d040 BEQ |L8.192|
00003e 7ad8 LDRB r0,[r3,#0xb]
000040 280f CMP r0,#0xf
000042 d03d BEQ |L8.192|
;;;446 {
;;;447 if((dirAddr + i * BPB_BytesPerSec ) == DirStartSec() && m == 0) //根目录项,区别对待
000044 f7fffffe BL DirStartSec
000048 f8b9100c LDRH r1,[r9,#0xc] ; BPB_BytesPerSec
00004c fb068101 MLA r1,r6,r1,r8
000050 4288 CMP r0,r1
000052 d119 BNE |L8.136|
000054 b9c4 CBNZ r4,|L8.136|
;;;448 //这里存放的是卷号
;;;449 {
;;;450 printf("Driver Name Is: ");
000056 a02b ADR r0,|L8.260|
000058 f7fffffe BL __1printf
;;;451 GetFileName(dirAddr, i, m, filename, &len);
00005c ab02 ADD r3,sp,#8
00005e 9300 STR r3,[sp,#0]
000060 ab03 ADD r3,sp,#0xc
000062 2200 MOVS r2,#0
000064 4631 MOV r1,r6
000066 4640 MOV r0,r8
000068 f7fffffe BL GetFileName
;;;452 for(tmp = 0; tmp < len; tmp++)
00006c 2500 MOVS r5,#0
00006e e006 B |L8.126|
|L8.112|
;;;453 printf("%c",filename[tmp]);
000070 f81b1005 LDRB r1,[r11,r5]
000074 a028 ADR r0,|L8.280|
000076 f7fffffe BL __1printf
00007a 1c6d ADDS r5,r5,#1 ;452
00007c b2ed UXTB r5,r5 ;452
|L8.126|
00007e f89d0008 LDRB r0,[sp,#8] ;452
000082 4285 CMP r5,r0 ;452
000084 d3f4 BCC |L8.112|
000086 e018 B |L8.186|
|L8.136|
000088 4618 MOV r0,r3 ;452
;;;454 printf("\r\n");
;;;455 continue;
;;;456 }
;;;457
;;;458 ID = (DIR*)(&BUFFER[m * 32]);
;;;459 List_DateAndTime(ID);
00008a f7fffffe BL List_DateAndTime
;;;460 GetFileName(dirAddr, i, m, filename, &len);
00008e ab02 ADD r3,sp,#8
000090 9300 STR r3,[sp,#0]
000092 ab03 ADD r3,sp,#0xc
000094 b2e2 UXTB r2,r4
000096 4631 MOV r1,r6
000098 4640 MOV r0,r8
00009a f7fffffe BL GetFileName
;;;461 for(tmp = 0; tmp < len; tmp++)
00009e 2500 MOVS r5,#0
0000a0 e007 B |L8.178|
;;;462 printf("%c",filename[tmp]);
0000a2 bf00 NOP
|L8.164|
0000a4 f81b1005 LDRB r1,[r11,r5]
0000a8 a01b ADR r0,|L8.280|
0000aa f7fffffe BL __1printf
0000ae 1c6d ADDS r5,r5,#1 ;461
0000b0 b2ed UXTB r5,r5 ;461
|L8.178|
0000b2 f89d0008 LDRB r0,[sp,#8] ;461
0000b6 4285 CMP r5,r0 ;461
0000b8 d3f4 BCC |L8.164|
|L8.186|
;;;463 printf("\r\n");
0000ba a018 ADR r0,|L8.284|
0000bc f7fffffe BL __1printf
|L8.192|
0000c0 1c64 ADDS r4,r4,#1 ;443
0000c2 b2a4 UXTH r4,r4 ;443
0000c4 2c10 CMP r4,#0x10 ;443
0000c6 d3b3 BCC |L8.48|
0000c8 1c76 ADDS r6,r6,#1 ;440
0000ca b2b6 UXTH r6,r6 ;440
|L8.204|
0000cc f8990001 LDRB r0,[r9,#1] ;440 ; BPB_SecPerClus
0000d0 4286 CMP r6,r0 ;440
0000d2 d3a7 BCC |L8.36|
;;;464 }
;;;465 }
;;;466 }
;;;467 cluster = ReadFAT(cluster);
0000d4 4638 MOV r0,r7
0000d6 f7fffffe BL ReadFAT
0000da 0007 MOVS r7,r0
;;;468 if(cluster != 0x00 && cluster < 0xFFF0); //有下一个簇
0000dc d003 BEQ |L8.230|
0000de f64f70f0 MOV r0,#0xfff0
0000e2 4287 CMP r7,r0
0000e4 d398 BCC |L8.24|
|L8.230|
;;;469 else if( cluster <= 0xFFFF && cluster >= 0xFFF8) //最后一个簇
0000e6 f5a7407f SUB r0,r7,#0xff00
0000ea 38f8 SUBS r0,r0,#0xf8
0000ec 2807 CMP r0,#7
0000ee d902 BLS |L8.246|
;;;470 break;
;;;471 else if (cluster <= 0xFFF7 && cluster >= 0xFFF0) //坏簇或保留值
0000f0 3008 ADDS r0,r0,#8
0000f2 2807 CMP r0,#7
0000f4 d890 BHI |L8.24|
|L8.246|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -