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 + -
显示快捷键?