⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fatreadcluster.lst

📁 C51实现的FAT32文件系统
💻 LST
📖 第 1 页 / 共 4 页
字号:
 147      =2  
 148      =2  struct FAT32FSInfoStr           //FAT32扩展信息结构
 149      =2  {
 150      =2          DWORD   LeadSig;
 151      =2          BYTE    Reserved1[480];
 152      =2          DWORD   StrucSig;
 153      =2          DWORD   FreeCount;
 154      =2          DWORD   NxtFree;
 155      =2          BYTE    Reserved2[12];
 156      =2          DWORD   TrailSig;
 157      =2  };
 158      =2  
 159      =2  struct FATSDirStr                       //FAT目录结构 短文件名
 160      =2  {
 161      =2          CHAR    Name[11];
 162      =2          BYTE    Attr;
 163      =2          BYTE    NTRes;
 164      =2          BYTE    CrtTimeTenth;
 165      =2          WORD    CrtTime;
 166      =2          WORD    CrtDate;
 167      =2          WORD    LstAccDate;
 168      =2          WORD    FstClusHI;
 169      =2          WORD    WrtTime;
 170      =2          WORD    WrtDate;
 171      =2          WORD    FstClusLO;
 172      =2          DWORD   FileSize;
 173      =2  };
 174      =2  
 175      =2  struct FATLDirStr                       //FAT目录结构 长文件名
 176      =2  {
 177      =2          BYTE    Ord;
 178      =2          BYTE    Name1[10];
 179      =2          BYTE    Attr;
 180      =2          BYTE    Type;
 181      =2          BYTE    Chksum;
 182      =2          BYTE    Name2[12];
 183      =2          WORD    FstClusLO;
 184      =2          BYTE    Name3[4];
 185      =2  };
 186      =2  
C51 COMPILER V6.23a  FATREADCLUSTER                                                        12/24/2004 00:11:40 PAGE 10  

 187      =2  struct FATStr                                   //FAT参数表
 188      =2  {
 189      =2  //      BYTE    ClusSecCnt;                     //当前簇扇区计数
 190      =2          DWORD   CurrentDirectory;       //当前目录入口(簇号)
 191      =2          BYTE    SecPerClus;                     //每簇扇区数    1 2 4 8 16 32 64 128
 192      =2          DWORD   RootClus;                       //根目录开始的簇
 193      =2          BYTE    RootSectors;            //根目录占用的扇区数
 194      =2          DWORD   ClusSec;                        //簇开始的扇区
 195      =2          DWORD   FATSz;                          //FAT表大小(扇区)
 196      =2          DWORD   FATSec;                         //FAT表开始扇区
 197      =2          DWORD   FSISec;                         //FSI所在扇区
 198      =2          DWORD   FSIFreeCount;           //空闲簇数
 199      =2          DWORD   FSINxtFree;                     //空闲簇搜索指针
 200      =2  };
 201      =2  
 202      =2  struct FCBStr
 203      =2  {
 204      =2          CHAR    FileName[12];           //文件名
 205      =2          DWORD   Size;                           //文件大小
 206      =2          DWORD   FirstCluster;           //第一个簇
 207      =2          DWORD   LastCluster;            //最近一次读到的簇号
 208      =2          DWORD   ClusSecCnt;                     //当前簇扇区计数
 209      =2          DWORD   ByteCnt;                        //当前字节计数
 210      =2  };
 211      =2  
 212      =2  struct FATTableStr
 213      =2  {
 214      =2          DWORD   Sector;
 215      =2          union FATUin
 216      =2          {
 217      =2                  DWORD   F32[128];
 218      =2                  WORD    F16[256];
 219      =2                  BYTE    F12[512];
 220      =2          }FAT;
 221      =2  };
 222      =2  
 223      =2  struct FATClusterStr
 224      =2  {
 225      =2          BYTE    SecOffset;                              //扇区偏移量
 226      =2          DWORD   Sector;                         //扇区号
 227      =2          DWORD   Cluster;                        //簇号
 228      =2  };
 229      =2  
 230      =2  #ifndef _LIBRARY_DEFINE
           =2  xdata BYTE DiskBuffer[512];
           =2 
           =2  xdata struct StorageMediaStr StorageMedia;
           =2  xdata struct sDPTStr sDPT[FAT_MAX_PARTITIONS];
           =2  xdata struct FATStr FAT;
           =2  xdata struct FCBStr FCB[FAT_MAX_FCB];
           =2  xdata CHAR LongFileName[256]; 
           =2  xdata struct FATTableStr FATTable;
           =2  xdata struct DPTStr *DPT;                      //分区表结构指针
           =2  xdata struct BootSecStr *BOOTSEC;              //引导扇区结构指针
           =2  xdata struct FAT32FSInfoStr *FSI;              //FAT32扩展信息
           =2  xdata struct FATSDirStr *sDIR;         //FAT目录结构指针
           =2  xdata struct FATLDirStr *lDIR;         //FAT目录结构指针
           =2 #endif
 245      =2  #endif
 246      =2  
 247      =2  extern xdata BYTE DiskBuffer[512];
 248      =2  
