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

📄 fat32getdirname.lst

📁 这个是非常不错的mp3源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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   FAT32GETDIRNAME                                                       06/01/2008 16:21:03 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   FAT32GETDIRNAME                                                       06/01/2008 16:21:03 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          BYTE FAT32GetDirName(WORD SecNum);
   6          
   7          BYTE FAT32GetDirName(WORD SecNum)
   8          {
   9   1              BYTE i,j,k,m,n;
  10   1              DWORD chain;
  11   1              CHAR temp[27];
  12   1              
  13   1              chain=FAT32.CurrentDirectory;
  14   1              FAT32.ClusSecCnt=0;
  15   1              while(chain!=0x0fffffff)
  16   1              {
  17   2                      FAT32ReadCluster(&chain);
  18   2                      for (i=0;i<16;i++)
  19   2                      {
  20   3                              if (SecNum==1)
  21   3                              {
  22   4                                      if ((sDIR[i].Attr&FAT32_ATTR_LONG_NAME_MASK)==FAT32_ATTR_LONG_NAME)
  23   4                                      //长文件名
  24   4                                      {
  25   5                                              j=lDIR[i].Ord - FAT32_LAST_LONG_ENTRY;
  26   5                                              LongFileName[0]=0;n=0;
  27   5                                              for(;j>0;j--)
  28   5                                              {
  29   6                                                      FAT32GetPartLongName(lDIR+i,temp);
  30   6                                                      m=strlen((char *)temp);
  31   6                                                      k=m+n;
  32   6                                                      for(;n>0;n--)
  33   6                                                              LongFileName[m+n]=LongFileName[n];
  34   6                                                      LongFileName[m+n]=LongFileName[n];
  35   6                                                      m--;
  36   6                                                      for(;m>0;m--)
  37   6                                                              LongFileName[m]=temp[m];
  38   6                                                      LongFileName[m]=temp[m];
  39   6                                                      n=k;
  40   6                                                      i++;
  41   6                                                      if (i==16)
  42   6                                                      {
  43   7                                                              FAT32ReadCluster(&chain);
  44   7                                                              i=0;
  45   7                                                      }
  46   6                                              }
  47   5                                              if (sDIR[i].Name[0]==0x00||sDIR[i].Name[0]==0xe5) return(3);            //空目录项
  48   5                                              if (sDIR[i].Attr&FAT32_ATTR_DIRECTORY) return(2);                       //找到一个目录入口
  49   5                                      }
  50   4                                      else
  51   4                                      {
  52   5                                      //短文件名
  53   5                                              if (sDIR[i].Name[0]==0x00||sDIR[i].Name[0]==0xe5) return(3);            //空目录项
  54   5                                              if (sDIR[i].Attr&FAT32_ATTR_VOLUME_ID) continue;                        //如果是目录入口或卷标则跳过
  55   5                                              for(j=0;j<11;j++)
  56   5                                                      LongFileName[j]=sDIR[i].Name[j];
  57   5                                              LongFileName[j]=0;
  58   5                                              for(j=0;j<3;j++)
  59   5                                                      temp[j]=toupper(sDIR[i].Name[8+j]);
C51 COMPILER V8.08   FAT32GETDIRNAME                                                       06/01/2008 16:21:03 PAGE 12  

  60   5                                              temp[j]=0;
  61   5                                              if (sDIR[i].Attr&FAT32_ATTR_DIRECTORY) return(2);                       //找到一个目录入口
  62   5                                      }
  63   4                                      return(1);
  64   4                              }
  65   3                              else if (sDIR[i].Attr!=FAT32_ATTR_LONG_NAME) SecNum--;
  66   3                      }
  67   2              }
  68   1              return(0);
  69   1      }
  70          
C51 COMPILER V8.08   FAT32GETDIRNAME                                                       06/01/2008 16:21:03 PAGE 13  

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION _FAT32GetDirName (BEGIN)
                                           ; SOURCE LINE # 7
0000 900000      R     MOV     DPTR,#SecNum
0003 EE                MOV     A,R6
0004 F0                MOVX    @DPTR,A
0005 A3                INC     DPTR
0006 EF                MOV     A,R7
0007 F0                MOVX    @DPTR,A
                                           ; SOURCE LINE # 8
                                           ; SOURCE LINE # 13
