📄 fat32nextcluster.lst
字号:
113 =2 };
114 =2
115 =2 struct FAT32FSInfoStr //FAT32扩展信息结构
116 =2 {
117 =2 DWORD LeadSig;
118 =2 BYTE Reserved1[480];
119 =2 DWORD StrucSig;
120 =2 DWORD FreeCount;
121 =2 DWORD NxtFree;
122 =2 BYTE Reserved2[12];
123 =2 DWORD TrailSig;
124 =2 };
C51 COMPILER V6.23a FAT32NEXTCLUSTER 12/24/2004 00:11:03 PAGE 9
125 =2
126 =2 struct FAT32SDirStr //FAT目录结构 短文件名
127 =2 {
128 =2 CHAR Name[11];
129 =2 BYTE Attr;
130 =2 BYTE NTRes;
131 =2 BYTE CrtTimeTenth;
132 =2 WORD CrtTime;
133 =2 WORD CrtDate;
134 =2 WORD LstAccDate;
135 =2 WORD FstClusHI;
136 =2 WORD WrtTime;
137 =2 WORD WrtDate;
138 =2 WORD FstClusLO;
139 =2 DWORD FileSize;
140 =2 };
141 =2
142 =2 struct FAT32LDirStr //FAT目录结构 长文件名
143 =2 {
144 =2 BYTE Ord;
145 =2 BYTE Name1[10];
146 =2 BYTE Attr;
147 =2 BYTE Type;
148 =2 BYTE Chksum;
149 =2 BYTE Name2[12];
150 =2 WORD FstClusLO;
151 =2 BYTE Name3[4];
152 =2 };
153 =2
154 =2 struct FAT32Str //FAT32参数表
155 =2 {
156 =2 BYTE ClusSecCnt; //当前簇扇区计数
157 =2 DWORD CurrentDirectory; //当前目录入口(簇号)
158 =2 BYTE SecPerClus; //每簇扇区数 1 2 4 8 16 32 64 128
159 =2 WORD RsvdSecCnt; //保留扇区数 0x20
160 =2 BYTE NumFATs; //FAT表个数 2
161 =2 DWORD RootClus; //根目录开始的簇
162 =2 DWORD ClusSec; //簇开始的扇区
163 =2 DWORD FATSz; //FAT表大小(扇区)
164 =2 DWORD FATSec; //FAT表开始扇区
165 =2 DWORD FSISec; //FSI所在扇区
166 =2 DWORD FSIFreeCount; //空闲簇数
167 =2 DWORD FSINxtFree; //空闲簇搜索指针
168 =2 };
169 =2
170 =2 struct FCBStr
171 =2 {
172 =2 CHAR FileName[12]; //文件名
173 =2 DWORD Size; //文件大小
174 =2 DWORD FirstCluster; //第一个簇
175 =2 DWORD LastCluster; //最近一次读到的簇号
176 =2 DWORD ClusSecCnt; //当前簇扇区计数
177 =2 DWORD ByteCnt; //当前字节计数
178 =2 };
179 =2
180 =2 struct FATStr
181 =2 {
182 =2 DWORD Sector;
183 =2 DWORD FAT[128];
184 =2 };
185 =2
186 =2 #ifndef _LIBRARY_DEFINE
C51 COMPILER V6.23a FAT32NEXTCLUSTER 12/24/2004 00:11:03 PAGE 10
=2 xdata BYTE DiskBuffer[512];
=2
=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 DWORD FAT32NextCluster(DWORD CurrentCluster);
6
7 DWORD FAT32NextCluster(DWORD CurrentCluster)
8 {
9 1 register BYTE Offset,i;
10 1 xdata DWORD Sector;
11 1
12 1 Sector=CurrentCluster>>7; //等价于CurrentCluster/128
13 1 Offset=(BYTE)(CurrentCluster&0x0000007f); //等价于CurrentCluster%128
14 1 if (Sector!=FAT.Sector)
15 1 {
16 2 IDEReadSector(FAT32.FATSec + Sector);
17 2 for(i=0;i<128;i++)
18 2 FAT.FAT[i]=((DWORD *)&DiskBuffer)[i];
19 2 FAT.Sector=Sector;
C51 COMPILER V6.23a FAT32NEXTCLUSTER 12/24/2004 00:11:03 PAGE 11
20 2 }
21 1 return(MEMSwap32(FAT.FAT[Offset]));
22 1 }
C51 COMPILER V6.23a FAT32NEXTCLUSTER 12/24/2004 00:11:03 PAGE 12
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION _FAT32NextCluster (BEGIN)
; SOURCE LINE # 7
0000 900000 R MOV DPTR,#CurrentCluster
0003 120000 E LCALL ?C?LSTXDATA
; SOURCE LINE # 8
; SOURCE LINE # 12
0006 900000 R MOV DPTR,#CurrentCluster
0009 E0 MOVX A,@DPTR
000A FC MOV R4,A
000B A3 INC DPTR
000C E0 MOVX A,@DPTR
000D FD MOV R5,A
000E A3 INC DPTR
000F E0 MOVX A,@DPTR
0010 FE MOV R6,A
0011 A3 INC DPTR
0012 E0 MOVX A,@DPTR
0013 FF MOV R7,A
0014 7807 MOV R0,#07H
0016 120000 E LCALL ?C?ULSHR
0019 900000 R MOV DPTR,#Sector
001C 120000 E LCALL ?C?LSTXDATA
; SOURCE LINE # 13
001F 900000 R MOV DPTR,#CurrentCluster
0022 A3 INC DPTR
0023 A3 INC DPTR
0024 A3 INC DPTR
0025 E0 MOVX A,@DPTR
0026 547F ANL A,#07FH
0028 FF MOV R7,A
0029 A3 INC DPTR
002A EF MOV A,R7
002B F0 MOVX @DPTR,A
; SOURCE LINE # 14
002C 900000 E MOV DPTR,#FAT
002F E0 MOVX A,@DPTR
0030 FC MOV R4,A
0031 A3 INC DPTR
0032 E0 MOVX A,@DPTR
0033 FD MOV R5,A
0034 A3 INC DPTR
0035 E0 MOVX A,@DPTR
0036 FE MOV R6,A
0037 A3 INC DPTR
0038 E0 MOVX A,@DPTR
0039 FF MOV R7,A
003A 900000 R MOV DPTR,#Sector
003D E0 MOVX A,@DPTR
003E F8 MOV R0,A
003F A3 INC DPTR
0040 E0 MOVX A,@DPTR
0041 F9 MOV R1,A
0042 A3 INC DPTR
0043 E0 MOVX A,@DPTR
0044 FA MOV R2,A
0045 A3 INC DPTR
0046 E0 MOVX A,@DPTR
0047 FB MOV R3,A
0048 C3 CLR C
C51 COMPILER V6.23a FAT32NEXTCLUSTER 12/24/2004 00:11:03 PAGE 13
0049 120000 E LCALL ?C?ULCMP
004C 7003 JNZ $ + 5H
004E 020000 R LJMP ?C0001
; SOURCE LINE # 15
; SOURCE LINE # 16
0051 900000 R MOV DPTR,#Sector
0054 E0 MOVX A,@DPTR
0055 FC MOV R4,A
0056 A3 INC DPTR
0057 E0 MOVX A,@DPTR
0058 FD MOV R5,A
0059 A3 INC DPTR
005A E0 MOVX A,@DPTR
005B FE MOV R6,A
005C A3 INC DPTR
005D E0 MOVX A,@DPTR
005E FF MOV R7,A
005F 900000 E MOV DPTR,#FAT32+015H
0062 E0 MOVX A,@DPTR
0063 F8 MOV R0,A
0064 A3 INC DPTR
0065 E0 MOVX A,@DPTR
0066 F9 MOV R1,A
0067 A3 INC DPTR
0068 E0 MOVX A,@DPTR
0069 FA MOV R2,A
006A A3 INC DPTR
006B E0 MOVX A,@DPTR
006C 2F ADD A,R7
006D FF MOV R7,A
006E EA MOV A,R2
006F 3E ADDC A,R6
0070 FE MOV R6,A
0071 E9 MOV A,R1
0072 3D ADDC A,R5
0073 FD MOV R5,A
0074 E8 MOV A,R0
0075 3C ADDC A,R4
0076 FC MOV R4,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -