fat.lis

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

LIS
1,740
字号
 08DE 9E07              cpc R25,R30
 08E0 09F4              brne X23
 08E2 D4C0              xjmp L59
 08E4           X23:
 08E4 8230              cpi R24,2
 08E6 E0E0              ldi R30,0
 08E8 9E07              cpc R25,R30
 08EA 09F4              brne X24
 08EC EBC0              xjmp L60
 08EE           X24:
 08EE 40C1              xjmp L46
 08F0           X19:
 08F0           ;     {
 08F0           L48:
 08F0           ;         case FAT12 :
 08F0           ;              temp=Next&0x0fff ;/* 判断哪12位有效 */
 08F0 4FEF              ldi R20,255
 08F2 5FE0              ldi R21,15
 08F4 60E0              ldi R22,0
 08F6 70E0              ldi R23,0
 08F8 FE01              movw R30,R28
 08FA 2688              ldd R2,z+22
 08FC 3788              ldd R3,z+23
 08FE 408C              ldd R4,z+24
 0900 518C              ldd R5,z+25
 0902 2422              and R2,R20
 0904 3522              and R3,R21
 0906 4622              and R4,R22
 0908 5722              and R5,R23
 090A 6101              movw R12,R2
 090C           ;              if((Index&0x01)!=0)
 090C 41E0              ldi R20,1
 090E 50E0              ldi R21,0
 0910 60E0              ldi R22,0
 0912 70E0              ldi R23,0
 0914 FE01              movw R30,R28
 0916 2288              ldd R2,z+18
 0918 3388              ldd R3,z+19
 091A 4488              ldd R4,z+20
 091C 5588              ldd R5,z+21
 091E 2422              and R2,R20
 0920 3522              and R3,R21
 0922 4622              and R4,R22
 0924 5722              and R5,R23
 0926 40E0              ldi R20,0
 0928 50E0              ldi R21,0
 092A 60E0              ldi R22,0
 092C 70E0              ldi R23,0
 092E 2416              cp R2,R20
 0930 3506              cpc R3,R21
 0932 4606              cpc R4,R22
 0934 5706              cpc R5,R23
 0936 A1F0              breq L49
 0938           ;              {
 0938           ;                  temp=temp*16 ;
 0938 00E1              ldi R16,16
 093A 10E0              ldi R17,0
 093C 9601              movw R18,R12
 093E 0E940000          xcall empy16s
 0942 6801              movw R12,R16
 0944           ;                temp|=(Buf[ByteIndex]&0x0f);
 0944 F501              movw R30,R10
 0946 EE0D              add R30,R14
 0948 FF1D              adc R31,R15
 094A 8081              ldd R24,z+0
 094C 9927              clr R25
 094E 8F70              andi R24,15
 0950 9070              andi R25,0
 0952 C82A              or R12,R24
 0954 D92A              or R13,R25
 0956           ;                Buf[ByteIndex]=temp ;
 0956 F501              movw R30,R10
 0958 EE0D              add R30,R14
 095A FF1D              adc R31,R15
 095C C082              std z+0,R12
 095E           ;              }
 095E 04C0              xjmp L50
 0960           L49:
 0960           ;        	     else 
 0960           ;        	     {
 0960           ;                  Buf[ByteIndex]=temp ;
 0960 F501              movw R30,R10
 0962 EE0D              add R30,R14
 0964 FF1D              adc R31,R15
 0966 C082              std z+0,R12
 0968           ;              }
 0968           L50:
 0968           ;              ByteIndex++;
 0968 C501              movw R24,R10
 096A 0196              adiw R24,1
 096C 5C01              movw R10,R24
 096E           ;              temp=temp>>8 ;
 096E CD2C              mov R12,R13
 0970 DD24              clr R13
 0972           ;              /* 下一个字节是否在下一个扇区 */
 0972           ;              if(ByteIndex>=Disk->BytsPerSec)
 0972 EA81              ldd R30,y+2
 0974 FB81              ldd R31,y+3
 0976 2088              ldd R2,z+16
 0978 3188              ldd R3,z+17
 097A 4288              ldd R4,z+18
 097C 5388              ldd R5,z+19
 097E 3C01              movw R6,R24
 0980 8824              clr R8
 0982 9924              clr R9
 0984 6214              cp R6,R2
 0986 7304              cpc R7,R3
 0988 8404              cpc R8,R4
 098A 9504              cpc R9,R5
 098C 08F4              brsh X25
 098E 57C0              xjmp L51
 0990           X25:
 0990           ;              {
 0990           ;                  Buf=OpenSec(Drive,SecIndex+1);
 0990 8C81              ldd R24,y+4
 0992 9D81              ldd R25,y+5
 0994 0196              adiw R24,1
 0996 1C01              movw R2,R24
 0998 4424              clr R4
 099A 5524              clr R5
 099C 4882              std y+0,R4
 099E 5982              std y+1,R5
 09A0 9101              movw R18,R2
 09A2 0889              ldd R16,y+16
 09A4 0E940000          xcall _OpenSec
 09A8 7801              movw R14,R16
 09AA           ;                  if(Buf==NULL)
 09AA 0030              cpi R16,0
 09AC 0107              cpc R16,R17
 09AE 09F4              brne L53
 09B0           X20:
 09B0           ;                      break ;
 09B0 DFC0              xjmp L46
 09B2           L53:
 09B2           ;                  ReadSec(Drive,SecIndex+1);
 09B2 8C81              ldd R24,y+4
 09B4 9D81              ldd R25,y+5
 09B6 0196              adiw R24,1
 09B8 1C01              movw R2,R24
 09BA 4424              clr R4
 09BC 5524              clr R5
 09BE 4882              std y+0,R4
 09C0 5982              std y+1,R5
 09C2 9101              movw R18,R2
 09C4 0889              ldd R16,y+16
 09C6 0E940000          xcall _ReadSec
 09CA           ;                  /* 判断哪12位有效 */
 09CA           ;                  if((Index&0x01)!=0)
 09CA 41E0              ldi R20,1
 09CC 50E0              ldi R21,0
 09CE 60E0              ldi R22,0
 09D0 70E0              ldi R23,0
 09D2 FE01              movw R30,R28
 09D4 2288              ldd R2,z+18
 09D6 3388              ldd R3,z+19
 09D8 4488              ldd R4,z+20
 09DA 5588              ldd R5,z+21
 09DC 2422              and R2,R20
 09DE 3522              and R3,R21
 09E0 4622              and R4,R22
 09E2 5722              and R5,R23
 09E4 40E0              ldi R20,0
 09E6 50E0              ldi R21,0
 09E8 60E0              ldi R22,0
 09EA 70E0              ldi R23,0
 09EC 2416              cp R2,R20
 09EE 3506              cpc R3,R21
 09F0 4606              cpc R4,R22
 09F2 5706              cpc R5,R23
 09F4 19F0              breq L55
 09F6           ;                  {
 09F6           ;                      Buf[0]=temp ;
 09F6 F701              movw R30,R14
 09F8 C082              std z+0,R12
 09FA           ;                  }
 09FA 08C0              xjmp L56
 09FC           L55:
 09FC           ;                  else 
 09FC           ;                  {
 09FC           ;                      Buf[0]=(Buf[0]&0xf0)|temp ;
 09FC F701              movw R30,R14
 09FE 8081              ldd R24,z+0
 0A00 9927              clr R25
 0A02 807F              andi R24,240
 0A04 9070              andi R25,0
 0A06 8C29              or R24,R12
 0A08 9D29              or R25,R13
 0A0A 8083              std z+0,R24
 0A0C           ;                  }
 0A0C           L56:
 0A0C           ;                  WriteSec(Drive,SecIndex+1);
 0A0C 8C81              ldd R24,y+4
 0A0E 9D81              ldd R25,y+5
 0A10 0196              adiw R24,1
 0A12 1C01              movw R2,R24
 0A14 4424              clr R4
 0A16 5524              clr R5
 0A18 4882              std y+0,R4
 0A1A 5982              std y+1,R5
 0A1C 9101              movw R18,R2
 0A1E 0889              ldd R16,y+16
 0A20 0E940000          xcall _WriteSec
 0A24           ;                  CloseSec(Drive,SecIndex+1);
 0A24 8C81              ldd R24,y+4
 0A26 9D81              ldd R25,y+5
 0A28 0196              adiw R24,1
 0A2A 1C01              movw R2,R24
 0A2C 4424              clr R4
 0A2E 5524              clr R5
 0A30 4882              std y+0,R4
 0A32 5982              std y+1,R5
 0A34 9101              movw R18,R2
 0A36 0889              ldd R16,y+16
 0A38 0E940000          xcall _CloseSec
 0A3C           ;              }
 0A3C 99C0              xjmp L46
 0A3E           L51:
 0A3E           ;              else 
 0A3E           ;              {
 0A3E           ;                  /* 判断哪12位有效 */
 0A3E           ;                 if((Index&0x01)!=0)
 0A3E 41E0              ldi R20,1
 0A40 50E0              ldi R21,0
 0A42 60E0              ldi R22,0
 0A44 70E0              ldi R23,0
 0A46 FE01              movw R30,R28
 0A48 2288              ldd R2,z+18
 0A4A 3388              ldd R3,z+19
 0A4C 4488              ldd R4,z+20
 0A4E 5588              ldd R5,z+21
 0A50 2422              and R2,R20
 0A52 3522              and R3,R21
 0A54 4622              and R4,R22
 0A56 5722              and R5,R23
 0A58 40E0              ldi R20,0
 0A5A 50E0              ldi R21,0
 0A5C 60E0              ldi R22,0
 0A5E 70E0              ldi R23,0
 0A60 2416              cp R2,R20
 0A62 3506              cpc R3,R21
 0A64 4606              cpc R4,R22
 0A66 5706              cpc R5,R23
 0A68 29F0              breq L57
 0A6A           ;                 {
 0A6A           ;                     Buf[ByteIndex]=temp ;
 0A6A F501              movw R30,R10
 0A6C EE0D              add R30,R14
 0A6E FF1D              adc R31,R15
 0A70 C082              std z+0,R12
 0A72           ;                 }
 0A72 7EC0              xjmp L46
 0A74           L57:
 0A74           ;                 else 
 0A74           ;                 {
 0A74           ;                     Buf[ByteIndex]=(Buf[ByteIndex]&0xf0)|temp ;
 0A74 1501              movw R2,R10
 0A76 2E0C              add R2,R14
 0A78 3F1C              adc R3,R15
 0A7A F101              movw R30,R2
 0A7C 8081              ldd R24,z+0
 0A7E 9927              clr R25
 0A80 807F              andi R24,240
 0A82 9070              andi R25,0
 0A84 8C29              or R24,R12
 0A86 9D29              or R25,R13
 0A88 8083              std z+0,R24
 0A8A           ;                 }
 0A8A           ;              }
 0A8A           ;              break ;
 0A8A 72C0              xjmp L46
 0A8C           L59:
 0A8C           ;         case FAT16 :
 0A8C           ;              Buf[ByteIndex]=Next ;
 0A8C F501              movw R30,R10
 0A8E EE0D              add R30,R14
 0A90 FF1D              adc R31,R15
 0A92 DE01              movw R26,R28
 0A94 5696              adiw R26,22
 0A96 2D90              ld R2,x+
 0A98 3D90              ld R3,x+
 0A9A 4D90              ld R4,x+
 0A9C 5C90              ld R5,x
 0A9E 2082              std z+0,R2
 0AA0           ;              Buf[ByteIndex+1]=Next>>8 ;
 0AA0 88E0              ldi R24,8
 0AA2 90E0              ldi R25,0
 0AA4 FE01              movw R30,R28
 0AA6 2688              ldd R2,z+22
 0AA8 3788              ldd R3,z+23
 0AAA 408C              ldd R4,z+24
 0AAC 518C              ldd R5,z+25
 0AAE 8A93              st -y,R24
 0AB0 8101              movw R16,R2
 0AB2 9201              movw R18,R4
 0AB4 0E940000          xcall lsr32
 0AB8 F501              movw R30,R10
 0ABA 3196              adiw R30,1
 0ABC EE0D              add R30,R14
 0ABE FF1D              adc R31,R15
 0AC0 0083              std z+0,R16
 0AC2           ;              break ;
 0AC2 56C0              xjmp L46
 0AC4           L60:
 0AC4           ;         case FAT32 :
 0AC4           ;              Buf[ByteIndex]=Next ;
 0AC4 F501              movw R30,R10
 0AC6 EE0D              add R30,R14
 0AC8 FF1D              adc R31,R15
 0ACA DE01              movw R26,R28
 0ACC 5696              adiw R26,22
 0ACE 2D90              ld R2,x+
 0AD0 3D90              ld R3,x+
 0AD2 4D90              ld R4,x+
 0AD4 5C90              ld R5,x
 0AD6 2082              std z+0,R2
 0AD8           ;              Buf[ByteIndex+1]=Next>>8 ;
 0AD8 88E0              ldi R24,8
 0ADA 90E0              ldi R25,0
 0ADC FE01              movw R30,R28
 0ADE 2688              ldd R2,z+22
 0AE0 3788              ldd R3,z+23
 0AE2 408C              ldd R4,z+24
 0AE4 518C              ldd R5,z+25
 0AE6 8A93              st -y,R24
 0AE8 8101              movw R16,R2
 0AEA 9201              movw R18,R4
 0AEC 0E940000          xcall lsr32
 0AF0 F501              movw R30,R10
 0AF2 3196              adiw R30,1
 0AF4 EE0D              add R30,R14
 0AF6 FF1D              adc R31,R15
 0AF8 0083              std z+0,R16
 0AFA           ;              Buf[ByteIndex+2]=Next>>16 ;
 0AFA F501              movw R30,R10
 0AFC 3296              adiw R30,2
 0AFE EE0D              add R30,R14
 0B00 FF1D              adc R31,R15
 0B02 DE01              movw R26,R28
 0B04 5696              adiw R26,22
 0B06 2D90              ld R2,x+
 0B08 3D90              ld R3,x+
 0B0A 4D90              ld R4,x+
 0B0C 5C90              ld R5,x
 0B0E 1201              movw R2,R4
 0B10 4424              clr R4
 0B12 5524              clr R5
 0B14 2082              std z+0,R2
 0B16           ;              Buf[ByteIndex+3]=(Buf[By

⌨️ 快捷键说明

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