fat.lis

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

LIS
1,740
字号
 044A FE01              movw R30,R28
 044C 2682              std z+6,R2
 044E 3782              std z+7,R3
 0450 4086              std z+8,R4
 0452 5186              std z+9,R5
 0454           ;              /* 是否有特殊意义 */
 0454           ;              if(temp>=(BAD_CLUS&0x0fff))
 0454 47EF              ldi R20,247
 0456 5FE0              ldi R21,15
 0458 60E0              ldi R22,0
 045A 70E0              ldi R23,0
 045C 4424              clr R4
 045E 5524              clr R5
 0460 2416              cp R2,R20
 0462 3506              cpc R3,R21
 0464 4606              cpc R4,R22
 0466 5706              cpc R5,R23
 0468 0CF4              brge X12
 046A ADC0              xjmp L15
 046C           X12:
 046C           ;              {
 046C           ;                  Rt=((INT32U)0x0fffL<<16)|(temp|0xf000);
 046C 40E0              ldi R20,0
 046E 50E0              ldi R21,0
 0470 6FEF              ldi R22,255
 0472 7FE0              ldi R23,15
 0474 C101              movw R24,R2
 0476 906F              ori R25,240
 0478 1C01              movw R2,R24
 047A 4424              clr R4
 047C 5524              clr R5
 047E 242A              or R2,R20
 0480 352A              or R3,R21
 0482 462A              or R4,R22
 0484 572A              or R5,R23
 0486 FE01              movw R30,R28
 0488 2682              std z+6,R2
 048A 3782              std z+7,R3
 048C 4086              std z+8,R4
 048E 5186              std z+9,R5
 0490           ;              }
 0490           ;              break ;
 0490 9AC0              xjmp L15
 0492           L26:
 0492           ;         case FAT16 :
 0492           ;              temp=Buf[ByteIndex]|((INT16U)Buf[ByteIndex+1]<<8);
 0492 F701              movw R30,R14
 0494 3196              adiw R30,1
 0496 EC0D              add R30,R12
 0498 FD1D              adc R31,R13
 049A 2080              ldd R2,z+0
 049C 3324              clr R3
 049E 322C              mov R3,R2
 04A0 2224              clr R2
 04A2 F701              movw R30,R14
 04A4 EC0D              add R30,R12
 04A6 FD1D              adc R31,R13
 04A8 A080              ldd R10,z+0
 04AA BB24              clr R11
 04AC A228              or R10,R2
 04AE B328              or R11,R3
 04B0           ;              Rt=temp ;
 04B0 1501              movw R2,R10
 04B2 4424              clr R4
 04B4 5524              clr R5
 04B6 FE01              movw R30,R28
 04B8 2682              std z+6,R2
 04BA 3782              std z+7,R3
 04BC 4086              std z+8,R4
 04BE 5186              std z+9,R5
 04C0           ;              /* 是否有特殊意义 */
 04C0           ;              if(temp>=(BAD_CLUS&0xffff))
 04C0 47EF              ldi R20,247
 04C2 5FEF              ldi R21,255
 04C4 60E0              ldi R22,0
 04C6 70E0              ldi R23,0
 04C8 4424              clr R4
 04CA 5524              clr R5
 04CC 2416              cp R2,R20
 04CE 3506              cpc R3,R21
 04D0 4606              cpc R4,R22
 04D2 5706              cpc R5,R23
 04D4 0CF4              brge X13
 04D6 77C0              xjmp L15
 04D8           X13:
 04D8           ;              {
 04D8           ;                  Rt=((INT32U)0x0fffL<<16)|temp ;
 04D8 40E0              ldi R20,0
 04DA 50E0              ldi R21,0
 04DC 6FEF              ldi R22,255
 04DE 7FE0              ldi R23,15
 04E0 4424              clr R4
 04E2 5524              clr R5
 04E4 242A              or R2,R20
 04E6 352A              or R3,R21
 04E8 462A              or R4,R22
 04EA 572A              or R5,R23
 04EC FE01              movw R30,R28
 04EE 2682              std z+6,R2
 04F0 3782              std z+7,R3
 04F2 4086              std z+8,R4
 04F4 5186              std z+9,R5
 04F6           ;              }
 04F6           ;              break ;
 04F6 67C0              xjmp L15
 04F8           L29:
 04F8           ;         case FAT32 :
 04F8           ;              Rt=Buf[ByteIndex]|((INT32U)Buf[ByteIndex+1]<<8);
 04F8 F701              movw R30,R14
 04FA 3196              adiw R30,1
 04FC EC0D              add R30,R12
 04FE FD1D              adc R31,R13
 0500 2080              ldd R2,z+0
 0502 3324              clr R3
 0504 4424              clr R4
 0506 5524              clr R5
 0508 88E0              ldi R24,8
 050A 90E0              ldi R25,0
 050C 8A93              st -y,R24
 050E 8101              movw R16,R2
 0510 9201              movw R18,R4
 0512 0E940000          xcall lsl32
 0516 F701              movw R30,R14
 0518 EC0D              add R30,R12
 051A FD1D              adc R31,R13
 051C 2080              ldd R2,z+0
 051E 3324              clr R3
 0520 4424              clr R4
 0522 5524              clr R5
 0524 202A              or R2,R16
 0526 312A              or R3,R17
 0528 422A              or R4,R18
 052A 532A              or R5,R19
 052C FE01              movw R30,R28
 052E 2682              std z+6,R2
 0530 3782              std z+7,R3
 0532 4086              std z+8,R4
 0534 5186              std z+9,R5
 0536           ;              Rt|=((INT32U)Buf[ByteIndex+2]<<16)|((INT32U)Buf[ByteIndex+3]<<24);
 0536 F701              movw R30,R14
 0538 3396              adiw R30,3
 053A EC0D              add R30,R12
 053C FD1D              adc R31,R13
 053E 2080              ldd R2,z+0
 0540 3324              clr R3
 0542 4424              clr R4
 0544 5524              clr R5
 0546 88E1              ldi R24,24
 0548 90E0              ldi R25,0
 054A 8A93              st -y,R24
 054C 8101              movw R16,R2
 054E 9201              movw R18,R4
 0550 0E940000          xcall lsl32
 0554 F701              movw R30,R14
 0556 3296              adiw R30,2
 0558 EC0D              add R30,R12
 055A FD1D              adc R31,R13
 055C 2080              ldd R2,z+0
 055E 3324              clr R3
 0560 4424              clr R4
 0562 5524              clr R5
 0564 2101              movw R4,R2
 0566 2224              clr R2
 0568 3324              clr R3
 056A 202A              or R2,R16
 056C 312A              or R3,R17
 056E 422A              or R4,R18
 0570 532A              or R5,R19
 0572 FE01              movw R30,R28
 0574 6680              ldd R6,z+6
 0576 7780              ldd R7,z+7
 0578 8084              ldd R8,z+8
 057A 9184              ldd R9,z+9
 057C 6228              or R6,R2
 057E 7328              or R7,R3
 0580 8428              or R8,R4
 0582 9528              or R9,R5
 0584 FE01              movw R30,R28
 0586 6682              std z+6,R6
 0588 7782              std z+7,R7
 058A 8086              std z+8,R8
 058C 9186              std z+9,R9
 058E           ;              Rt=Rt&0x0fffffff ;
 058E 4FEF              ldi R20,255
 0590 5FEF              ldi R21,255
 0592 6FEF              ldi R22,255
 0594 7FE0              ldi R23,15
 0596 FE01              movw R30,R28
 0598 2680              ldd R2,z+6
 059A 3780              ldd R3,z+7
 059C 4084              ldd R4,z+8
 059E 5184              ldd R5,z+9
 05A0 2422              and R2,R20
 05A2 3522              and R3,R21
 05A4 4622              and R4,R22
 05A6 5722              and R5,R23
 05A8 FE01              movw R30,R28
 05AA 2682              std z+6,R2
 05AC 3782              std z+7,R3
 05AE 4086              std z+8,R4
 05B0 5186              std z+9,R5
 05B2           ;              break ;
 05B2 09C0              xjmp L15
 05B4           L14:
 05B4           ;         default :
 05B4           ;              Rt=BAD_CLUS ;
 05B4 47EF              ldi R20,247
 05B6 5FEF              ldi R21,255
 05B8 6FEF              ldi R22,255
 05BA 7FE0              ldi R23,15
 05BC FE01              movw R30,R28
 05BE 4683              std z+6,R20
 05C0 5783              std z+7,R21
 05C2 6087              std z+8,R22
 05C4 7187              std z+9,R23
 05C6           ;              break ;
 05C6           L15:
 05C6           ;     }
 05C6           ;     CloseSec(Drive,SecIndex);
 05C6 FE01              movw R30,R28
 05C8 2280              ldd R2,z+2
 05CA 3380              ldd R3,z+3
 05CC 4480              ldd R4,z+4
 05CE 5580              ldd R5,z+5
 05D0 4882              std y+0,R4
 05D2 5982              std y+1,R5
 05D4 9101              movw R18,R2
 05D6 0E89              ldd R16,y+22
 05D8 0E940000          xcall _CloseSec
 05DC           ;     return Rt ;
 05DC FE01              movw R30,R28
 05DE 0681              ldd R16,z+6
 05E0 1781              ldd R17,z+7
 05E2 2085              ldd R18,z+8
 05E4 3185              ldd R19,z+9
 05E6           L1:
 05E6 2C96              adiw R28,12
 05E8 0E940000          xcall pop_gset5
 05EC 2496              adiw R28,4
 05EE                   .dbline 0 ; func end
 05EE 0895              ret
 05F0           ;           temp -> R12,R13
 05F0           ;      ByteIndex -> R10,R11
 05F0           ;            Buf -> R14,R15
 05F0           ;       SecIndex -> y+4
 05F0           ;           Disk -> y+2
 05F0           ;           Next -> y+22
 05F0           ;          Index -> y+18
 05F0           ;          Drive -> y+16
                        .even
 05F0           _FATSetNextClus::
 05F0 0E940000          xcall push_arg4
 05F4 0E940000          xcall push_gset5
 05F8 2697              sbiw R28,6
 05FA           ; }
 05FA           ; 
 05FA           ; /*********************************************************************************************************
 05FA           ; ** 函数名称: FATSetNextClus
 05FA           ; ** 功能描述: 设置下一个簇
 05FA           ; **
 05FA           ; ** 输 入: Drive:驱动器号
 05FA           ; **        Index:簇号
 05FA           ; **        Next:下一个簇号
 05FA           ; ** 输 出: 无
 05FA           ; **
 05FA           ; ** 全局变量: 无
 05FA           ; ** 调用模块: 无
 05FA           ; **
 05FA           ; ** 作 者: 陈明计
 05FA           ; ** 日 期: 2003年9月6日
 05FA           ; **-------------------------------------------------------------------------------------------------------
 05FA           ; ** 修改人: 陈明计
 05FA           ; ** 日 期: 2004年4月10日
 05FA           ; **------------------------------------------------------------------------------------------------------
 05FA           ; ********************************************************************************************************/
 05FA           ; void FATSetNextClus(INT8U Drive,INT32U Index,INT32U Next)
 05FA           ; {
 05FA           ;     INT16U temp ;
 05FA           ;     INT16U SecIndex,ByteIndex ;
 05FA           ;     INT8U *Buf ;
 05FA           ;     Disk_Info *Disk ;
 05FA           ;     
 05FA           ;     Disk=GetDiskInfo(Drive);
 05FA 0889              ldd R16,y+16
 05FC 0E940000          xcall _GetDiskInfo
 0600 1B83              std y+3,R17
 0602 0A83              std y+2,R16
 0604           ;     if(Disk==NULL)
 0604 0801              movw R0,R16
 0606 0030              cpi R16,0
 0608 0107              cpc R16,R17
 060A 09F4              brne L31
 060C           X14:
 060C           ;     {
 060C           ;         return ;
 060C C5C2              xjmp L30
 060E           L31:
 060E           ;     }
 060E           ;     if(Index<=EMPTY_CLUS_1)
 060E 41E0              ldi R20,1
 0610 50E0              ldi R21,0
 0612 60E0              ldi R22,0
 0614 70E0              ldi R23,0
 0616 FE01              movw R30,R28
 0618 2288              ldd R2,z+18
 061A 3388              ldd R3,z+19
 061C 4488              ldd R4,z+20
 061E 5588              ldd R5,z+21
 0620 4215              cp R20,R2
 0622 5305              cpc R21,R3
 0624 6405              cpc R22,R4
 0626 7505              cpc R23,R5
 0628 08F0              brlo L33
 062A           ;     {
 062A           ;         return ;
 062A B6C2              xjmp L30
 062C           L33:
 062C           ;     }
 062C           ;     
 062C           ;     if(Index>=Disk->ClusPerData)
 062C EA81              ldd R30,y+2
 062E FB81              ldd R31,y+3
 0630 20A0              ldd R2,z+32
 0632 31A0              ldd R3,z+33
 0634 42A0              ldd R4,z+34
 0636 53A0              ldd R5,z+35
 0638 FE01              movw R30,R28
 063A 6288              ldd R6,z+18
 063C 7388              ldd R7,z+19
 063E 8488              ldd R8,z+20
 0640 9588              ldd R9,z+21
 0642 6214              cp R6,R2
 0644 7304              cpc R7,R3
 0646 8404              cpc R8,R4
 0648 9504              cpc R9,R5
 064A 08F0              brlo L35
 064C           ;     {
 064C           ;         return ;
 064C A5C2              xjmp L30
 064E           L35:
 064E           ;     }
 064E           ;     
 064E           ;     /* 计算扇区号和字节索引 */
 064E           ;     switch(Disk->FATType)
 064E EA81              ldd R30,y+2
 0650 FB81              ldd R31,y+3
 0652 A180              ldd R10,z+1
 0654 BB24              clr R11

⌨️ 快捷键说明

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