📄 fat32nextcluster.lst
字号:
101 =2 BYTE CHSBegin[3];
102 =2 BYTE TypeCode;
C51 COMPILER V8.08 FAT32NEXTCLUSTER 06/01/2008 16:21:01 PAGE 9
103 =2 BYTE CHSEnd[3];
104 =2 DWORD LBABegin;
105 =2 DWORD CntSec;
106 =2 };
107 =2
108 =2 struct sDPTStr //简化的分区表
109 =2 {
110 =2 BYTE TypeCode;
111 =2 DWORD LBABegin;
112 =2 DWORD CntSec;
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 };
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表开始扇区
C51 COMPILER V8.08 FAT32NEXTCLUSTER 06/01/2008 16:21:01 PAGE 10
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
=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);
C51 COMPILER V8.08 FAT32NEXTCLUSTER 06/01/2008 16:21:01 PAGE 11
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;
20 2 }
21 1 return(MEMSwap32(FAT.FAT[Offset]));
22 1 }
C51 COMPILER V8.08 FAT32NEXTCLUSTER 06/01/2008 16:21:01 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 V8.08 FAT32NEXTCLUSTER 06/01/2008 16:21:01 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -