📄 fat16.lst
字号:
740 /* epilogue end (size=9) */
741 /* function WriteFAT size 47 (30) */
746 .Lscope14:
748 .global GetEmptyDIR
750 GetEmptyDIR:
120:FAT16.c **** }
121:FAT16.c **** //-------------------------------------------------------------------------
122:FAT16.c **** uint16_t GetEmptyDIR(void){ //获取根目录中可以使用的一项
752 .LM67:
753 /* prologue: frame size=0 */
754 030e CF92 push r12
755 0310 DF92 push r13
756 0312 EF92 push r14
757 0314 FF92 push r15
758 0316 0F93 push r16
759 0318 1F93 push r17
760 031a CF93 push r28
761 031c DF93 push r29
762 /* prologue end (size=8) */
123:FAT16.c **** uint16_t i,DirSecCut,DirStart,m,ID=0;
764 .LM68:
765 031e 00E0 ldi r16,lo8(0)
766 0320 10E0 ldi r17,hi8(0)
124:FAT16.c ****
125:FAT16.c **** DirSecCut=GetDirSecCount();
768 .LM69:
769 0322 0E94 0000 call GetDirSecCount
770 0326 6C01 movw r12,r24
126:FAT16.c **** DirStart=DirStartSec();
772 .LM70:
773 0328 0E94 0000 call DirStartSec
127:FAT16.c **** for(i=0;i<DirSecCut;i++){
775 .LM71:
776 032c 7801 movw r14,r16
777 032e 0C15 cp r16,r12
778 0330 1D05 cpc r17,r13
779 0332 F0F4 brsh .L44
780 0334 EB01 movw r28,r22
781 .L54:
128:FAT16.c **** ReadFatBlock(DirStart+i);
783 .LM72:
784 0336 CE01 movw r24,r28
785 0338 AA27 clr r26
786 033a BB27 clr r27
787 033c BC01 movw r22,r24
788 033e CD01 movw r24,r26
789 0340 0E94 0000 call ReadFatBlock
790 0344 E0E0 ldi r30,lo8(BUFFER)
791 0346 F0E0 ldi r31,hi8(BUFFER)
792 .L53:
129:FAT16.c **** for(m=0;m<16;m++){
130:FAT16.c **** if(BUFFER[m*32]==0)return ID;
794 .LM73:
795 0348 8081 ld r24,Z
796 034a B096 adiw r30,32
797 034c 8823 tst r24
798 034e 81F0 breq .L44
131:FAT16.c **** if(BUFFER[m*32]==0xe5)return ID;
800 .LM74:
801 0350 853E cpi r24,lo8(-27)
802 0352 71F0 breq .L44
132:FAT16.c **** ID++;
804 .LM75:
805 0354 0F5F subi r16,lo8(-(1))
806 0356 1F4F sbci r17,hi8(-(1))
808 .LM76:
809 0358 80E0 ldi r24,hi8(BUFFER+480)
810 035a E030 cpi r30,lo8(BUFFER+480)
811 035c F807 cpc r31,r24
812 035e A1F3 breq .L53
813 0360 98F3 brlo .L53
815 .LM77:
816 0362 0894 sec
817 0364 E11C adc r14,__zero_reg__
818 0366 F11C adc r15,__zero_reg__
819 0368 2196 adiw r28,1
820 036a EC14 cp r14,r12
821 036c FD04 cpc r15,r13
822 036e 18F3 brlo .L54
823 .L44:
133:FAT16.c **** }
134:FAT16.c **** }
135:FAT16.c **** return ID;
136:FAT16.c **** }
825 .LM78:
826 0370 C801 movw r24,r16
827 /* epilogue: frame size=0 */
828 0372 DF91 pop r29
829 0374 CF91 pop r28
830 0376 1F91 pop r17
831 0378 0F91 pop r16
832 037a FF90 pop r15
833 037c EF90 pop r14
834 037e DF90 pop r13
835 0380 CF90 pop r12
836 0382 0895 ret
837 /* epilogue end (size=9) */
838 /* function GetEmptyDIR size 59 (42) */
845 .Lscope15:
850 .global GetFileID
852 GetFileID:
137:FAT16.c **** //-------------------------------------------------------------------------
138:FAT16.c **** //获得和文件名对应的目录
139:FAT16.c **** uint8_t GetFileID(uint8_t Name[11],DIR *ID,uint16_t *pIndex){
854 .LM79:
855 /* prologue: frame size=0 */
856 0384 6F92 push r6
857 0386 7F92 push r7
858 0388 8F92 push r8
859 038a 9F92 push r9
860 038c AF92 push r10
861 038e BF92 push r11
862 0390 CF92 push r12
863 0392 DF92 push r13
864 0394 EF92 push r14
865 0396 FF92 push r15
866 0398 0F93 push r16
867 039a 1F93 push r17
868 039c CF93 push r28
869 039e DF93 push r29
870 /* prologue end (size=14) */
871 03a0 4C01 movw r8,r24
872 03a2 3B01 movw r6,r22
873 03a4 7A01 movw r14,r20
140:FAT16.c **** uint16_t i,DirSecCut,DirStart,m;
141:FAT16.c ****
142:FAT16.c **** DirSecCut = GetDirSecCount();
875 .LM80:
876 03a6 0E94 0000 call GetDirSecCount
877 03aa 5C01 movw r10,r24
143:FAT16.c **** DirStart = DirStartSec();
879 .LM81:
880 03ac 0E94 0000 call DirStartSec
144:FAT16.c **** for(i=0,*pIndex=0;i<DirSecCut;i++){
882 .LM82:
883 03b0 CC24 clr r12
884 03b2 DD24 clr r13
885 03b4 F701 movw r30,r14
886 03b6 D182 std Z+1,r13
887 03b8 C082 st Z,r12
888 03ba CA14 cp r12,r10
889 03bc DB04 cpc r13,r11
890 03be 70F5 brsh .L70
891 03c0 8B01 movw r16,r22
892 .L68:
145:FAT16.c **** ReadFatBlock(DirStart+i);
894 .LM83:
895 03c2 C801 movw r24,r16
896 03c4 AA27 clr r26
897 03c6 BB27 clr r27
898 03c8 BC01 movw r22,r24
899 03ca CD01 movw r24,r26
900 03cc 0E94 0000 call ReadFatBlock
901 03d0 C0E0 ldi r28,lo8(BUFFER)
902 03d2 D0E0 ldi r29,hi8(BUFFER)
903 .L67:
146:FAT16.c **** for(m=0;m<16;m++){
147:FAT16.c **** if(IsEqual(Name,(uint8_t *)&((DIR*)&BUFFER[m*32])->FileName,11)){
905 .LM84:
906 03d4 4BE0 ldi r20,lo8(11)
907 03d6 BE01 movw r22,r28
908 03d8 C401 movw r24,r8
909 03da 0E94 0000 call IsEqual
910 03de 8823 tst r24
911 03e0 49F0 breq .L66
148:FAT16.c **** *ID = *((DIR*)&BUFFER[m*32]);
913 .LM85:
914 03e2 80E2 ldi r24,lo8(32)
915 03e4 F301 movw r30,r6
916 03e6 0990 ld __tmp_reg__,Y+
917 03e8 0192 st Z+,__tmp_reg__
918 03ea 8A95 dec r24
919 03ec E1F7 brne .-8
149:FAT16.c **** return 1; //找到对应的目录项,返回1.
921 .LM86:
922 03ee 81E0 ldi r24,lo8(1)
923 03f0 90E0 ldi r25,hi8(1)
924 03f2 16C0 rjmp .L59
925 .L66:
150:FAT16.c **** }
151:FAT16.c **** (*pIndex)++;
927 .LM87:
928 03f4 F701 movw r30,r14
929 03f6 8081 ld r24,Z
930 03f8 9181 ldd r25,Z+1
931 03fa 0196 adiw r24,1
932 03fc 9183 std Z+1,r25
933 03fe 8083 st Z,r24
934 0400 A096 adiw r28,32
936 .LM88:
937 0402 F0E0 ldi r31,hi8(BUFFER+480)
938 0404 C030 cpi r28,lo8(BUFFER+480)
939 0406 DF07 cpc r29,r31
940 0408 29F3 breq .L67
941 040a 20F3 brlo .L67
943 .LM89:
944 040c 0894 sec
945 040e C11C adc r12,__zero_reg__
946 0410 D11C adc r13,__zero_reg__
947 0412 0F5F subi r16,lo8(-(1))
948 0414 1F4F sbci r17,hi8(-(1))
949 0416 CA14 cp r12,r10
950 0418 DB04 cpc r13,r11
951 041a 98F2 brlo .L68
952 .L70:
152:FAT16.c **** }
153:FAT16.c **** }
154:FAT16.c **** return 0; //没有找到对应的目录项,返回0.
954 .LM90:
955 041c 80E0 ldi r24,lo8(0)
956 041e 90E0 ldi r25,hi8(0)
957 .L59:
958 /* epilogue: frame size=0 */
959 0420 DF91 pop r29
960 0422 CF91 pop r28
961 0424 1F91 pop r17
962 0426 0F91 pop r16
963 0428 FF90 pop r15
964 042a EF90 pop r14
965 042c DF90 pop r13
966 042e CF90 pop r12
967 0430 BF90 pop r11
968 0432 AF90 pop r10
969 0434 9F90 pop r9
970 0436 8F90 pop r8
971 0438 7F90 pop r7
972 043a 6F90 pop r6
973 043c 0895 ret
974 /* epilogue end (size=15) */
975 /* function GetFileID size 93 (64) */
981 .Lscope16:
983 .global GetNextFAT
985 GetNextFAT:
155:FAT16.c **** }
156:FAT16.c **** //-------------------------------------------------------------------------
157:FAT16.c **** uint16_t GetNextFAT(void){ //获取一个空的FAT项
987 .LM91:
988 /* prologue: frame size=0 */
989 043e 0F93 push r16
990 0440 1F93 push r17
991 0442 CF93 push r28
992 0444 DF93 push r29
993 /* prologue end (size=4) */
158:FAT16.c **** uint16_t FAT_Count,i;
159:FAT16.c **** FAT_Count=BPB_FATSz16*256; //FAT表总项数
995 .LM92:
996 0446 8091 0000 lds r24,BPB_FATSz16
997 044a 9091 0000 lds r25,(BPB_FATSz16)+1
998 044e 182F mov r17,r24
999 0450 0027 clr r16
160:FAT16.c **** for(i=0;i<FAT_Count;i++){
1001 .LM93:
1002 0452 C0E0 ldi r28,lo8(0)
1003 0454 D0E0 ldi r29,hi8(0)
1004 .L81:
1006 .LM94:
1007 0456 C017 cp r28,r16
1008 0458 D107 cpc r29,r17
1009 045a 48F4 brsh .L80
161:FAT16.c **** if(ReadFAT(i)==0)return i;
1011 .LM95:
1012 045c CE01 movw r24,r28
1013 045e 0E94 0000 call ReadFAT
1014 0462 892B or r24,r25
1015 0464 11F4 brne .L76
1016 0466 CE01 movw r24,r28
1017 0468 04C0 rjmp .L73
1018 .L76:
1020 .LM96:
1021 046a 2196 adiw r28,1
1022 046c F4CF rjmp .L81
1023 .L80:
162:FAT16.c **** }
163:FAT16.c **** return 0;
1025 .LM97:
1026 046e 80E0 ldi r24,lo8(0)
1027 0470 90E0 ldi r25,hi8(0)
1028 .L73:
1029 /* epilogue: frame size=0 */
1030 0472 DF91 pop r29
1031 0474 CF91 pop r28
1032 0476 1F91 pop r17
1033 0478 0F91 pop r16
1034 047a 0895 ret
1035 /* epilogue end (size=5) */
1036 /* function GetNextFAT size 31 (22) */
1042 .Lscope17:
1046 .global ReadDIR
1048 ReadDIR:
164:FAT16.c **** }
165:FAT16.c **** //-------------------------------------------------------------------------
166:FAT16.c **** void ReadDIR(uint16_t Index, DIR* Value){ //读取根目录的指定项
1050 .LM98:
1051 /* prologue: frame size=0 */
1052 047c EF92 push r14
1053 047e FF92 push r15
1054 0480 0F93 push r16
1055 0482 1F93 push r17
1056 /* prologue end (size=4) */
1057 0484 8C01 movw r16,r24
1058 0486 7B01 movw r14,r22
167:FAT16.c **** uint32_t LBA = DirStartSec()+Index/16;
1060 .LM99:
1061 0488 0E94 0000 call DirStartSec
1062 048c 9B01 movw r18,r22
1063 048e AC01 movw r20,r24
1064 0490 C801 movw r24,r16
1065 0492 F4E0 ldi r31,4
1066 0494 9695 1: lsr r25
1067 0496 8795 ror r24
1068 0498 FA95 dec r31
1069 049a E1F7 brne 1b
1070 049c AA27 clr r26
1071 049e BB27 clr r27
1072 04a0 820F add r24,r18
1073 04a2 931F adc r25,r19
1074 04a4 A41F adc r26,r20
1075 04a6 B51F adc r27,r21
168:FAT16.c **** ReadFatBlock(LBA);
1077 .LM100:
1078 04a8 BC01 movw r22,r24
1079 04aa CD01 movw r24,r26
1080 04ac 0E94 0000 call ReadFatBlock
169:FAT16.c **** CopyBytes((uint8_t *)&BUFFER[(Index%16)*32],(uint8_t *)Value,32);
1082 .LM101:
1083 04b0 0F70 andi r16,lo8(15)
1084 04b2 1070 andi r17,hi8(15)
1085 04b4 E5E0 ldi r30,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -