dir.lis

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

LIS
1,634
字号
 0252 40E0              ldi R20,0
 0254 50E0              ldi R21,0
 0256 60E0              ldi R22,0
 0258 70E0              ldi R23,0
 025A FE01              movw R30,R28
 025C 4683              std z+6,R20
 025E 5783              std z+7,R21
 0260 6087              std z+8,R22
 0262 7187              std z+9,R23
 0264           ;             if(Disk->FATType==FAT32)/* FAT32 根目录 */
 0264 F501              movw R30,R10
 0266 8181              ldd R24,z+1
 0268 8230              cpi R24,2
 026A 51F4              brne L71
 026C           ;             {
 026C           ;                 Rt=Disk->RootDirTable ;
 026C F501              movw R30,R10
 026E 2488              ldd R2,z+20
 0270 3588              ldd R3,z+21
 0272 4688              ldd R4,z+22
 0274 5788              ldd R5,z+23
 0276 FE01              movw R30,R28
 0278 2682              std z+6,R2
 027A 3782              std z+7,R3
 027C 4086              std z+8,R4
 027E 5186              std z+9,R5
 0280           ;             }
 0280           L71:
 0280           ;             if(Path[0]!='\\')/* 不是目录分隔符号,表明起点是当前路径 */
 0280 F701              movw R30,R14
 0282 8081              ldd R24,z+0
 0284 8C35              cpi R24,92
 0286 59F0              breq L73
 0288           ;             {
 0288           ;                 Rt=Disk->PathClusIndex ;
 0288 F501              movw R30,R10
 028A 24A0              ldd R2,z+36
 028C 35A0              ldd R3,z+37
 028E 46A0              ldd R4,z+38
 0290 57A0              ldd R5,z+39
 0292 FE01              movw R30,R28
 0294 2682              std z+6,R2
 0296 3782              std z+7,R3
 0298 4086              std z+8,R4
 029A 5186              std z+9,R5
 029C           ;             }
 029C 03C0              xjmp L74
 029E           L73:
 029E           ;             else 
 029E           ;             {
 029E           ;                 Path++;
 029E C701              movw R24,R14
 02A0 0196              adiw R24,1
 02A2 7C01              movw R14,R24
 02A4           ;             }
 02A4           L74:
 02A4           ;             /* '\.'表明起点是当前路径 */
 02A4           ;             if(Path[0]=='.')
 02A4 F701              movw R30,R14
 02A6 8081              ldd R24,z+0
 02A8 8E32              cpi R24,46
 02AA A9F4              brne L75
 02AC           ;             {
 02AC           ;                 Rt=Disk->PathClusIndex ;
 02AC F501              movw R30,R10
 02AE 24A0              ldd R2,z+36
 02B0 35A0              ldd R3,z+37
 02B2 46A0              ldd R4,z+38
 02B4 57A0              ldd R5,z+39
 02B6 FE01              movw R30,R28
 02B8 2682              std z+6,R2
 02BA 3782              std z+7,R3
 02BC 4086              std z+8,R4
 02BE 5186              std z+9,R5
 02C0           ;                 if(Path[1]==0||Path[1]=='\\')
 02C0 F701              movw R30,R14
 02C2 2180              ldd R2,z+1
 02C4 3324              clr R3
 02C6 2220              tst R2
 02C8 19F0              breq L79
 02CA 822D              mov R24,R2
 02CC 8C35              cpi R24,92
 02CE 19F4              brne L77
 02D0           L79:
 02D0           ;                 {
 02D0           ;                     Path++;
 02D0 C701              movw R24,R14
 02D2 0196              adiw R24,1
 02D4 7C01              movw R14,R24
 02D6           ;                 }
 02D6           L77:
 02D6           ;             }
 02D6           L75:
 02D6           ;             if(Path[0]=='\\')
 02D6 F701              movw R30,R14
 02D8 8081              ldd R24,z+0
 02DA 8C35              cpi R24,92
 02DC 19F4              brne L80
 02DE           ;             {
 02DE           ;                 Path++;
 02DE CF01              movw R24,R30
 02E0 0196              adiw R24,1
 02E2 7C01              movw R14,R24
 02E4           ;             }
 02E4           L80:
 02E4           ;             
 02E4           ;             DirName[11]=0 ;
 02E4 2224              clr R2
 02E6 2DAA              std y+53,R2
 02E8 64C0              xjmp L84
 02EA           L83:
 02EA           ;             while(Path[0]!=0)
 02EA           ;             {
 02EA           ;                 /* 获取子目录名 */
 02EA           ;                 StrToFDTName(DirName,Path);
 02EA 9701              movw R18,R14
 02EC 8E01              movw R16,R28
 02EE 065D              subi R16,214  ; offset = 42
 02F0 1F4F              sbci R17,255
 02F2 86DE              xcall _StrToFDTName
 02F4           ;                 
 02F4           ;                 /* 子目录名开始簇号 */
 02F4           ;                 if(DirName[0]==0x20)
 02F4 8AA5              ldd R24,y+42
 02F6 8032              cpi R24,32
 02F8 51F4              brne L86
 02FA           ;                 {
 02FA           ;                     Rt=BAD_CLUS ;
 02FA 47EF              ldi R20,247
 02FC 5FEF              ldi R21,255
 02FE 6FEF              ldi R22,255
 0300 7FE0              ldi R23,15
 0302 FE01              movw R30,R28
 0304 4683              std z+6,R20
 0306 5783              std z+7,R21
 0308 6087              std z+8,R22
 030A 7187              std z+9,R23
 030C           ;                     break ;
 030C 57C0              xjmp L85
 030E           L86:
 030E           ;                 }
 030E           ;                 /* 获取FDT信息 */
 030E           ;                 if(FindFDTInfo(&temp,Drive,Rt,DirName)!=RETURN_OK)
 030E CE01              movw R24,R28
 0310 8A96              adiw R24,42
 0312 9D83              std y+5,R25
 0314 8C83              std y+4,R24
 0316 FE01              movw R30,R28
 0318 2680              ldd R2,z+6
 031A 3780              ldd R3,z+7
 031C 4084              ldd R4,z+8
 031E 5184              ldd R5,z+9
 0320 2882              std y+0,R2
 0322 3982              std y+1,R3
 0324 4A82              std y+2,R4
 0326 5B82              std y+3,R5
 0328 2C2D              mov R18,R12
 032A 8E01              movw R16,R28
 032C 065F              subi R16,246  ; offset = 10
 032E 1F4F              sbci R17,255
 0330 0E940000          xcall _FindFDTInfo
 0334 0023              tst R16
 0336 51F0              breq L88
 0338           ;                 {
 0338           ;                     Rt=BAD_CLUS ;
 0338 47EF              ldi R20,247
 033A 5FEF              ldi R21,255
 033C 6FEF              ldi R22,255
 033E 7FE0              ldi R23,15
 0340 FE01              movw R30,R28
 0342 4683              std z+6,R20
 0344 5783              std z+7,R21
 0346 6087              std z+8,R22
 0348 7187              std z+9,R23
 034A           ;                     break ;
 034A 38C0              xjmp L85
 034C           L88:
 034C           ;                 }
 034C           ;                 /* FDT是否是目录 */
 034C           ;                 if((temp.Attr&ATTR_DIRECTORY)==0)
 034C 2D88              ldd R2,y+21
 034E 24FC              sbrc R2,4
 0350 0AC0              rjmp L90
 0352           ;                 {
 0352           ;                     Rt=BAD_CLUS ;
 0352 47EF              ldi R20,247
 0354 5FEF              ldi R21,255
 0356 6FEF              ldi R22,255
 0358 7FE0              ldi R23,15
 035A FE01              movw R30,R28
 035C 4683              std z+6,R20
 035E 5783              std z+7,R21
 0360 6087              std z+8,R22
 0362 7187              std z+9,R23
 0364           ;                     break ;
 0364 2BC0              xjmp L85
 0366           L90:
 0366           ;                 }
 0366           ;                 Rt=temp.FstClusLO+((INT32U)(temp.FstClusHI)<<16);
 0366 2E8C              ldd R2,y+30
 0368 3F8C              ldd R3,y+31
 036A 4424              clr R4
 036C 5524              clr R5
 036E 2101              movw R4,R2
 0370 2224              clr R2
 0372 3324              clr R3
 0374 6CA0              ldd R6,y+36
 0376 7DA0              ldd R7,y+37
 0378 8824              clr R8
 037A 9924              clr R9
 037C 620C              add R6,R2
 037E 731C              adc R7,R3
 0380 841C              adc R8,R4
 0382 951C              adc R9,R5
 0384 FE01              movw R30,R28
 0386 6682              std z+6,R6
 0388 7782              std z+7,R7
 038A 8086              std z+8,R8
 038C 9186              std z+9,R9
 038E 10C0              xjmp L96
 0390           L95:
 0390           ;                 /* 字符串到下一个目录 */
 0390           ;                 while(1)
 0390           ;                 {
 0390           ;                     if(*Path=='\\')
 0390 F701              movw R30,R14
 0392 8081              ldd R24,z+0
 0394 8C35              cpi R24,92
 0396 21F4              brne L98
 0398           ;                     {
 0398           ;                         Path++;
 0398 CF01              movw R24,R30
 039A 0196              adiw R24,1
 039C 7C01              movw R14,R24
 039E           ;                         break ;
 039E 09C0              xjmp L97
 03A0           L98:
 03A0           ;                     }
 03A0           ;                     if(*Path==0)
 03A0 F701              movw R30,R14
 03A2 2080              ldd R2,z+0
 03A4 2220              tst R2
 03A6 09F4              brne L100
 03A8           ;                     {
 03A8           ;                         break ;
 03A8 04C0              xjmp L97
 03AA           L100:
 03AA C701              movw R24,R14
 03AC 0196              adiw R24,1
 03AE 7C01              movw R14,R24
 03B0           L96:
 03B0 EFCF              xjmp L95
 03B2           L97:
 03B2           L84:
 03B2 F701              movw R30,R14
 03B4 2080              ldd R2,z+0
 03B6 2220              tst R2
 03B8 09F0              breq X6
 03BA 97CF              xjmp L83
 03BC           X6:
 03BC           L85:
 03BC           ;                     }
 03BC           ;                     Path++;
 03BC           ;                 }
 03BC           ;             }
 03BC           ;         }
 03BC           L69:
 03BC           ;         if(Disk->FATType==FAT32)
 03BC F501              movw R30,R10
 03BE 8181              ldd R24,z+1
 03C0 8230              cpi R24,2
 03C2 31F5              brne L102
 03C4           ;         if(Rt!=BAD_CLUS)
 03C4 47EF              ldi R20,247
 03C6 5FEF              ldi R21,255
 03C8 6FEF              ldi R22,255
 03CA 7FE0              ldi R23,15
 03CC FE01              movw R30,R28
 03CE 2680              ldd R2,z+6
 03D0 3780              ldd R3,z+7
 03D2 4084              ldd R4,z+8
 03D4 5184              ldd R5,z+9
 03D6 2416              cp R2,R20
 03D8 3506              cpc R3,R21
 03DA 4606              cpc R4,R22
 03DC 5706              cpc R5,R23
 03DE C1F0              breq L104
 03E0           ;         if(Rt==Disk->RootDirTable)
 03E0 F501              movw R30,R10
 03E2 2488              ldd R2,z+20
 03E4 3588              ldd R3,z+21
 03E6 4688              ldd R4,z+22
 03E8 5788              ldd R5,z+23
 03EA FE01              movw R30,R28
 03EC 6680              ldd R6,z+6
 03EE 7780              ldd R7,z+7
 03F0 8084              ldd R8,z+8
 03F2 9184              ldd R9,z+9
 03F4 6214              cp R6,R2
 03F6 7304              cpc R7,R3
 03F8 8404              cpc R8,R4
 03FA 9504              cpc R9,R5
 03FC 49F4              brne L106
 03FE           ;         {
 03FE           ;             Rt=0 ;
 03FE 40E0              ldi R20,0
 0400 50E0              ldi R21,0
 0402 60E0              ldi R22,0
 0404 70E0              ldi R23,0
 0406 FE01              movw R30,R28
 0408 4683              std z+6,R20
 040A 5783              std z+7,R21
 040C 6087              std z+8,R22
 040E 7187              std z+9,R23
 0410           ;         }
 0410           L106:
 0410           L104:
 0410           L102:
 0410           ;     }
 0410           L65:
 0410           ;     return Rt ;
 0410 FE01              movw R30,R28
 0412 0681              ldd R16,z+6
 0414 1781              ldd R17,z+7
 0416 2085              ldd R18,z+8
 0418 3185              ldd R19,z+9
 041A           L64:

⌨️ 快捷键说明

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