dir.lis

来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 1,634 行 · 第 1/5 页

LIS
1,634
字号
 05F0 2E8E              std y+30,R2
 05F2           ;         //temp.FstClusHI=ClusIndex/0x10000 ;
 05F2           ;           temp.FstClusHI=(INT16U)(Temp1>>16);
 05F2 FE01              movw R30,R28
 05F4 24A0              ldd R2,z+36
 05F6 35A0              ldd R3,z+37
 05F8 46A0              ldd R4,z+38
 05FA 57A0              ldd R5,z+39
 05FC 1201              movw R2,R4
 05FE 398E              std y+25,R3
 0600 288E              std y+24,R2
 0602           ;       
 0602           ;         Rt=AddFDT(Drive,Temp1,&temp);
 0602 CE01              movw R24,R28
 0604 0496              adiw R24,4
 0606 9B83              std y+3,R25
 0608 8A83              std y+2,R24
 060A FE01              movw R30,R28
 060C 24A0              ldd R2,z+36
 060E 35A0              ldd R3,z+37
 0610 46A0              ldd R4,z+38
 0612 57A0              ldd R5,z+39
 0614 4882              std y+0,R4
 0616 5982              std y+1,R5
 0618 9101              movw R18,R2
 061A 0C2D              mov R16,R12
 061C 0E940000          xcall _AddFDT
 0620 A02E              mov R10,R16
 0622           ;     }
 0622 0BC0              xjmp L128
 0624           L127:
 0624           ;     else 
 0624           ;     {
 0624           ;         FATDelClusChain(Drive,Temp1);
 0624 FE01              movw R30,R28
 0626 24A0              ldd R2,z+36
 0628 35A0              ldd R3,z+37
 062A 46A0              ldd R4,z+38
 062C 57A0              ldd R5,z+39
 062E 4882              std y+0,R4
 0630 5982              std y+1,R5
 0632 9101              movw R18,R2
 0634 0C2D              mov R16,R12
 0636 0E940000          xcall _FATDelClusChain
 063A           ;     }
 063A           L128:
 063A           ;     return Rt ;
 063A 0A2D              mov R16,R10
 063C           L108:
 063C AC96              adiw R28,44
 063E 0E940000          xcall pop_gset4
 0642                   .dbline 0 ; func end
 0642 0895              ret
 0644           ;     ClusIndex1 -> y+54
 0644           ;           temp -> y+22
 0644           ;        DirName -> y+10
 0644           ;          Drive -> R12
 0644           ;      ClusIndex -> y+6
 0644           ;             Rt -> R10
 0644           ;           Path -> R10,R11
                        .even
 0644           _RemoveDir::
 0644 0E940000          xcall push_gset4
 0648 5801              movw R10,R16
 064A EA97              sbiw R28,58
 064C           ; }
 064C           ; 
 064C           ; /*********************************************************************************************************
 064C           ; ** 函数名称: RemoveDir
 064C           ; ** 功能描述: 删除目录
 064C           ; ** 输   入: Path:路径名
 064C           ; ** 输   出: RETURN_OK:成功
 064C           ; **           其它参考fat.h中关于返回值的说明
 064C           ; ** 全局变量: 无
 064C           ; ** 调用模块: strupr,DelFDT
 064C           ; ** 作   者: 陈明计
 064C           ; ** 日   期: 2003年9月8日
 064C           ; **-------------------------------------------------------------------------------------------------------
 064C           ; ** 修 改 人: 陈明计
 064C           ; ** 日   期: 2004年4月10日
 064C           ; **------------------------------------------------------------------------------------------------------
 064C           ; ********************************************************************************************************/
 064C           ; INT8U RemoveDir(char *Path)
 064C           ; {
 064C           ;     INT32U ClusIndex,ClusIndex1 ;
 064C           ;     INT8U Drive,Rt ;
 064C           ;     char DirName[12];
 064C           ;     FDT temp ;
 064C           ;     
 064C           ;     strupr(Path);
 064C 8501              movw R16,R10
 064E B1D0              xcall _strupr
 0650           ;     /* 变为大写 */
 0650           ;     ClusIndex=_GetFDTInfo(DirName,Path);
 0650 9501              movw R18,R10
 0652 8E01              movw R16,R28
 0654 065F              subi R16,246  ; offset = 10
 0656 1F4F              sbci R17,255
 0658 3CDD              xcall __GetFDTInfo
 065A FE01              movw R30,R28
 065C 0683              std z+6,R16
 065E 1783              std z+7,R17
 0660 2087              std z+8,R18
 0662 3187              std z+9,R19
 0664           ;     if(ClusIndex==BAD_CLUS)
 0664 47EF              ldi R20,247
 0666 5FEF              ldi R21,255
 0668 6FEF              ldi R22,255
 066A 7FE0              ldi R23,15
 066C FE01              movw R30,R28
 066E 2680              ldd R2,z+6
 0670 3780              ldd R3,z+7
 0672 4084              ldd R4,z+8
 0674 5184              ldd R5,z+9
 0676 2416              cp R2,R20
 0678 3506              cpc R3,R21
 067A 4606              cpc R4,R22
 067C 5706              cpc R5,R23
 067E 11F4              brne L143
 0680           ;     {
 0680           ;         return PATH_NOT_FIND ;
 0680 0EE0              ldi R16,14
 0682 5EC0              xjmp L142
 0684           L143:
 0684           ;     }
 0684           ;     
 0684           ;     Drive=GetDrive(Path);
 0684 8501              movw R16,R10
 0686 8CDD              xcall _GetDrive
 0688 C02E              mov R12,R16
 068A           ;     
 068A           ;     /* 获取FDT其信息 */
 068A           ;     Rt=FindFDTInfo(&temp,Drive,ClusIndex,DirName);
 068A CE01              movw R24,R28
 068C 0A96              adiw R24,10
 068E 9D83              std y+5,R25
 0690 8C83              std y+4,R24
 0692 FE01              movw R30,R28
 0694 2680              ldd R2,z+6
 0696 3780              ldd R3,z+7
 0698 4084              ldd R4,z+8
 069A 5184              ldd R5,z+9
 069C 2882              std y+0,R2
 069E 3982              std y+1,R3
 06A0 4A82              std y+2,R4
 06A2 5B82              std y+3,R5
 06A4 2C2D              mov R18,R12
 06A6 8E01              movw R16,R28
 06A8 0A5E              subi R16,234  ; offset = 22
 06AA 1F4F              sbci R17,255
 06AC 0E940000          xcall _FindFDTInfo
 06B0 A02E              mov R10,R16
 06B2           ;     if(Rt==RETURN_OK)
 06B2 0023              tst R16
 06B4 09F0              breq X8
 06B6 43C0              xjmp L145
 06B8           X8:
 06B8           ;     {
 06B8           ;         /* 是否是目录 */
 06B8           ;         if((temp.Attr&ATTR_DIRECTORY)!=0)
 06B8 29A0              ldd R2,y+33
 06BA 24FE              sbrs R2,4
 06BC 3EC0              rjmp L147
 06BE           ;         {
 06BE           ;             /* 是 */
 06BE           ;             ClusIndex1=temp.FstClusLO+((INT32U)(temp.FstClusHI)<<16);
 06BE 2AA4              ldd R2,y+42
 06C0 3BA4              ldd R3,y+43
 06C2 4424              clr R4
 06C4 5524              clr R5
 06C6 2101              movw R4,R2
 06C8 2224              clr R2
 06CA 3324              clr R3
 06CC 68A8              ldd R6,y+48
 06CE 79A8              ldd R7,y+49
 06D0 8824              clr R8
 06D2 9924              clr R9
 06D4 620C              add R6,R2
 06D6 731C              adc R7,R3
 06D8 841C              adc R8,R4
 06DA 951C              adc R9,R5
 06DC FE01              movw R30,R28
 06DE 66AA              std z+54,R6
 06E0 77AA              std z+55,R7
 06E2 80AE              std z+56,R8
 06E4 91AE              std z+57,R9
 06E6           ;             /* 是否是空目录 */
 06E6           ;             Rt=DirIsEmpty(Drive,ClusIndex1);
 06E6 FE01              movw R30,R28
 06E8 26A8              ldd R2,z+54
 06EA 37A8              ldd R3,z+55
 06EC 40AC              ldd R4,z+56
 06EE 51AC              ldd R5,z+57
 06F0 4882              std y+0,R4
 06F2 5982              std y+1,R5
 06F4 9101              movw R18,R2
 06F6 0C2D              mov R16,R12
 06F8 0E940000          xcall _DirIsEmpty
 06FC A02E              mov R10,R16
 06FE           ;             if(Rt==DIR_EMPTY)
 06FE 0C30              cpi R16,12
 0700 F1F4              brne L148
 0702           ;             {
 0702           ;                 /* 是,删除 */
 0702           ;                 FATDelClusChain(Drive,ClusIndex1);
 0702 FE01              movw R30,R28
 0704 26A8              ldd R2,z+54
 0706 37A8              ldd R3,z+55
 0708 40AC              ldd R4,z+56
 070A 51AC              ldd R5,z+57
 070C 4882              std y+0,R4
 070E 5982              std y+1,R5
 0710 9101              movw R18,R2
 0712 0C2D              mov R16,R12
 0714 0E940000          xcall _FATDelClusChain
 0718           ;                 Rt=DelFDT(Drive,ClusIndex,DirName);
 0718 CE01              movw R24,R28
 071A 0A96              adiw R24,10
 071C 9B83              std y+3,R25
 071E 8A83              std y+2,R24
 0720 FE01              movw R30,R28
 0722 2680              ldd R2,z+6
 0724 3780              ldd R3,z+7
 0726 4084              ldd R4,z+8
 0728 5184              ldd R5,z+9
 072A 4882              std y+0,R4
 072C 5982              std y+1,R5
 072E 9101              movw R18,R2
 0730 0C2D              mov R16,R12
 0732 0E940000          xcall _DelFDT
 0736 A02E              mov R10,R16
 0738           ;             }
 0738           ;         }
 0738 02C0              xjmp L148
 073A           L147:
 073A           ;         else 
 073A           ;         {
 073A           ;             return PATH_NOT_FIND ;
 073A 0EE0              ldi R16,14
 073C 01C0              xjmp L142
 073E           L148:
 073E           ;         }
 073E           ;     }
 073E           L145:
 073E           ;     return Rt ;
 073E 0A2D              mov R16,R10
 0740           L142:
 0740 EA96              adiw R28,58
 0742 0E940000          xcall pop_gset4
 0746                   .dbline 0 ; func end
 0746 0895              ret
 0748           ;          Drive -> R12
 0748           ;           Disk -> R12,R13
 0748           ;      ClusIndex -> y+0
 0748           ;             Rt -> R10
 0748           ;           Path -> R12,R13
                        .even
 0748           _ChangeDir::
 0748 0E940000          xcall push_gset4
 074C 6801              movw R12,R16
 074E 2497              sbiw R28,4
 0750           ; }
 0750           ; 
 0750           ; /*********************************************************************************************************
 0750           ; ** 函数名称: ChangeDir
 0750           ; ** 功能描述: 改变当前目录
 0750           ; ** 输   入: Path:路径名
 0750           ; ** 输   出: RETURN_OK:成功
 0750           ; **           其它参考fat.h中关于返回值的说明
 0750           ; ** 全局变量: 无
 0750           ; ** 调用模块: GetDirClusIndex,GetDiskInfo
 0750           ; ** 作   者: 陈明计
 0750           ; ** 日   期: 2003年9月8日
 0750           ; **-------------------------------------------------------------------------------------------------------
 0750           ; ** 修 改 人:
 0750           ; ** 日   期:
 0750           ; **------------------------------------------------------------------------------------------------------
 0750           ; ********************************************************************************************************/
 0750           ; INT8U ChangeDir(char *Path)
 0750           ; {
 0750           ;     INT32U ClusIndex ;
 0750           ;     INT8U Rt,Drive ;
 0750           ;     Disk_Info *Disk ;
 0750           ;     
 0750           ;     Rt=PATH_NOT_FIND ;
 0750 8EE0              ldi R24,14
 0752 A82E              mov R10,R24
 0754           ;     ClusIndex=GetDirClusIndex(Path);
 0754 8601              movw R16,R12
 0756 57DD              xcall _GetDirClusIndex
 0758 FE01              movw R30,R28
 075A 0083              std z+0,R16
 075C 1183              std z+1,R17
 075E 2283              std z+2,R18
 0760 3383              std z+3,R19
 0762           ;     if(ClusIndex!=BAD_CLUS)
 0762 47EF              ldi R20,247
 0764 5FEF              ldi R21,255
 0766 6FEF              ldi R22,255
 0768 7FE0              ldi R23,15
 076A FE01              movw R30,R28
 076C 2080              ldd R2,z+0
 076E 3180              ldd R3,z+1
 0770 4280              ldd R4,z+2
 0772 5380              ldd R5,z+3
 0774 2416              cp R2,R20
 0776 3506              cpc R3,R21
 0778 4606              cpc R4,R22
 077A 5706              cpc R5,R23
 077C A9F0              breq L155
 077E           ;     {
 077E           ;         Drive=GetDrive(Path);
 077E 8601              movw R16,R12
 0780 0FDD              xcall _GetDrive
 0782           ;         Disk=GetDiskInfo(Drive);
 0782 0E940000          xcall _GetDiskInfo
 0786 6801              movw R12,R16
 0788           ;         Rt=NOT_FIND_DISK ;
 0788 AA24              clr R10
 078A A394              inc R10
 078C           ;         if(Disk!=NULL)
 078C 0030              cpi R16,0
 078E 0107              cpc R16,R17
 0790 59F0              breq L157
 0792           X9:
 0792           ;     

⌨️ 快捷键说明

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