0008 900000      E     MOV     DPTR,#FAT32+01H
000B E0                MOVX    A,@DPTR
000C FC                MOV     R4,A
000D A3                INC     DPTR
000E E0                MOVX    A,@DPTR
000F FD                MOV     R5,A
0010 A3                INC     DPTR
0011 E0                MOVX    A,@DPTR
0012 FE                MOV     R6,A
0013 A3                INC     DPTR
0014 E0                MOVX    A,@DPTR
0015 FF                MOV     R7,A
0016 900000      R     MOV     DPTR,#chain
0019 120000      E     LCALL   ?C?LSTXDATA
                                           ; SOURCE LINE # 14
001C E4                CLR     A
001D 900000      E     MOV     DPTR,#FAT32
0020 F0                MOVX    @DPTR,A
0021         ?C0001:
                                           ; SOURCE LINE # 15
0021 74FF              MOV     A,#0FFH
0023 FF                MOV     R7,A
0024 FE                MOV     R6,A
0025 FD                MOV     R5,A
0026 7C0F              MOV     R4,#0FH
0028 900000      R     MOV     DPTR,#chain
002B E0                MOVX    A,@DPTR
002C F8                MOV     R0,A
002D A3                INC     DPTR
002E E0                MOVX    A,@DPTR
002F F9                MOV     R1,A
0030 A3                INC     DPTR
0031 E0                MOVX    A,@DPTR
0032 FA                MOV     R2,A
0033 A3                INC     DPTR
0034 E0                MOVX    A,@DPTR
0035 FB                MOV     R3,A
0036 C3                CLR     C
0037 120000      E     LCALL   ?C?ULCMP
003A 7003              JNZ     $ + 5H
003C 020000      R     LJMP    ?C0002
                                           ; SOURCE LINE # 16
                                           ; SOURCE LINE # 17
003F 7B01              MOV     R3,#01H
0041 7A00        R     MOV     R2,#HIGH chain
0043 7900        R     MOV     R1,#LOW chain
0045 120000      E     LCALL   _FAT32ReadCluster
                                           ; SOURCE LINE # 18
0048 E4                CLR     A
C51 COMPILER V8.08   FAT32GETDIRNAME                                                       06/01/2008 16:21:03 PAGE 14  

0049 900000      R     MOV     DPTR,#i
004C F0                MOVX    @DPTR,A
004D         ?C0003:
004D 900000      R     MOV     DPTR,#i
0050 E0                MOVX    A,@DPTR
0051 FF                MOV     R7,A
0052 C3                CLR     C
0053 9410              SUBB    A,#010H
0055 50CA              JNC     ?C0001
                                           ; SOURCE LINE # 19
                                           ; SOURCE LINE # 20
0057 900000      R     MOV     DPTR,#SecNum
005A E0                MOVX    A,@DPTR
005B 7004              JNZ     ?C0035
005D A3                INC     DPTR
005E E0                MOVX    A,@DPTR
005F 6401              XRL     A,#01H
0061         ?C0035:
0061 6003              JZ      $ + 5H
0063 020000      R     LJMP    ?C0006
                                           ; SOURCE LINE # 21
                                           ; SOURCE LINE # 22
0066 EF                MOV     A,R7
0067 75F020            MOV     B,#020H
006A A4                MUL     AB
006B FF                MOV     R7,A
006C 900000      E     MOV     DPTR,#sDIR
006F E0                MOVX    A,@DPTR
0070 FB                MOV     R3,A
0071 A3                INC     DPTR
0072 E0                MOVX    A,@DPTR
0073 FA                MOV     R2,A
0074 A3                INC     DPTR
0075 E0                MOVX    A,@DPTR
0076 2F                ADD     A,R7
0077 F9                MOV     R1,A
0078 EA                MOV     A,R2
0079 35F0              ADDC    A,B
007B FA                MOV     R2,A
007C 90000B            MOV     DPTR,#0BH
007F 120000      E     LCALL   ?C?CLDOPTR
0082 543F              ANL     A,#03FH
0084 640F              XRL     A,#0FH
0086 6003              JZ      $ + 5H
0088 020000      R     LJMP    ?C0007
                                           ; SOURCE LINE # 24
                                           ; SOURCE LINE # 25
008B 900000      E     MOV     DPTR,#lDIR
008E E0                MOVX    A,@DPTR
008F FB                MOV     R3,A
0090 A3                INC     DPTR
0091 E0                MOVX    A,@DPTR
0092 FA                MOV     R2,A
0093 A3                INC     DPTR
0094 E0                MOVX    A,@DPTR
0095 F9                MOV     R1,A
0096 900000      R     MOV     DPTR,#i

⌨️ 快捷键说明

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