C51 COMPILER V6.23a  FATREADCLUSTER                                                        12/24/2004 00:11:40 PAGE 11  

 249      =2  extern xdata struct StorageMediaStr StorageMedia;
 250      =2  extern xdata struct sDPTStr sDPT[FAT_MAX_PARTITIONS];
 251      =2  extern xdata struct FATStr FAT;
 252      =2  extern xdata struct FCBStr FCB[FAT_MAX_FCB];
 253      =2  extern xdata CHAR LongFileName[256]; 
 254      =2  extern xdata struct FATTableStr FATTable;
 255      =2  extern xdata struct DPTStr *DPT;                //分区表结构指针
 256      =2  extern xdata struct BootSecStr *BOOTSEC;        //引导扇区结构指针
 257      =2  extern xdata struct FAT32FSInfoStr *FSI;        //FAT32扩展信息
 258      =2  extern xdata struct FATSDirStr *sDIR;           //FAT目录结构指针
 259      =2  extern xdata struct FATLDirStr *lDIR;           //FAT目录结构指针
 260      =2  
 261      =2  extern void FATInit(void);
 262      =2  extern BYTE FATSelectMedia(BYTE Media);
 263      =2  extern BYTE FATFindPartitions(void);
 264      =2  extern BYTE FATMountPartition(void);
 265      =2  extern BYTE FATMountVolumeID(BYTE Partition);
 266      =2  extern void FATGetPartLongName(struct FATLDirStr *ldp,CHAR *name);
 267      =2  extern DWORD FATDiskSize(void);
 268      =2  extern DWORD FATDiskFreeSize(void);
 269      =2  extern BYTE FATFindDIREntry(CHAR *DirName);
 270      =2  extern BYTE FAT32FindDIREntry(CHAR *DirName);
 271      =2  extern BYTE FAT16FindDIREntry(CHAR *DirName);
 272      =2  void FATReadCluster(struct FATClusterStr *Cluster,BYTE *Buffer);
 273      =2  extern BYTE FATChangeDirectory(CHAR *DirName);
 274      =2  extern BYTE FATListDirectory(void);
 275      =2  extern BYTE FAT32ListDirectory(void);
 276      =2  extern BYTE FAT16ListDirectory(void);
 277      =2  extern void FATNextCluster(DWORD *CurrentCluster);
 278      =2  extern BYTE FATGetDirName(WORD SecNum);
 279      =2  extern BYTE FATOpenFile(CHAR *filename);
 280      =2  extern void FATCloseFile(BYTE fp);
 281      =2  extern WORD FATReadFile(BYTE fp);
 282      =2  
  11      =1  
   3          #endif
   4          
   5          void FATReadCluster(struct FATClusterStr *Cluster,BYTE *Buffer);
   6          
   7          void FATReadCluster(struct FATClusterStr *Cluster,BYTE *Buffer)
   8          {
   9   1              if (Cluster->SecOffset==0)                                      //读第一簇
  10   1                      Cluster->Sector=ClusterToSector(Cluster->Cluster);
  11   1              StorageMedia.ReadSector(Cluster->Sector,Buffer);
  12   1      
  13   1              Cluster->SecOffset++;
  14   1              if (Cluster->SecOffset==FAT.SecPerClus)                 //读下一簇
  15   1              {
  16   2                      FATNextCluster(&(Cluster->Cluster));
  17   2                      Cluster->SecOffset=0;
  18   2              }
  19   1              else
  20   1                      Cluster->Sector++;
  21   1      
  22   1      }
