📄 output.lss
字号:
CopyNbyte(Buf, pFDT->Name, 11); /* 名字 */
6a8: 4b e0 ldi r20, 0x0B ; 11
6aa: 50 e0 ldi r21, 0x00 ; 0
6ac: b7 01 movw r22, r14
6ae: ce 01 movw r24, r28
6b0: 0e 94 30 09 call 0x1260
SET_UINT16(Buf, 26, pFDT->FstClusLO); /* 首簇号 */
6b4: f7 01 movw r30, r14
6b6: 84 85 ldd r24, Z+12 ; 0x0c
6b8: 8a 8f std Y+26, r24 ; 0x1a
6ba: 84 85 ldd r24, Z+12 ; 0x0c
6bc: 95 85 ldd r25, Z+13 ; 0x0d
6be: 89 2f mov r24, r25
6c0: 99 27 eor r25, r25
6c2: 8b 8f std Y+27, r24 ; 0x1b
SET_UINT16(Buf, 28, pFDT->FileSize); /* 大小 */
6c4: 86 85 ldd r24, Z+14 ; 0x0e
6c6: 8c 8f std Y+28, r24 ; 0x1c
6c8: 86 85 ldd r24, Z+14 ; 0x0e
6ca: 97 85 ldd r25, Z+15 ; 0x0f
6cc: a0 89 ldd r26, Z+16 ; 0x10
6ce: b1 89 ldd r27, Z+17 ; 0x11
6d0: 89 2f mov r24, r25
6d2: 9a 2f mov r25, r26
6d4: ab 2f mov r26, r27
6d6: bb 27 eor r27, r27
6d8: 8d 8f std Y+29, r24 ; 0x1d
WriteSector(); /* 写扇区 */
6da: 0e 94 bf 00 call 0x17e
return TRUE;
6de: 81 e0 ldi r24, 0x01 ; 1
6e0: 90 e0 ldi r25, 0x00 ; 0
6e2: df 91 pop r29
6e4: cf 91 pop r28
6e6: 1f 91 pop r17
6e8: 0f 91 pop r16
6ea: ff 90 pop r15
6ec: ef 90 pop r14
6ee: 08 95 ret
000006f0 <_Z14GetFreeRootFDTv>:
}
/*
;*****************************************************************************************************
;* 函数名称 : GetFreeRootFDT
;* 描 述 : 分配一个空闲根目录项
;* 输 入 : 无
;*
;* 输 出 : 目录项索引
;*****************************************************************************************************
;*/
uint16 GetFreeRootFDT(void)
{
6f0: 0f 93 push r16
6f2: 1f 93 push r17
6f4: cf 93 push r28
6f6: df 93 push r29
6f8: cd b7 in r28, 0x3d ; 61
6fa: de b7 in r29, 0x3e ; 62
6fc: 62 97 sbiw r28, 0x12 ; 18
6fe: 0f b6 in r0, 0x3f ; 63
700: f8 94 cli
702: de bf out 0x3e, r29 ; 62
704: 0f be out 0x3f, r0 ; 63
706: cd bf out 0x3d, r28 ; 61
uint16 i;
FDT pFDT;
for (i = 0; i < MAX_FDT_NUM; i++)
708: 00 e0 ldi r16, 0x00 ; 0
70a: 10 e0 ldi r17, 0x00 ; 0
70c: 80 91 c9 03 lds r24, 0x03C9
710: 90 91 ca 03 lds r25, 0x03CA
714: 08 17 cp r16, r24
716: 19 07 cpc r17, r25
718: 70 f4 brcc .+28 ; 0x736
{
ReadRootFDTInfo(i, &pFDT); /* 读取第i个根目录项 */
71a: be 01 movw r22, r28
71c: 6f 5f subi r22, 0xFF ; 255
71e: 7f 4f sbci r23, 0xFF ; 255
720: c8 01 movw r24, r16
722: 0e 94 c8 02 call 0x590
if (pFDT.Name[0] == 0xE5 || pFDT.Name[0] == 0x00) /* 空闲 */
726: 89 81 ldd r24, Y+1 ; 0x01
728: 85 3e cpi r24, 0xE5 ; 229
72a: 29 f0 breq .+10 ; 0x736
72c: 88 23 and r24, r24
72e: 19 f0 breq .+6 ; 0x736
730: 0f 5f subi r16, 0xFF ; 255
732: 1f 4f sbci r17, 0xFF ; 255
734: eb cf rjmp .-42 ; 0x70c
{
break;
}
}
return i; /* 返回目录项索引 */
}
736: c8 01 movw r24, r16
738: 62 96 adiw r28, 0x12 ; 18
73a: 0f b6 in r0, 0x3f ; 63
73c: f8 94 cli
73e: de bf out 0x3e, r29 ; 62
740: 0f be out 0x3f, r0 ; 63
742: cd bf out 0x3d, r28 ; 61
744: df 91 pop r29
746: cf 91 pop r28
748: 1f 91 pop r17
74a: 0f 91 pop r16
74c: 08 95 ret
0000074e <_Z14FileNameChangePcS_>:
/*
;*****************************************************************************************************
;* 函数名称 : FileNameChange
;* 描 述 : 将外部文件名转化为内部文件名
;* 输 入 : NameStr: 外部文件名, Filename: 内部文件名
;*
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 FileNameChange(char *NameStr, char Filename[11])
{
74e: dc 01 movw r26, r24
uint8 i, z;
uint8 extp = 0, len= 0;
750: 30 e0 ldi r19, 0x00 ; 0
752: 43 2f mov r20, r19
uint8 ch;
if (NameStr == NULL)
754: 00 97 sbiw r24, 0x00 ; 0
756: 09 f4 brne .+2 ; 0x75a
{
return FALSE;
758: 08 95 ret
}
/* 名首不能为空格和'.'及空 */
ch = *NameStr;
75a: 2c 91 ld r18, X
if (ch == ' ' || ch == '.' || ch == '\0')
75c: 20 32 cpi r18, 0x20 ; 32
75e: 01 f1 breq .+64 ; 0x7a0
760: 2e 32 cpi r18, 0x2E ; 46
762: f1 f0 breq .+60 ; 0x7a0
764: 22 23 and r18, r18
766: e1 f0 breq .+56 ; 0x7a0
{
return FALSE;
}
while ( (len < 11) && ((ch = *NameStr) != '\0') )
{
switch (ch)
768: 82 2f mov r24, r18
76a: 99 27 eor r25, r25
76c: 8f 32 cpi r24, 0x2F ; 47
76e: 91 05 cpc r25, r1
770: b9 f0 breq .+46 ; 0x7a0
772: 80 33 cpi r24, 0x30 ; 48
774: 91 05 cpc r25, r1
776: 54 f4 brge .+20 ; 0x78c
778: 82 32 cpi r24, 0x22 ; 34
77a: 91 05 cpc r25, r1
77c: 89 f0 breq .+34 ; 0x7a0
77e: 82 32 cpi r24, 0x22 ; 34
780: 91 05 cpc r25, r1
782: 8c f0 brlt .+34 ; 0x7a6
784: 8a 97 sbiw r24, 0x2a ; 42
786: 03 97 sbiw r24, 0x03 ; 3
788: 70 f4 brcc .+28 ; 0x7a6
78a: 0a c0 rjmp .+20 ; 0x7a0
78c: 8a 33 cpi r24, 0x3A ; 58
78e: 91 05 cpc r25, r1
790: 54 f0 brlt .+20 ; 0x7a6
792: 80 34 cpi r24, 0x40 ; 64
794: 91 05 cpc r25, r1
796: 24 f0 brlt .+8 ; 0x7a0
798: 8b 55 subi r24, 0x5B ; 91
79a: 90 40 sbci r25, 0x00 ; 0
79c: 02 97 sbiw r24, 0x02 ; 2
79e: 18 f4 brcc .+6 ; 0x7a6
{
case 0x22:
case 0x2A:
case 0x2B:
case 0x2C:
case 0x2F:
case 0x3A:
case 0x3B:
case 0x3C:
case 0x3D:
case 0x3E:
case 0x3F:
case 0x5B:
case 0x5C:
return FALSE;
7a0: 80 e0 ldi r24, 0x00 ; 0
7a2: 90 e0 ldi r25, 0x00 ; 0
7a4: 08 95 ret
}
/* 小写转大写 */
if (ch >= 'a' && ch <= 'z')
7a6: 82 2f mov r24, r18
7a8: 81 56 subi r24, 0x61 ; 97
7aa: 8a 31 cpi r24, 0x1A ; 26
7ac: 08 f4 brcc .+2 ; 0x7b0
{
ch -= 'a' - 'A';
7ae: 20 52 subi r18, 0x20 ; 32
}
/* 找到第一个扩展名标识'.' */
if (ch == '.' && extp == 0)
7b0: 2e 32 cpi r18, 0x2E ; 46
7b2: 19 f4 brne .+6 ; 0x7ba
7b4: 44 23 and r20, r20
7b6: 09 f4 brne .+2 ; 0x7ba
{
extp = len; /* 记下它的位置 */
7b8: 43 2f mov r20, r19
}
Filename[len] = ch; /* 记录 */
7ba: fb 01 movw r30, r22
7bc: e3 0f add r30, r19
7be: f1 1d adc r31, r1
7c0: 20 83 st Z, r18
len++;
7c2: 3f 5f subi r19, 0xFF ; 255
NameStr++;
7c4: 11 96 adiw r26, 0x01 ; 1
7c6: 3b 30 cpi r19, 0x0B ; 11
7c8: 18 f4 brcc .+6 ; 0x7d0
7ca: 2c 91 ld r18, X
7cc: 22 23 and r18, r18
7ce: 61 f6 brne .-104 ; 0x768
}
if (extp != 0) /* 有扩展名 */
7d0: 44 23 and r20, r20
7d2: e9 f0 breq .+58 ; 0x80e
{
i = len - 1; /* 名字末字节位置 */
7d4: 93 2f mov r25, r19
7d6: 91 50 subi r25, 0x01 ; 1
/* 将扩展名移到最后 */
for (z = 10; i > extp; i--, z--)
7d8: 2a e0 ldi r18, 0x0A ; 10
7da: 49 17 cp r20, r25
7dc: 68 f4 brcc .+26 ; 0x7f8
7de: db 01 movw r26, r22
7e0: a9 0f add r26, r25
7e2: b1 1d adc r27, r1
{
Filename[z] = Filename[i];
7e4: fb 01 movw r30, r22
7e6: e2 0f add r30, r18
7e8: f1 1d adc r31, r1
7ea: 8c 91 ld r24, X
7ec: 11 97 sbiw r26, 0x01 ; 1
7ee: 80 83 st Z, r24
7f0: 91 50 subi r25, 0x01 ; 1
7f2: 21 50 subi r18, 0x01 ; 1
7f4: 49 17 cp r20, r25
7f6: b0 f3 brcs .-20 ; 0x7e4
}
/* 中间填入空格 */
for (; z >= extp; z--)
7f8: 24 17 cp r18, r20
7fa: a0 f0 brcs .+40 ; 0x824
7fc: 80 e2 ldi r24, 0x20 ; 32
{
Filename[z] = ' ';
7fe: fb 01 movw r30, r22
800: e2 0f add r30, r18
802: f1 1d adc r31, r1
804: 80 83 st Z, r24
806: 21 50 subi r18, 0x01 ; 1
808: 24 17 cp r18, r20
80a: c8 f7 brcc .-14 ; 0x7fe
80c: 0b c0 rjmp .+22 ; 0x824
}
}
else /* 无扩展名 */
{
i = len; /* 名字后的位置 */
80e: 93 2f mov r25, r19
for (; i < 11; i++) /* 余下的空间填入空格 */
810: 3b 30 cpi r19, 0x0B ; 11
812: 40 f4 brcc .+16 ; 0x824
814: 80 e2 ldi r24, 0x20 ; 32
816: fb 01 movw r30, r22
818: e3 0f add r30, r19
81a: f1 1d adc r31, r1
{
Filename[i] = ' ';
81c: 81 93 st Z+, r24
81e: 9f 5f subi r25, 0xFF ; 255
820: 9b 30 cpi r25, 0x0B ; 11
822: e0 f3 brcs .-8 ; 0x81c
}
}
return TRUE;
824: 81 e0 ldi r24, 0x01 ; 1
826: 90 e0 ldi r25, 0x00 ; 0
}
828: 08 95 ret
82a: 08 95 ret
0000082c <_Z18FindSYSNameRootFDTPcP4_FDT>:
/*
;*****************************************************************************************************
;* 函数名称 : FindSYSNameRootFDT
;* 描 述 : 查找指定内部名字的根目录项
;* 输 入 : Filename[11]: 内部文件名
;*
;* 输 出 : 目录项索引
;*****************************************************************************************************
;*/
uint16 FindSYSNameRootFDT(char Filename[11], FDT *pFDT)
{
82c: ef 92 push r14
82e: ff 92 push r15
830: 0f 93 push r16
832: 1f 93 push r17
834: cf 93 push r28
836: df 93 push r29
838: 7c 01 movw r14, r24
83a: 8b 01 movw r16, r22
uint16 i;
for (i = 0; i < MAX_FDT_NUM; i++)
83c: c0 e0 ldi r28, 0x00 ; 0
83e: d0 e0 ldi r29, 0x00 ; 0
840: 80 91 c9 03 lds r24, 0x03C9
844: 90 91 ca 03 lds r25, 0x03CA
848: c8 17 cp r28, r24
84a: d9 07 cpc r29, r25
84c: a8 f4 brcc .+42 ; 0x878
{
if (!ReadRootFDTInfo(i, pFDT)) /* 读取第i号根目录项 */
84e: b8 01 movw r22, r16
850: ce 01 movw r24, r28
852: 0e 94 c8 02 call 0x590
856: 88 23 and r24, r24
858: 29 f4 brne .+10 ; 0x864
{
return FDT_NO_FOUND;
85a: 80 91 c9 03 lds r24, 0x03C9
85e: 90 91 ca 03 lds r25, 0x03CA
862: 0b c0 rjmp .+22 ; 0x87a
}
if (IsEqual(Filename, pFDT->Name, 11)) /* 同名,找到 */
864: 4b e0 ldi r20, 0x0B ; 11
866: 50 e0 ldi r21, 0x00 ; 0
868: b8 01 movw r22, r16
86a: c7 01 movw r24, r14
86c: 0e 94 3b 09 call 0x1276
870: 88 23 and r24, r24
872: 11 f4 brne .+4 ; 0x878
874: 21 96 adiw r28, 0x01 ; 1
876: e4 cf rjmp .-56 ; 0x840
{
break;
}
}
return i;
878: ce 01 movw r24, r28
87a: df 91 pop r29
87c: cf 91 pop r28
87e: 1f 91 pop r17
880: 0f 91 pop r16
882: ff 90 pop r15
884: ef 90 pop r14
886: 08 95 ret
00000888 <_Z19FindUSERNameRootFDTPcP4_FDT>:
}
/*
;*****************************************************************************************************
;* 函数名称 : FindUSERNameRootFDT
;* 描 述 : 查找指定外部名字的根目录项
;* 输 入 : NameStr[11]: 外部文件名
;*
;* 输 出 : 目录项索引
;*****************************************************************************************************
;*/
uint16 FindUSERNameRootFDT(char NameStr[11], FDT *pFDT)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -