📄 fat16.lst
字号:
401 .LM33:
402 011a 60E0 ldi r22,lo8(0)
403 011c 70E0 ldi r23,hi8(0)
404 011e 80E0 ldi r24,hlo8(0)
405 0120 90E0 ldi r25,hhi8(0)
406 0122 0E94 0000 call ReadFatBlock
73:FAT16.c **** if(ok==SD_FAIL)return SD_FAIL;
408 .LM34:
409 0126 8130 cpi r24,lo8(1)
410 0128 19F4 brne .L37
412 .LM35:
413 012a 81E0 ldi r24,lo8(1)
414 012c 90E0 ldi r25,hi8(1)
415 012e 0895 ret
416 .L37:
74:FAT16.c ****
75:FAT16.c **** //获取参数
76:FAT16.c **** BPB_BytesPerSec = BPB->BPB_BytesPerSec;
418 .LM36:
419 0130 8091 0000 lds r24,BUFFER+11
420 0134 9091 0000 lds r25,(BUFFER+11)+1
421 0138 9093 0000 sts (BPB_BytesPerSec)+1,r25
422 013c 8093 0000 sts BPB_BytesPerSec,r24
77:FAT16.c **** BPB_SecPerClus = BPB->BPB_SecPerClus;
424 .LM37:
425 0140 8091 0000 lds r24,BUFFER+13
426 0144 8093 0000 sts BPB_SecPerClus,r24
78:FAT16.c **** BPB_RsvdSecCnt = BPB->BPB_RsvdSecCnt;
428 .LM38:
429 0148 8091 0000 lds r24,BUFFER+14
430 014c 9091 0000 lds r25,(BUFFER+14)+1
431 0150 9093 0000 sts (BPB_RsvdSecCnt)+1,r25
432 0154 8093 0000 sts BPB_RsvdSecCnt,r24
79:FAT16.c **** BPB_NumFATs = BPB->BPB_NumFATs;
434 .LM39:
435 0158 8091 0000 lds r24,BUFFER+16
436 015c 8093 0000 sts BPB_NumFATs,r24
80:FAT16.c **** BPB_RootEntCnt = BPB->BPB_RootEntCnt;
438 .LM40:
439 0160 8091 0000 lds r24,BUFFER+17
440 0164 9091 0000 lds r25,(BUFFER+17)+1
441 0168 9093 0000 sts (BPB_RootEntCnt)+1,r25
442 016c 8093 0000 sts BPB_RootEntCnt,r24
81:FAT16.c **** BPB_TotSec16 = BPB->BPB_TotSec16;
444 .LM41:
445 0170 8091 0000 lds r24,BUFFER+19
446 0174 9091 0000 lds r25,(BUFFER+19)+1
447 0178 9093 0000 sts (BPB_TotSec16)+1,r25
448 017c 8093 0000 sts BPB_TotSec16,r24
82:FAT16.c **** BPB_FATSz16 = BPB->BPB_FATSz16;
450 .LM42:
451 0180 8091 0000 lds r24,BUFFER+22
452 0184 9091 0000 lds r25,(BUFFER+22)+1
453 0188 9093 0000 sts (BPB_FATSz16)+1,r25
454 018c 8093 0000 sts BPB_FATSz16,r24
83:FAT16.c **** BPB_HiddSec = BPB->BPB_HiddSec;
456 .LM43:
457 0190 8091 0000 lds r24,BUFFER+28
458 0194 9091 0000 lds r25,(BUFFER+28)+1
459 0198 A091 0000 lds r26,(BUFFER+28)+2
460 019c B091 0000 lds r27,(BUFFER+28)+3
461 01a0 8093 0000 sts BPB_HiddSec,r24
462 01a4 9093 0000 sts (BPB_HiddSec)+1,r25
463 01a8 A093 0000 sts (BPB_HiddSec)+2,r26
464 01ac B093 0000 sts (BPB_HiddSec)+3,r27
84:FAT16.c **** return SD_SUCC;
466 .LM44:
467 01b0 80E0 ldi r24,lo8(0)
468 01b2 90E0 ldi r25,hi8(0)
85:FAT16.c **** }
470 .LM45:
471 01b4 0895 ret
472 /* epilogue: frame size=0 */
473 /* epilogue: noreturn */
474 /* epilogue end (size=0) */
475 /* function ReadBPB size 78 (78) */
477 .Lscope8:
479 .global DirStartSec
481 DirStartSec:
86:FAT16.c **** //-------------------------------------------------------------------------
87:FAT16.c **** uint32_t DirStartSec(void){ //获取根目录开始扇区号
483 .LM46:
484 /* prologue: frame size=0 */
485 /* prologue end (size=0) */
88:FAT16.c **** return BPB_RsvdSecCnt+BPB_NumFATs*BPB_FATSz16;
487 .LM47:
488 01b6 8091 0000 lds r24,BPB_NumFATs
489 01ba 282F mov r18,r24
490 01bc 3327 clr r19
491 01be 8091 0000 lds r24,BPB_FATSz16
492 01c2 9091 0000 lds r25,(BPB_FATSz16)+1
493 01c6 289F mul r18,r24
494 01c8 A001 movw r20,r0
495 01ca 299F mul r18,r25
496 01cc 500D add r21,r0
497 01ce 389F mul r19,r24
498 01d0 500D add r21,r0
499 01d2 1124 clr r1
500 01d4 8091 0000 lds r24,BPB_RsvdSecCnt
501 01d8 9091 0000 lds r25,(BPB_RsvdSecCnt)+1
502 01dc 840F add r24,r20
503 01de 951F adc r25,r21
504 01e0 AA27 clr r26
505 01e2 BB27 clr r27
89:FAT16.c **** }
507 .LM48:
508 01e4 BC01 movw r22,r24
509 01e6 CD01 movw r24,r26
510 /* epilogue: frame size=0 */
511 01e8 0895 ret
512 /* epilogue end (size=1) */
513 /* function DirStartSec size 26 (25) */
515 .Lscope9:
517 .global GetDirSecCount
519 GetDirSecCount:
90:FAT16.c **** //-------------------------------------------------------------------------
91:FAT16.c **** uint16_t GetDirSecCount(void){ //目录项占用的扇区数
521 .LM49:
522 /* prologue: frame size=0 */
523 /* prologue end (size=0) */
92:FAT16.c **** return BPB_RootEntCnt*32/BPB_BytesPerSec;
525 .LM50:
526 01ea 8091 0000 lds r24,BPB_RootEntCnt
527 01ee 9091 0000 lds r25,(BPB_RootEntCnt)+1
528 01f2 2091 0000 lds r18,BPB_BytesPerSec
529 01f6 3091 0000 lds r19,(BPB_BytesPerSec)+1
530 01fa 45E0 ldi r20,5
531 01fc 880F 1: lsl r24
532 01fe 991F rol r25
533 0200 4A95 dec r20
534 0202 E1F7 brne 1b
535 0204 B901 movw r22,r18
536 0206 0E94 0000 call __udivmodhi4
537 020a CB01 movw r24,r22
538 /* epilogue: frame size=0 */
539 020c 0895 ret
540 /* epilogue end (size=1) */
541 /* function GetDirSecCount size 18 (17) */
543 .Lscope10:
545 .global DataStartSec
547 DataStartSec:
93:FAT16.c **** }
94:FAT16.c **** //-------------------------------------------------------------------------
95:FAT16.c **** uint32_t DataStartSec(void){ //获取数据区开始扇区号
549 .LM51:
550 /* prologue: frame size=0 */
551 020e EF92 push r14
552 0210 FF92 push r15
553 0212 0F93 push r16
554 0214 1F93 push r17
555 /* prologue end (size=4) */
96:FAT16.c **** return DirStartSec()+GetDirSecCount();
557 .LM52:
558 0216 0E94 0000 call DirStartSec
559 021a 7B01 movw r14,r22
560 021c 8C01 movw r16,r24
561 021e 0E94 0000 call GetDirSecCount
562 0222 AA27 clr r26
563 0224 BB27 clr r27
564 0226 8E0D add r24,r14
565 0228 9F1D adc r25,r15
566 022a A01F adc r26,r16
567 022c B11F adc r27,r17
97:FAT16.c **** }
569 .LM53:
570 022e BC01 movw r22,r24
571 0230 CD01 movw r24,r26
572 /* epilogue: frame size=0 */
573 0232 1F91 pop r17
574 0234 0F91 pop r16
575 0236 FF90 pop r15
576 0238 EF90 pop r14
577 023a 0895 ret
578 /* epilogue end (size=5) */
579 /* function DataStartSec size 23 (14) */
581 .Lscope11:
584 .global ClusConvLBA
586 ClusConvLBA:
98:FAT16.c **** //-------------------------------------------------------------------------
99:FAT16.c **** uint32_t ClusConvLBA(uint16_t ClusID){ //获取一个簇的开始扇区
588 .LM54:
589 /* prologue: frame size=0 */
590 023c 0F93 push r16
591 023e 1F93 push r17
592 /* prologue end (size=2) */
593 0240 8C01 movw r16,r24
100:FAT16.c **** return DataStartSec()+BPB_SecPerClus*(ClusID-2);
595 .LM55:
596 0242 0E94 0000 call DataStartSec
597 0246 9B01 movw r18,r22
598 0248 AC01 movw r20,r24
599 024a 8091 0000 lds r24,BPB_SecPerClus
600 024e 9927 clr r25
601 0250 0250 subi r16,lo8(-(-2))
602 0252 1040 sbci r17,hi8(-(-2))
603 0254 809F mul r24,r16
604 0256 B001 movw r22,r0
605 0258 819F mul r24,r17
606 025a 700D add r23,r0
607 025c 909F mul r25,r16
608 025e 700D add r23,r0
609 0260 1124 clr r1
610 0262 CB01 movw r24,r22
611 0264 AA27 clr r26
612 0266 BB27 clr r27
613 0268 820F add r24,r18
614 026a 931F adc r25,r19
615 026c A41F adc r26,r20
616 026e B51F adc r27,r21
101:FAT16.c **** }
618 .LM56:
619 0270 BC01 movw r22,r24
620 0272 CD01 movw r24,r26
621 /* epilogue: frame size=0 */
622 0274 1F91 pop r17
623 0276 0F91 pop r16
624 0278 0895 ret
625 /* epilogue end (size=3) */
626 /* function ClusConvLBA size 31 (26) */
628 .Lscope12:
631 .global ReadFAT
633 ReadFAT:
102:FAT16.c **** //-------------------------------------------------------------------------
103:FAT16.c **** uint16_t ReadFAT(uint16_t Index){ //读取文件分配表的指定项
635 .LM57:
636 /* prologue: frame size=0 */
637 027a 0F93 push r16
638 027c 1F93 push r17
639 /* prologue end (size=2) */
640 027e 8C01 movw r16,r24
104:FAT16.c **** uint16_t *RAM=(uint16_t*)BUFFER;
105:FAT16.c **** uint32_t SecID;
106:FAT16.c ****
107:FAT16.c **** SecID=BPB_RsvdSecCnt+Index/256;
642 .LM58:
643 0280 292F mov r18,r25
644 0282 3327 clr r19
645 0284 8091 0000 lds r24,BPB_RsvdSecCnt
646 0288 9091 0000 lds r25,(BPB_RsvdSecCnt)+1
647 028c 820F add r24,r18
648 028e 931F adc r25,r19
649 0290 AA27 clr r26
650 0292 BB27 clr r27
108:FAT16.c **** ReadFatBlock(SecID);
652 .LM59:
653 0294 BC01 movw r22,r24
654 0296 CD01 movw r24,r26
655 0298 0E94 0000 call ReadFatBlock
109:FAT16.c **** return RAM[Index%256];
657 .LM60:
658 029c 1070 andi r17,hi8(255)
659 029e 000F add r16,r16
660 02a0 111F adc r17,r17
661 02a2 0050 subi r16,lo8(-(BUFFER))
662 02a4 1040 sbci r17,hi8(-(BUFFER))
110:FAT16.c **** }
664 .LM61:
665 02a6 F801 movw r30,r16
666 02a8 8081 ld r24,Z
667 02aa 9181 ldd r25,Z+1
668 /* epilogue: frame size=0 */
669 02ac 1F91 pop r17
670 02ae 0F91 pop r16
671 02b0 0895 ret
672 /* epilogue end (size=3) */
673 /* function ReadFAT size 29 (24) */
678 .Lscope13:
682 .global WriteFAT
684 WriteFAT:
111:FAT16.c **** //-------------------------------------------------------------------------
112:FAT16.c **** void WriteFAT(uint16_t Index,uint16_t Value){ //写文件分配表的指定项
686 .LM62:
687 /* prologue: frame size=0 */
688 02b2 AF92 push r10
689 02b4 BF92 push r11
690 02b6 CF92 push r12
691 02b8 DF92 push r13
692 02ba EF92 push r14
693 02bc FF92 push r15
694 02be 0F93 push r16
695 02c0 1F93 push r17
696 /* prologue end (size=8) */
697 02c2 8C01 movw r16,r24
698 02c4 5B01 movw r10,r22
113:FAT16.c **** uint16_t *RAM=(uint16_t*)BUFFER;
114:FAT16.c **** uint32_t SecID;
115:FAT16.c ****
116:FAT16.c **** SecID=BPB_RsvdSecCnt+Index/256;
700 .LM63:
701 02c6 292F mov r18,r25
702 02c8 3327 clr r19
703 02ca 8091 0000 lds r24,BPB_RsvdSecCnt
704 02ce 9091 0000 lds r25,(BPB_RsvdSecCnt)+1
705 02d2 820F add r24,r18
706 02d4 931F adc r25,r19
707 02d6 6C01 movw r12,r24
708 02d8 EE24 clr r14
709 02da FF24 clr r15
117:FAT16.c **** ReadFatBlock(SecID);
711 .LM64:
712 02dc C701 movw r24,r14
713 02de B601 movw r22,r12
714 02e0 0E94 0000 call ReadFatBlock
118:FAT16.c **** RAM[Index%256]=Value;
716 .LM65:
717 02e4 1070 andi r17,hi8(255)
718 02e6 000F add r16,r16
719 02e8 111F adc r17,r17
720 02ea 0050 subi r16,lo8(-(BUFFER))
721 02ec 1040 sbci r17,hi8(-(BUFFER))
722 02ee F801 movw r30,r16
723 02f0 B182 std Z+1,r11
724 02f2 A082 st Z,r10
119:FAT16.c **** WriteFatBlock(SecID);
726 .LM66:
727 02f4 C701 movw r24,r14
728 02f6 B601 movw r22,r12
729 02f8 0E94 0000 call WriteFatBlock
730 /* epilogue: frame size=0 */
731 02fc 1F91 pop r17
732 02fe 0F91 pop r16
733 0300 FF90 pop r15
734 0302 EF90 pop r14
735 0304 DF90 pop r13
736 0306 CF90 pop r12
737 0308 BF90 pop r11
738 030a AF90 pop r10
739 030c 0895 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -