📄 fat32readfile.lst
字号:
=2 xdata struct sDPTStr sDPT[4];
=2 xdata struct FAT32Str FAT32;
=2 xdata struct FCBStr FCB[FAT32_MAX_FCB];
=2 xdata CHAR LongFileName[256];
=2 xdata struct FATStr FAT;
=2 xdata struct DPTStr *DPT; //分区表结构指针
=2 xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
=2 xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
=2 xdata struct FAT32SDirStr *sDIR; //FAT目录结构指针
=2 xdata struct FAT32LDirStr *lDIR; //FAT目录结构指针
=2 #endif
200 =2 #endif
201 =2
202 =2 extern xdata BYTE DiskBuffer[512];
203 =2
204 =2 extern xdata struct sDPTStr sDPT[4];
205 =2 extern xdata struct FAT32Str FAT32;
206 =2 extern xdata struct FCBStr FCB[FAT32_MAX_FCB];
207 =2 extern xdata CHAR LongFileName[256];
208 =2 extern xdata struct FATStr FAT;
209 =2 extern xdata struct DPTStr *DPT; //分区表结构指针
210 =2 extern xdata struct BootSecStr *BOOTSEC; //引导扇区结构指针
211 =2 extern xdata struct FAT32FSInfoStr *FSI; //FAT32扩展信息
212 =2 extern xdata struct FAT32SDirStr *sDIR; //FAT目录结构指针
213 =2 extern xdata struct FAT32LDirStr *lDIR; //FAT目录结构指针
214 =2
215 =2 extern void FAT32Init(void);
216 =2 extern BYTE FAT32MountPartition(void);
217 =2 extern BYTE FAT32MountVolumeID(BYTE Partition);
218 =2 extern BYTE FAT32GetDirName(WORD SecNum);
219 =2 extern void FAT32GetPartLongName(struct FAT32LDirStr *ldp,CHAR *name);
220 =2 extern DWORD FAT32DiskSize(void);
221 =2 extern DWORD FAT32DiskFreeSize(void);
222 =2 extern BYTE FAT32FindDIREntry(CHAR *DirName);
223 =2 extern void FAT32ReadCluster(DWORD *Cluster);
224 =2 extern BYTE FAT32ChangeDirectory(CHAR *DirName);
225 =2 extern BYTE FAT32ListDirectory(void);
226 =2 extern DWORD FAT32NextCluster(DWORD CurrentCluster);
227 =2 extern BYTE FAT32OpenFile(CHAR *filename);
228 =2 extern void FAT32CloseFile(BYTE fp);
229 =2 extern WORD FAT32ReadFile(BYTE fp);
11 =1
12 =1
3 #endif
4
5 WORD FAT32ReadFile(BYTE fp);
6
7 WORD FAT32ReadFile(BYTE fp)
8 {
9 1 register WORD tmp;
10 1
11 1 if (FCB[fp].ByteCnt==FCB[fp].Size) return(0);
12 1 else
13 1 {
14 2 FCB[fp].ByteCnt+=IDE.BytesPerSec;
15 2 if (FCB[fp].ByteCnt<=FCB[fp].Size) tmp=IDE.BytesPerSec;
16 2 else
17 2 {
18 3 FCB[fp].ByteCnt-=IDE.BytesPerSec;
19 3 tmp=FCB[fp].Size-FCB[fp].ByteCnt;
C51 COMPILER V6.23a FAT32READFILE 12/24/2004 00:11:04 PAGE 11
20 3 FCB[fp].ByteCnt=FCB[fp].Size;
21 3 }
22 2
23 2 if (FCB[fp].ClusSecCnt==FAT32.SecPerClus) //读下一簇
24 2 {
25 3 FCB[fp].LastCluster=FAT32NextCluster(FCB[fp].LastCluster);
26 3 if (FCB[fp].LastCluster==0x0fffffff) return(0);
27 3 IDEReadSector(ClusterToSector(FCB[fp].LastCluster));
28 3 FCB[fp].ClusSecCnt=1;
29 3 }
30 2 else if (FCB[fp].ClusSecCnt==0) //读第一簇
31 2 {
32 3 IDEReadSector(ClusterToSector(FCB[fp].LastCluster));
33 3 FCB[fp].ClusSecCnt++;
34 3 }
35 2 else //读当前簇下一扇区
36 2 {
37 3 IDEReadSector(ClusterToSector(FCB[fp].LastCluster)+FCB[fp].ClusSecCnt);
38 3 FCB[fp].ClusSecCnt++;
39 3 }
40 2 }
41 1 return(tmp);
42 1 }
C51 COMPILER V6.23a FAT32READFILE 12/24/2004 00:11:04 PAGE 12
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _FAT32ReadFile (BEGIN)
; SOURCE LINE # 7
0000 900000 R MOV DPTR,#fp
0003 EF MOV A,R7
0004 F0 MOVX @DPTR,A
; SOURCE LINE # 8
; SOURCE LINE # 11
0005 C4 SWAP A
0006 33 RLC A
0007 54E0 ANL A,#0E0H
0009 2400 E ADD A,#LOW FCB+0CH
000B F582 MOV DPL,A
000D E4 CLR A
000E 3400 E ADDC A,#HIGH FCB+0CH
0010 F583 MOV DPH,A
0012 E0 MOVX A,@DPTR
0013 F8 MOV R0,A
0014 A3 INC DPTR
0015 E0 MOVX A,@DPTR
0016 F9 MOV R1,A
0017 A3 INC DPTR
0018 E0 MOVX A,@DPTR
0019 FA MOV R2,A
001A A3 INC DPTR
001B E0 MOVX A,@DPTR
001C FB MOV R3,A
001D EF MOV A,R7
001E C4 SWAP A
001F 33 RLC A
0020 54E0 ANL A,#0E0H
0022 2400 E ADD A,#LOW FCB+01CH
0024 F582 MOV DPL,A
0026 E4 CLR A
0027 3400 E ADDC A,#HIGH FCB+01CH
0029 F583 MOV DPH,A
002B E0 MOVX A,@DPTR
002C FC MOV R4,A
002D A3 INC DPTR
002E E0 MOVX A,@DPTR
002F FD MOV R5,A
0030 A3 INC DPTR
0031 E0 MOVX A,@DPTR
0032 FE MOV R6,A
0033 A3 INC DPTR
0034 E0 MOVX A,@DPTR
0035 FF MOV R7,A
0036 C3 CLR C
0037 120000 E LCALL ?C?ULCMP
003A 7003 JNZ ?C0001
003C FE MOV R6,A
003D FF MOV R7,A
003E 22 RET
003F ?C0001:
; SOURCE LINE # 13
; SOURCE LINE # 14
003F 900000 R MOV DPTR,#fp
0042 E0 MOVX A,@DPTR
0043 C4 SWAP A
0044 33 RLC A
C51 COMPILER V6.23a FAT32READFILE 12/24/2004 00:11:04 PAGE 13
0045 54E0 ANL A,#0E0H
0047 2400 E ADD A,#LOW FCB+01CH
0049 F582 MOV DPL,A
004B E4 CLR A
004C 3400 E ADDC A,#HIGH FCB+01CH
004E F583 MOV DPH,A
0050 C083 PUSH DPH
0052 C082 PUSH DPL
0054 E0 MOVX A,@DPTR
0055 F8 MOV R0,A
0056 A3 INC DPTR
0057 E0 MOVX A,@DPTR
0058 F9 MOV R1,A
0059 A3 INC DPTR
005A E0 MOVX A,@DPTR
005B FA MOV R2,A
005C A3 INC DPTR
005D E0 MOVX A,@DPTR
005E FB MOV R3,A
005F 900000 E MOV DPTR,#IDE+06H
0062 E0 MOVX A,@DPTR
0063 FE MOV R6,A
0064 A3 INC DPTR
0065 E0 MOVX A,@DPTR
0066 FF MOV R7,A
0067 E4 CLR A
0068 FC MOV R4,A
0069 FD MOV R5,A
006A EB MOV A,R3
006B 2F ADD A,R7
006C FF MOV R7,A
006D EA MOV A,R2
006E 3E ADDC A,R6
006F FE MOV R6,A
0070 ED MOV A,R5
0071 39 ADDC A,R1
0072 FD MOV R5,A
0073 EC MOV A,R4
0074 38 ADDC A,R0
0075 FC MOV R4,A
0076 D082 POP DPL
0078 D083 POP DPH
007A 120000 E LCALL ?C?LSTXDATA
; SOURCE LINE # 15
007D 900000 R MOV DPTR,#fp
0080 E0 MOVX A,@DPTR
0081 FF MOV R7,A
0082 C4 SWAP A
0083 33 RLC A
0084 54E0 ANL A,#0E0H
0086 2400 E ADD A,#LOW FCB+0CH
0088 F582 MOV DPL,A
008A E4 CLR A
008B 3400 E ADDC A,#HIGH FCB+0CH
008D F583 MOV DPH,A
008F E0 MOVX A,@DPTR
0090 F8 MOV R0,A
0091 A3 INC DPTR
0092 E0 MOVX A,@DPTR
0093 F9 MOV R1,A
0094 A3 INC DPTR
0095 E0 MOVX A,@DPTR
C51 COMPILER V6.23a FAT32READFILE 12/24/2004 00:11:04 PAGE 14
0096 FA MOV R2,A
0097 A3 INC DPTR
0098 E0 MOVX A,@DPTR
0099 FB MOV R3,A
009A EF MOV A,R7
009B C4 SWAP A
009C 33 RLC A
009D 54E0 ANL A,#0E0H
009F 2400 E ADD A,#LOW FCB+01CH
00A1 F582 MOV DPL,A
00A3 E4 CLR A
00A4 3400 E ADDC A,#HIGH FCB+01CH
00A6 F583 MOV DPH,A
00A8 E0 MOVX A,@DPTR
00A9 FC MOV R4,A
00AA A3 INC DPTR
00AB E0 MOVX A,@DPTR
00AC FD MOV R5,A
00AD A3 INC DPTR
00AE E0 MOVX A,@DPTR
00AF FE MOV R6,A
00B0 A3 INC DPTR
00B1 E0 MOVX A,@DPTR
00B2 FF MOV R7,A
00B3 C3 CLR C
00B4 120000 E LCALL ?C?ULCMP
00B7 4012 JC ?C0004
00B9 900000 E MOV DPTR,#IDE+06H
00BC E0 MOVX A,@DPTR
00BD FF MOV R7,A
00BE A3 INC DPTR
00BF E0 MOVX A,@DPTR
00C0 900000 R MOV DPTR,#tmp
00C3 CF XCH A,R7
00C4 F0 MOVX @DPTR,A
00C5 A3 INC DPTR
00C6 EF MOV A,R7
00C7 F0 MOVX @DPTR,A
00C8 020000 R LJMP ?C0005
00CB ?C0004:
; SOURCE LINE # 17
; SOURCE LINE # 18
00CB 900000 R MOV DPTR,#fp
00CE E0 MOVX A,@DPTR
00CF C4 SWAP A
00D0 33 RLC A
00D1 54E0 ANL A,#0E0H
00D3 2400 E ADD A,#LOW FCB+01CH
00D5 F582 MOV DPL,A
00D7 E4 CLR A
00D8 3400 E ADDC A,#HIGH FCB+01CH
00DA F583 MOV DPH,A
00DC C083 PUSH DPH
00DE C082 PUSH DPL
00E0 E0 MOVX A,@DPTR
00E1 FC MOV R4,A
00E2 A3 INC DPTR
00E3 E0 MOVX A,@DPTR
00E4 FD MOV R5,A
00E5 A3 INC DPTR
00E6 E0 MOVX A,@DPTR
00E7 FE MOV R6,A
C51 COMPILER V6.23a FAT32READFILE 12/24/2004 00:11:04 PAGE 15
00E8 A3 INC DPTR
00E9 E0 MOVX A,@DPTR
00EA FF MOV R7,A
00EB C004 PUSH AR4
00ED C005 PUSH AR5
00EF C006 PUSH AR6
00F1 C007 PUSH AR7
00F3 900000 E MOV DPTR,#IDE+06H
00F6 E0 MOVX A,@DPTR
00F7 FE MOV R6,A
00F8 A3 INC DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -