📄 file.lst
字号:
373:file.c ****
374:file.c **** if (fp->Offset >= fp->fFDT.FileSize)
805 .LM82:
806 0340 AF88 ldd r10,Y+23
807 0342 B88C ldd r11,Y+24
808 0344 C98C ldd r12,Y+25
809 0346 DA8C ldd r13,Y+26
810 0348 A816 cp r10,r24
811 034a B906 cpc r11,r25
812 034c CA06 cpc r12,r26
813 034e DB06 cpc r13,r27
814 0350 18F0 brlo .L64
815 .L67:
375:file.c **** {
376:file.c **** return '\0';
817 .LM83:
818 0352 80E0 ldi r24,lo8(0)
819 0354 90E0 ldi r25,hi8(0)
820 0356 4AC0 rjmp .L60
821 .L64:
377:file.c **** }
378:file.c ****
379:file.c **** ReadPoint = fp->Offset;
380:file.c ****
381:file.c **** /* 读写指针所在簇的开始扇区 */
382:file.c **** SecIndex = GetFristSecOfClus(fp->CurClus);
823 .LM84:
824 0358 8D89 ldd r24,Y+21
825 035a 9E89 ldd r25,Y+22
826 035c 0E94 0000 call _Z17GetFristSecOfClusj
827 0360 7B01 movw r14,r22
828 0362 8C01 movw r16,r24
383:file.c ****
384:file.c **** /* 读写指针的扇区偏移 */
385:file.c **** SecOffset = ReadPoint / 512;
830 .LM85:
831 0364 D601 movw r26,r12
832 0366 C501 movw r24,r10
833 0368 29E0 ldi r18,9
834 036a B695 1: lsr r27
835 036c A795 ror r26
836 036e 9795 ror r25
837 0370 8795 ror r24
838 0372 2A95 dec r18
839 0374 D1F7 brne 1b
386:file.c ****
387:file.c **** /* 读写指针所在扇区的簇内偏移 */
388:file.c **** SecOffset = SecOffset % FS_SecPerClus;
841 .LM86:
842 0376 2091 0000 lds r18,FS_SecPerClus
843 037a 3327 clr r19
844 037c 4427 clr r20
845 037e 5527 clr r21
846 0380 BC01 movw r22,r24
847 0382 CD01 movw r24,r26
848 0384 0E94 0000 call __udivmodsi4
849 0388 DC01 movw r26,r24
850 038a CB01 movw r24,r22
389:file.c ****
390:file.c **** /* 读写指针所在扇区号 */
391:file.c **** SecIndex = SecIndex + SecOffset;
852 .LM87:
853 038c E80E add r14,r24
854 038e F91E adc r15,r25
855 0390 0A1F adc r16,r26
856 0392 1B1F adc r17,r27
392:file.c ****
393:file.c **** /* 打开扇区 */
394:file.c **** Buf = OpenSector(SecIndex);
858 .LM88:
859 0394 C801 movw r24,r16
860 0396 B701 movw r22,r14
861 0398 0E94 0000 call _Z10OpenSectorm
395:file.c **** if (Buf == NULL)
863 .LM89:
864 039c 0097 sbiw r24,0
865 039e 31F1 breq .L60
396:file.c **** {
397:file.c **** return '\0';
398:file.c **** }
399:file.c ****
400:file.c **** /* 读写指针在所在扇区的字节偏移 */
401:file.c **** ByteOffset = ReadPoint % 512;
867 .LM90:
868 03a0 2FEF ldi r18,lo8(511)
869 03a2 31E0 ldi r19,hi8(511)
870 03a4 40E0 ldi r20,hlo8(511)
871 03a6 50E0 ldi r21,hhi8(511)
872 03a8 A222 and r10,r18
873 03aa B322 and r11,r19
874 03ac C422 and r12,r20
875 03ae D522 and r13,r21
876 03b0 F501 movw r30,r10
402:file.c ****
403:file.c **** /* 读数据 */
404:file.c **** ch = Buf[ByteOffset];
878 .LM91:
879 03b2 E80F add r30,r24
880 03b4 F91F adc r31,r25
881 03b6 E081 ld r30,Z
405:file.c ****
406:file.c **** /* 字节偏移加一 */
407:file.c **** if (fp->Offset < fp->fFDT.FileSize - 1)
883 .LM92:
884 03b8 8E85 ldd r24,Y+14
885 03ba 9F85 ldd r25,Y+15
886 03bc A889 ldd r26,Y+16
887 03be B989 ldd r27,Y+17
888 03c0 0197 sbiw r24,1
889 03c2 A109 sbc r26,__zero_reg__
890 03c4 B109 sbc r27,__zero_reg__
891 03c6 2F89 ldd r18,Y+23
892 03c8 388D ldd r19,Y+24
893 03ca 498D ldd r20,Y+25
894 03cc 5A8D ldd r21,Y+26
895 03ce 2817 cp r18,r24
896 03d0 3907 cpc r19,r25
897 03d2 4A07 cpc r20,r26
898 03d4 5B07 cpc r21,r27
899 03d6 40F4 brsh .L66
408:file.c **** {
409:file.c **** fp->Offset++;
901 .LM93:
902 03d8 2F5F subi r18,lo8(-(1))
903 03da 3F4F sbci r19,hi8(-(1))
904 03dc 4F4F sbci r20,hlo8(-(1))
905 03de 5F4F sbci r21,hhi8(-(1))
906 03e0 2F8B std Y+23,r18
907 03e2 388F std Y+24,r19
908 03e4 498F std Y+25,r20
909 03e6 5A8F std Y+26,r21
910 .L66:
410:file.c **** }
411:file.c **** return ch;
912 .LM94:
913 03e8 8E2F mov r24,r30
914 03ea 9927 clr r25
915 .L60:
916 .LBE20:
917 .LBE19:
918 /* epilogue: frame size=0 */
919 03ec DF91 pop r29
920 03ee CF91 pop r28
921 03f0 1F91 pop r17
922 03f2 0F91 pop r16
923 03f4 FF90 pop r15
924 03f6 EF90 pop r14
925 03f8 DF90 pop r13
926 03fa CF90 pop r12
927 03fc BF90 pop r11
928 03fe AF90 pop r10
929 0400 0895 ret
930 /* epilogue end (size=11) */
931 /* function uint8 GetchFile(FileManageInfo*) size 125 (104) */
942 .global _Z9PutchFileP14FileManageInfoh
944 _Z9PutchFileP14FileManageInfoh:
412:file.c **** }
413:file.c ****
414:file.c **** /*
415:file.c **** ;**************************************************************************************************
416:file.c **** ;* 函数名称 : PutchFile
417:file.c **** ;* 描 述 : 写一个字节到文件
418:file.c **** ;* 输 入 : fp: 文件指针; ch: 要写入的字节
419:file.c **** ;*
420:file.c **** ;* 输 出 : 要写入的字节
421:file.c **** ;**************************************************************************************************
422:file.c **** ;*/
423:file.c **** uint8 PutchFile(M_FILE fp, uint8 ch)
424:file.c **** {
946 .LM95:
947 /* prologue: frame size=0 */
948 0402 9F92 push r9
949 0404 AF92 push r10
950 0406 BF92 push r11
951 0408 CF92 push r12
952 040a DF92 push r13
953 040c EF92 push r14
954 040e FF92 push r15
955 0410 0F93 push r16
956 0412 1F93 push r17
957 0414 CF93 push r28
958 0416 DF93 push r29
959 /* prologue end (size=11) */
960 0418 EC01 movw r28,r24
961 041a 962E mov r9,r22
962 .LBB21:
963 .LBB22:
425:file.c **** uint8 *Buf;
426:file.c **** uint32 SecOffset;
427:file.c **** uint32 SecIndex;
428:file.c **** uint16 ByteOffset;
429:file.c **** uint16 ClusIndex;
430:file.c ****
431:file.c **** /* 参数无效 */
432:file.c **** if (!fp)
965 .LM96:
966 041c 0097 sbiw r24,0
967 041e 29F0 breq .L76
433:file.c **** {
434:file.c **** return '\0';
435:file.c **** }
436:file.c ****
437:file.c **** /* 判断文件是否已打开 */
438:file.c **** fp = IsFileOpen(fp->fFDT.Name);
969 .LM97:
970 0420 0E94 0000 call _Z10IsFileOpenPc
971 0424 EC01 movw r28,r24
439:file.c **** if (!fp)
973 .LM98:
974 0426 892B or r24,r25
975 0428 11F4 brne .L71
976 .L76:
440:file.c **** {
441:file.c **** return '\0';
978 .LM99:
979 042a CE01 movw r24,r28
980 042c 73C0 rjmp .L69
981 .L71:
442:file.c **** }
443:file.c ****
444:file.c **** /* 读写指针在所在扇区的字节偏移 */
445:file.c **** ByteOffset = fp->Offset % 512;
983 .LM100:
984 042e 2F89 ldd r18,Y+23
985 0430 388D ldd r19,Y+24
986 0432 498D ldd r20,Y+25
987 0434 5A8D ldd r21,Y+26
988 0436 DA01 movw r26,r20
989 0438 C901 movw r24,r18
990 043a 9170 andi r25,hi8(511)
991 043c A070 andi r26,hlo8(511)
992 043e B070 andi r27,hhi8(511)
993 0440 5C01 movw r10,r24
446:file.c ****
447:file.c **** /* 读写指针的扇区偏移 */
448:file.c **** SecOffset = fp->Offset / 512;
995 .LM101:
996 0442 69E0 ldi r22,9
997 0444 5695 1: lsr r21
998 0446 4795 ror r20
999 0448 3795 ror r19
1000 044a 2795 ror r18
1001 044c 6A95 dec r22
1002 044e D1F7 brne 1b
449:file.c ****
450:file.c **** /* 读写指针所在扇区的簇内偏移 */
451:file.c **** SecOffset = SecOffset % FS_SecPerClus;
1004 .LM102:
1005 0450 8091 0000 lds r24,FS_SecPerClus
1006 0454 E82E mov r14,r24
1007 0456 FF24 clr r15
1008 0458 0027 clr r16
1009 045a 1127 clr r17
1010 045c CA01 movw r24,r20
1011 045e B901 movw r22,r18
1012 0460 A801 movw r20,r16
1013 0462 9701 movw r18,r14
1014 0464 0E94 0000 call __udivmodsi4
1015 0468 7B01 movw r14,r22
1016 046a 8C01 movw r16,r24
452:file.c ****
453:file.c **** ClusIndex = fp->CurClus;
1018 .LM103:
1019 046c CD88 ldd r12,Y+21
1020 046e DE88 ldd r13,Y+22
454:file.c ****
455:file.c **** /* 读写指针所在簇的开始扇区 */
456:file.c **** SecIndex = GetFristSecOfClus(ClusIndex);
1022 .LM104:
1023 0470 C601 movw r24,r12
1024 0472 0E94 0000 call _Z17GetFristSecOfClusj
1025 0476 DC01 movw r26,r24
1026 0478 CB01 movw r24,r22
457:file.c ****
458:file.c **** /* 读写指针所在扇区号 */
459:file.c **** SecIndex = SecIndex + SecOffset;
1028 .LM105:
1029 047a 8E0D add r24,r14
1030 047c 9F1D adc r25,r15
1031 047e A01F adc r26,r16
1032 0480 B11F adc r27,r17
460:file.c ****
461:file.c **** /* 打开扇区 */
462:file.c **** Buf = OpenSector(SecIndex);
1034 .LM106:
1035 0482 BC01 movw r22,r24
1036 0484 CD01 movw r24,r26
1037 0486 0E94 0000 call _Z10OpenSectorm
1038 048a FC01 movw r30,r24
463:file.c **** if (Buf == NULL)
1040 .LM107:
1041 048c 0097 sbiw r24,0
1042 048e 09F4 brne .+2
1043 0490 41C0 rjmp .L69
464:file.c **** {
465:file.c **** return '\0';
466:file.c **** }
467:file.c ****
468:file.c **** /* 写数据 */
469:file.c **** Buf[ByteOffset] = ch;
1045 .LM108:
1046 0492 EA0D add r30,r10
1047 0494 FB1D adc r31,r11
1048 0496 9082 st Z,r9
470:file.c ****
471:file.c **** WriteSector();
1050 .LM109:
1051 0498 0E94 0000 call _Z11WriteSectorv
472:file.c ****
473:file.c **** /* 字节偏移加一 */
474:file.c **** fp->Offset++;
1053 .LM110:
1054 049c 8F89 ldd r24,Y+23
1055 049e 988D ldd r25,Y+24
1056 04a0 A98D ldd r26,Y+25
1057 04a2 BA8D ldd r27,Y+26
1058 04a4 0196 adiw r24,1
1059 04a6 A11D adc r26,__zero_reg__
1060 04a8 B11D adc r27,__zero_reg__
1061 04aa 8F8B std Y+23,r24
1062 04ac 988F std Y+24,r25
1063 04ae A98F std Y+25,r26
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -