📄 output.lss
字号:
4ac: b8 01 movw r22, r16
}
4ae: cb 01 movw r24, r22
4b0: df 91 pop r29
4b2: cf 91 pop r28
4b4: 1f 91 pop r17
4b6: 0f 91 pop r16
4b8: 08 95 ret
000004ba <_Z10AddNewClusj>:
/*
;*****************************************************************************************************
;* 函数名称 : AddNewClus
;* 描 述 : 为指定簇链增加一个簇
;* 输 入 : ClusIndex: 簇号
;*
;* 输 出 : 下一簇号
;*****************************************************************************************************
;*/
uint16 AddNewClus(uint16 ClusIndex)
{
4ba: 0f 93 push r16
4bc: 1f 93 push r17
4be: cf 93 push r28
4c0: df 93 push r29
4c2: ec 01 movw r28, r24
uint16 NextClus, i;
if (ClusIndex >= FS_MaxClus) /* 簇号无效 */
4c4: 80 91 cb 03 lds r24, 0x03CB
4c8: 90 91 cc 03 lds r25, 0x03CC
4cc: c8 17 cp r28, r24
4ce: d9 07 cpc r29, r25
4d0: 98 f5 brcc .+102 ; 0x538
{
return BAD_CLUS;
}
if (ClusIndex > EMPTY_CLUS_1) /* 追加簇链 */
4d2: c2 30 cpi r28, 0x02 ; 2
4d4: d1 05 cpc r29, r1
4d6: 80 f0 brcs .+32 ; 0x4f8
{
/* 查找簇链尾 */
do
{
NextClus = GetNextClus(ClusIndex); /* 下一簇号 */
4d8: ce 01 movw r24, r28
4da: 0e 94 fc 01 call 0x3f8
4de: 9c 01 movw r18, r24
if (NextClus == BAD_CLUS) /* 当前簇为坏簇 */
4e0: 4f ef ldi r20, 0xFF ; 255
4e2: 87 3f cpi r24, 0xF7 ; 247
4e4: 94 07 cpc r25, r20
4e6: 31 f0 breq .+12 ; 0x4f4
{
return BAD_CLUS;
}
/* 到达簇链尾 */
if (NextClus >= EOF_CLUS_1 || NextClus <= EMPTY_CLUS_1)
4e8: 02 97 sbiw r24, 0x02 ; 2
4ea: 86 5f subi r24, 0xF6 ; 246
4ec: 9f 4f sbci r25, 0xFF ; 255
4ee: 30 f4 brcc .+12 ; 0x4fc
{
break;
}
ClusIndex = NextClus;
4f0: e9 01 movw r28, r18
} while (1);
4f2: f2 cf rjmp .-28 ; 0x4d8
4f4: bc 01 movw r22, r24
4f6: 22 c0 rjmp .+68 ; 0x53c
}
else /* 新建一个簇 */
{
ClusIndex = NEW_CLUS_CHAIN;
4f8: c0 e0 ldi r28, 0x00 ; 0
4fa: d0 e0 ldi r29, 0x00 ; 0
}
/* 查找一个空闲簇 */
for (i = EMPTY_CLUS_1 + 1; i < FS_MaxClus; i++)
4fc: 02 e0 ldi r16, 0x02 ; 2
4fe: 10 e0 ldi r17, 0x00 ; 0
500: 80 91 cb 03 lds r24, 0x03CB
504: 90 91 cc 03 lds r25, 0x03CC
508: 08 17 cp r16, r24
50a: 19 07 cpc r17, r25
50c: a8 f4 brcc .+42 ; 0x538
{
if (GetNextClus(i) == EMPTY_CLUS) /* 找到空闲簇 */
50e: c8 01 movw r24, r16
510: 0e 94 fc 01 call 0x3f8
514: 89 2b or r24, r25
516: 69 f4 brne .+26 ; 0x532
{
if (ClusIndex != NEW_CLUS_CHAIN) /* 追加簇链 */
518: 20 97 sbiw r28, 0x00 ; 0
51a: 21 f0 breq .+8 ; 0x524
{
SetNextClus(ClusIndex, i);
51c: b8 01 movw r22, r16
51e: ce 01 movw r24, r28
520: 0e 94 2b 02 call 0x456
}
SetNextClus(i, EOF_CLUS_END); /* 簇链尾 */
524: 6f ef ldi r22, 0xFF ; 255
526: 7f ef ldi r23, 0xFF ; 255
528: c8 01 movw r24, r16
52a: 0e 94 2b 02 call 0x456
return i;
52e: b8 01 movw r22, r16
530: 05 c0 rjmp .+10 ; 0x53c
532: 0f 5f subi r16, 0xFF ; 255
534: 1f 4f sbci r17, 0xFF ; 255
536: e4 cf rjmp .-56 ; 0x500
}
}
return BAD_CLUS;
538: 67 ef ldi r22, 0xF7 ; 247
53a: 7f ef ldi r23, 0xFF ; 255
}
53c: cb 01 movw r24, r22
53e: df 91 pop r29
540: cf 91 pop r28
542: 1f 91 pop r17
544: 0f 91 pop r16
546: 08 95 ret
00000548 <_Z12DelClusChainj>:
/*
;*****************************************************************************************************
;* 函数名称 : DelClusChain
;* 描 述 : 删除簇链
;* 输 入 : ClusIndex: 簇号
;*
;* 输 出 : 无
;*****************************************************************************************************
;*/
void DelClusChain(uint16 CurClus)
{
548: 0f 93 push r16
54a: 1f 93 push r17
54c: cf 93 push r28
54e: df 93 push r29
550: 8c 01 movw r16, r24
uint16 NextClus;
/* 簇号无效 */
if (CurClus >= FS_MaxClus)
552: 80 91 cb 03 lds r24, 0x03CB
556: 90 91 cc 03 lds r25, 0x03CC
55a: 08 17 cp r16, r24
55c: 19 07 cpc r17, r25
55e: 98 f4 brcc .+38 ; 0x586
{
return;
}
while (1)
{
NextClus = GetNextClus(CurClus); /* 获得当前簇的下一簇号 */
560: c8 01 movw r24, r16
562: 0e 94 fc 01 call 0x3f8
566: ec 01 movw r28, r24
if (NextClus == BAD_CLUS) /* 当前簇为坏簇 */
568: 87 5f subi r24, 0xF7 ; 247
56a: 9f 4f sbci r25, 0xFF ; 255
56c: 61 f0 breq .+24 ; 0x586
{
break;
}
SetNextClus(CurClus, EMPTY_CLUS); /* 释放当前簇 */
56e: 60 e0 ldi r22, 0x00 ; 0
570: 70 e0 ldi r23, 0x00 ; 0
572: c8 01 movw r24, r16
574: 0e 94 2b 02 call 0x456
if (NextClus >= EOF_CLUS_1 || NextClus <= EMPTY_CLUS_1) /* 结束或保留簇 */
578: ce 01 movw r24, r28
57a: 02 97 sbiw r24, 0x02 ; 2
57c: 86 5f subi r24, 0xF6 ; 246
57e: 9f 4f sbci r25, 0xFF ; 255
580: 10 f4 brcc .+4 ; 0x586
{
break;
}
CurClus = NextClus;
582: 8e 01 movw r16, r28
584: ed cf rjmp .-38 ; 0x560
586: df 91 pop r29
588: cf 91 pop r28
58a: 1f 91 pop r17
58c: 0f 91 pop r16
58e: 08 95 ret
00000590 <_Z15ReadRootFDTInfojP4_FDT>:
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 ReadRootFDTInfo(uint16 FDTIndex, FDT *pFDT)
{
590: ef 92 push r14
592: ff 92 push r15
594: 0f 93 push r16
596: 1f 93 push r17
598: cf 93 push r28
59a: df 93 push r29
59c: ac 01 movw r20, r24
59e: 7b 01 movw r14, r22
uint16 SecIndex, ByteOffset;
uint8 *Buf;
if (FDTIndex >= MAX_FDT_NUM) /* 索引无效 */
5a0: 80 91 c9 03 lds r24, 0x03C9
5a4: 90 91 ca 03 lds r25, 0x03CA
5a8: 48 17 cp r20, r24
5aa: 59 07 cpc r21, r25
5ac: 18 f0 brcs .+6 ; 0x5b4
{
return FALSE;
5ae: 60 e0 ldi r22, 0x00 ; 0
5b0: 70 e0 ldi r23, 0x00 ; 0
5b2: 43 c0 rjmp .+134 ; 0x63a
}
SecIndex = FDTIndex*32 / 512 + FS_RootDirStartSec;/* 扇区号 */
5b4: 75 e0 ldi r23, 0x05 ; 5
5b6: 44 0f add r20, r20
5b8: 55 1f adc r21, r21
5ba: 7a 95 dec r23
5bc: e1 f7 brne .-8 ; 0x5b6
5be: 9a 01 movw r18, r20
5c0: 23 2f mov r18, r19
5c2: 33 27 eor r19, r19
5c4: 26 95 lsr r18
5c6: 80 91 c7 03 lds r24, 0x03C7
5ca: 90 91 c8 03 lds r25, 0x03C8
5ce: 28 0f add r18, r24
5d0: 39 1f adc r19, r25
ByteOffset = FDTIndex*32 % 512; /* 字节偏移 */
5d2: 8a 01 movw r16, r20
5d4: 11 70 andi r17, 0x01 ; 1
Buf = OpenSector(SecIndex); /* 打开扇区 */
5d6: c9 01 movw r24, r18
5d8: aa 27 eor r26, r26
5da: bb 27 eor r27, r27
5dc: bc 01 movw r22, r24
5de: cd 01 movw r24, r26
5e0: 0e 94 74 00 call 0xe8
5e4: ec 01 movw r28, r24
if (Buf == NULL)
5e6: 00 97 sbiw r24, 0x00 ; 0
5e8: 11 f4 brne .+4 ; 0x5ee
{
return FALSE;
5ea: bc 01 movw r22, r24
5ec: 26 c0 rjmp .+76 ; 0x63a
}
Buf += ByteOffset; /* 调整扇区读写指针 */
5ee: c0 0f add r28, r16
5f0: d1 1f adc r29, r17
CopyNbyte(pFDT->Name, Buf, 11); /* 名字 */
5f2: 4b e0 ldi r20, 0x0B ; 11
5f4: 50 e0 ldi r21, 0x00 ; 0
5f6: be 01 movw r22, r28
5f8: c7 01 movw r24, r14
5fa: 0e 94 30 09 call 0x1260
pFDT->FstClusLO = GET_UINT16(Buf, 26); /* 首簇号 */
5fe: 8a 8d ldd r24, Y+26 ; 0x1a
600: 28 2f mov r18, r24
602: 33 27 eor r19, r19
604: 8b 8d ldd r24, Y+27 ; 0x1b
606: 99 27 eor r25, r25
608: 98 2f mov r25, r24
60a: 88 27 eor r24, r24
60c: 28 2b or r18, r24
60e: 39 2b or r19, r25
610: f7 01 movw r30, r14
612: 24 87 std Z+12, r18 ; 0x0c
614: 35 87 std Z+13, r19 ; 0x0d
pFDT->FileSize = GET_UINT16(Buf, 28); /* 大小 */
616: 8c 8d ldd r24, Y+28 ; 0x1c
618: 28 2f mov r18, r24
61a: 33 27 eor r19, r19
61c: 8d 8d ldd r24, Y+29 ; 0x1d
61e: 99 27 eor r25, r25
620: 98 2f mov r25, r24
622: 88 27 eor r24, r24
624: 28 2b or r18, r24
626: 39 2b or r19, r25
628: c9 01 movw r24, r18
62a: aa 27 eor r26, r26
62c: bb 27 eor r27, r27
62e: 86 87 std Z+14, r24 ; 0x0e
630: 97 87 std Z+15, r25 ; 0x0f
632: a0 8b std Z+16, r26 ; 0x10
634: b1 8b std Z+17, r27 ; 0x11
return TRUE;
636: 61 e0 ldi r22, 0x01 ; 1
638: 70 e0 ldi r23, 0x00 ; 0
}
63a: cb 01 movw r24, r22
63c: df 91 pop r29
63e: cf 91 pop r28
640: 1f 91 pop r17
642: 0f 91 pop r16
644: ff 90 pop r15
646: ef 90 pop r14
648: 08 95 ret
0000064a <_Z16WriteRootFDTInfojP4_FDT>:
/*
;*****************************************************************************************************
;* 函数名称 : WriteRootFDTInfo
;* 描 述 : 写指定根目录项
;* 输 入 : FDTIndex: 目录项索引, pFDT: 目录项指针
;*
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 WriteRootFDTInfo(uint16 FDTIndex, FDT *pFDT)
{
64a: ef 92 push r14
64c: ff 92 push r15
64e: 0f 93 push r16
650: 1f 93 push r17
652: cf 93 push r28
654: df 93 push r29
656: ac 01 movw r20, r24
658: 7b 01 movw r14, r22
uint16 SecIndex, ByteOffset;
uint8 *Buf;
if (FDTIndex >= MAX_FDT_NUM) /* 索引无效 */
65a: 80 91 c9 03 lds r24, 0x03C9
65e: 90 91 ca 03 lds r25, 0x03CA
662: 48 17 cp r20, r24
664: 59 07 cpc r21, r25
666: 18 f0 brcs .+6 ; 0x66e
{
return FALSE;
668: 80 e0 ldi r24, 0x00 ; 0
66a: 90 e0 ldi r25, 0x00 ; 0
66c: 3a c0 rjmp .+116 ; 0x6e2
}
SecIndex = FDTIndex*32 / 512 + FS_RootDirStartSec;/* 扇区号 */
66e: c5 e0 ldi r28, 0x05 ; 5
670: 44 0f add r20, r20
672: 55 1f adc r21, r21
674: ca 95 dec r28
676: e1 f7 brne .-8 ; 0x670
678: 9a 01 movw r18, r20
67a: 23 2f mov r18, r19
67c: 33 27 eor r19, r19
67e: 26 95 lsr r18
680: 80 91 c7 03 lds r24, 0x03C7
684: 90 91 c8 03 lds r25, 0x03C8
688: 28 0f add r18, r24
68a: 39 1f adc r19, r25
ByteOffset = FDTIndex*32 % 512; /* 字节偏移 */
68c: 8a 01 movw r16, r20
68e: 11 70 andi r17, 0x01 ; 1
Buf = OpenSector(SecIndex); /* 打开扇区 */
690: c9 01 movw r24, r18
692: aa 27 eor r26, r26
694: bb 27 eor r27, r27
696: bc 01 movw r22, r24
698: cd 01 movw r24, r26
69a: 0e 94 74 00 call 0xe8
69e: ec 01 movw r28, r24
if (Buf == NULL)
6a0: 00 97 sbiw r24, 0x00 ; 0
6a2: f9 f0 breq .+62 ; 0x6e2
{
return FALSE;
}
Buf += ByteOffset; /* 调整扇区读写指针 */
6a4: c0 0f add r28, r16
6a6: d1 1f adc r29, r17
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -