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

📄 fat32nextcluster.lst

📁 C51实现的FAT32文件系统
💻 LST
📖 第 1 页 / 共 4 页
字号:
 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 + -