C51 COMPILER V6.23a  FATREADCLUSTER                                                        12/24/2004 00:11:40 PAGE 12  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION _FATReadCluster (BEGIN)
                                           ; SOURCE LINE # 7
0000 900000      R     MOV     DPTR,#Cluster
0003 EB                MOV     A,R3
0004 F0                MOVX    @DPTR,A
0005 A3                INC     DPTR
0006 EA                MOV     A,R2
0007 F0                MOVX    @DPTR,A
0008 A3                INC     DPTR
0009 E9                MOV     A,R1
000A F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 8
                                           ; SOURCE LINE # 9
000B 900000      R     MOV     DPTR,#Cluster
000E E0                MOVX    A,@DPTR
000F FB                MOV     R3,A
0010 A3                INC     DPTR
0011 E0                MOVX    A,@DPTR
0012 FA                MOV     R2,A
0013 A3                INC     DPTR
0014 E0                MOVX    A,@DPTR
0015 F9                MOV     R1,A
0016 120000      E     LCALL   ?C?CLDPTR
0019 704B              JNZ     ?C0001
                                           ; SOURCE LINE # 10
001B 900005            MOV     DPTR,#05H
001E 120000      E     LCALL   ?C?LLDOPTR
0021 EF                MOV     A,R7
0022 24FE              ADD     A,#0FEH
0024 FB                MOV     R3,A
0025 EE                MOV     A,R6
0026 34FF              ADDC    A,#0FFH
0028 FA                MOV     R2,A
0029 ED                MOV     A,R5
002A 34FF              ADDC    A,#0FFH
002C F9                MOV     R1,A
002D EC                MOV     A,R4
002E 34FF              ADDC    A,#0FFH
0030 F8                MOV     R0,A
0031 900000      E     MOV     DPTR,#FAT+04H
0034 E0                MOVX    A,@DPTR
0035 FF                MOV     R7,A
0036 E4                CLR     A
0037 FC                MOV     R4,A
0038 FD                MOV     R5,A
0039 FE                MOV     R6,A
003A 120000      E     LCALL   ?C?LMUL
003D 900000      E     MOV     DPTR,#FAT+0AH
0040 E0                MOVX    A,@DPTR
0041 F8                MOV     R0,A
0042 A3                INC     DPTR
0043 E0                MOVX    A,@DPTR
0044 F9                MOV     R1,A
0045 A3                INC     DPTR
0046 E0                MOVX    A,@DPTR
0047 FA                MOV     R2,A
0048 A3                INC     DPTR
0049 E0                MOVX    A,@DPTR
004A 2F                ADD     A,R7
C51 COMPILER V6.23a  FATREADCLUSTER                                                        12/24/2004 00:11:40 PAGE 13  

004B FF                MOV     R7,A
004C EA                MOV     A,R2
004D 3E                ADDC    A,R6
004E FE                MOV     R6,A
004F E9                MOV     A,R1
0050 3D                ADDC    A,R5
0051 FD                MOV     R5,A
0052 E8                MOV     A,R0
0053 3C                ADDC    A,R4
0054 FC                MOV     R4,A
0055 900000      R     MOV     DPTR,#Cluster
0058 E0                MOVX    A,@DPTR
0059 FB                MOV     R3,A
005A A3                INC     DPTR
005B E0                MOVX    A,@DPTR
005C FA                MOV     R2,A
005D A3                INC     DPTR
005E E0                MOVX    A,@DPTR
005F F9                MOV     R1,A
0060 900001            MOV     DPTR,#01H
0063 120000      E     LCALL   ?C?LSTOPTR
0066         ?C0001:
                                           ; SOURCE LINE # 11
0066 900000      R     MOV     DPTR,#Cluster
0069 E0                MOVX    A,@DPTR
006A FB                MOV     R3,A
006B A3                INC     DPTR
006C E0                MOVX    A,@DPTR
006D FA                MOV     R2,A
006E A3                INC     DPTR
006F E0                MOVX    A,@DPTR
0070 F9                MOV     R1,A
0071 900001            MOV     DPTR,#01H
0074 120000      E     LCALL   ?C?LLDOPTR
0077 900000      R     MOV     DPTR,#Buffer
007A E0                MOVX    A,@DPTR
007B FB                MOV     R3,A
007C A3                INC     DPTR
007D E0                MOVX    A,@DPTR
007E FA                MOV     R2,A
007F A3                INC     DPTR

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -