📄 output.lss
字号:
{
888: 0f 93 push r16
88a: 1f 93 push r17
88c: cf 93 push r28
88e: df 93 push r29
890: cd b7 in r28, 0x3d ; 61
892: de b7 in r29, 0x3e ; 62
894: 2b 97 sbiw r28, 0x0b ; 11
896: 0f b6 in r0, 0x3f ; 63
898: f8 94 cli
89a: de bf out 0x3e, r29 ; 62
89c: 0f be out 0x3f, r0 ; 63
89e: cd bf out 0x3d, r28 ; 61
8a0: 8b 01 movw r16, r22
char Filename[11];
if (!FileNameChange(NameStr, Filename)) /* 将外部名字转化为内部名字 */
8a2: be 01 movw r22, r28
8a4: 6f 5f subi r22, 0xFF ; 255
8a6: 7f 4f sbci r23, 0xFF ; 255
8a8: 0e 94 a7 03 call 0x74e
8ac: 88 23 and r24, r24
8ae: 29 f4 brne .+10 ; 0x8ba
{
return FDT_NO_FOUND;
8b0: 80 91 c9 03 lds r24, 0x03C9
8b4: 90 91 ca 03 lds r25, 0x03CA
8b8: 05 c0 rjmp .+10 ; 0x8c4
}
return FindSYSNameRootFDT(Filename, pFDT); /* 查找内部名字的根目录项 */
8ba: b8 01 movw r22, r16
8bc: ce 01 movw r24, r28
8be: 01 96 adiw r24, 0x01 ; 1
8c0: 0e 94 16 04 call 0x82c
8c4: 2b 96 adiw r28, 0x0b ; 11
8c6: 0f b6 in r0, 0x3f ; 63
8c8: f8 94 cli
8ca: de bf out 0x3e, r29 ; 62
8cc: 0f be out 0x3f, r0 ; 63
8ce: cd bf out 0x3d, r28 ; 61
8d0: df 91 pop r29
8d2: cf 91 pop r28
8d4: 1f 91 pop r17
8d6: 0f 91 pop r16
8d8: 08 95 ret
000008da <_Z7FS_Initv>:
M_FILE pf = FileManage;
uint8 i;
/* 扇区缓存器初始化 */
Cache_Init();
8da: 0e 94 65 00 call 0xca
/* 文件管理器初始化 */
for (i = 0; i < MAX_FILE_OPEN; i++, pf++)
{
ClearNbyte((uint8 *)pf, sizeof(struct FileManageInfo));
8de: 6b e1 ldi r22, 0x1B ; 27
8e0: 70 e0 ldi r23, 0x00 ; 0
8e2: 8f ec ldi r24, 0xCF ; 207
8e4: 93 e0 ldi r25, 0x03 ; 3
8e6: 0e 94 50 09 call 0x12a0
}
/* 磁盘初始化 */
return Disk_Init();
8ea: 0e 94 de 00 call 0x1bc
}
8ee: 99 27 eor r25, r25
8f0: 08 95 ret
000008f2 <_Z14GetFreeFileManv>:
/*
;*****************************************************************************************************
;* 函数名称 : GetFreeFileMan
;* 描 述 : 分配空闲文件管理器
;* 输 入 : 无
;*
;* 输 出 : 文件指针
;*****************************************************************************************************
;*/
M_FILE GetFreeFileMan(void)
{
M_FILE pf = FileManage;
uint8 i;
for (i = 0; i < MAX_FILE_OPEN; i++, pf++)
{
if (pf->Flag == 0x00)
8f2: 80 91 e1 03 lds r24, 0x03E1
8f6: 88 23 and r24, r24
8f8: 31 f4 brne .+12 ; 0x906
{
pf->Flag = FILE_OPEN;
8fa: 81 e0 ldi r24, 0x01 ; 1
8fc: 80 93 e1 03 sts 0x03E1, r24
return pf;
900: 8f ec ldi r24, 0xCF ; 207
902: 93 e0 ldi r25, 0x03 ; 3
904: 08 95 ret
}
}
return ((M_FILE)0);
906: 80 e0 ldi r24, 0x00 ; 0
908: 90 e0 ldi r25, 0x00 ; 0
}
90a: 08 95 ret
90c: 08 95 ret
0000090e <_Z11_IsFileOpenPc>:
/*
;*****************************************************************************************************
;* 函数名称 : _IsFileOpen
;* 描 述 : 判断文件是否已打开
;* 输 入 : Filename[11]: 内部文件名
;*
;* 输 出 : 文件指针
;*****************************************************************************************************
;*/
M_FILE _IsFileOpen(char Filename[11])
{
90e: cf 93 push r28
910: df 93 push r29
912: bc 01 movw r22, r24
M_FILE pf = FileManage;
914: cf ec ldi r28, 0xCF ; 207
916: d3 e0 ldi r29, 0x03 ; 3
uint8 i;
for (i = 0; i < MAX_FILE_OPEN; i++, pf++)
{
if (pf->Flag & FILE_OPEN)
918: 80 91 e1 03 lds r24, 0x03E1
91c: 99 27 eor r25, r25
91e: 81 70 andi r24, 0x01 ; 1
920: 90 70 andi r25, 0x00 ; 0
922: 88 23 and r24, r24
924: 49 f0 breq .+18 ; 0x938
{
if (IsEqual(pf->fFDT.Name, Filename, 11))
926: 4b e0 ldi r20, 0x0B ; 11
928: 50 e0 ldi r21, 0x00 ; 0
92a: ce 01 movw r24, r28
92c: 0e 94 3b 09 call 0x1276
930: 88 23 and r24, r24
932: 11 f0 breq .+4 ; 0x938
{
return pf;
934: ce 01 movw r24, r28
936: 02 c0 rjmp .+4 ; 0x93c
}
}
}
return ((M_FILE)0);
938: 80 e0 ldi r24, 0x00 ; 0
93a: 90 e0 ldi r25, 0x00 ; 0
93c: df 91 pop r29
93e: cf 91 pop r28
940: 08 95 ret
00000942 <_Z10IsFileOpenPc>:
}
/*
;*****************************************************************************************************
;* 函数名称 : IsFileOpen
;* 描 述 : 判断文件是否已打开
;* 输 入 : NameStr[11]: 外部文件名
;*
;* 输 出 : 文件指针
;*****************************************************************************************************
;*/
M_FILE IsFileOpen(char NameStr[11])
{
942: cf 93 push r28
944: df 93 push r29
946: cd b7 in r28, 0x3d ; 61
948: de b7 in r29, 0x3e ; 62
94a: 2b 97 sbiw r28, 0x0b ; 11
94c: 0f b6 in r0, 0x3f ; 63
94e: f8 94 cli
950: de bf out 0x3e, r29 ; 62
952: 0f be out 0x3f, r0 ; 63
954: cd bf out 0x3d, r28 ; 61
char Filename[11];
/* 转化为内部文件名 */
if (!FileNameChange(NameStr, Filename))
956: be 01 movw r22, r28
958: 6f 5f subi r22, 0xFF ; 255
95a: 7f 4f sbci r23, 0xFF ; 255
95c: 0e 94 a7 03 call 0x74e
960: 88 23 and r24, r24
962: 19 f4 brne .+6 ; 0x96a
{
return ((M_FILE)0);
964: 80 e0 ldi r24, 0x00 ; 0
966: 90 e0 ldi r25, 0x00 ; 0
968: 04 c0 rjmp .+8 ; 0x972
}
return _IsFileOpen(Filename);
96a: ce 01 movw r24, r28
96c: 01 96 adiw r24, 0x01 ; 1
96e: 0e 94 87 04 call 0x90e
972: 2b 96 adiw r28, 0x0b ; 11
974: 0f b6 in r0, 0x3f ; 63
976: f8 94 cli
978: de bf out 0x3e, r29 ; 62
97a: 0f be out 0x3f, r0 ; 63
97c: cd bf out 0x3d, r28 ; 61
97e: df 91 pop r29
980: cf 91 pop r28
982: 08 95 ret
00000984 <_Z11FreeFileManP14FileManageInfo>:
}
/*
;*****************************************************************************************************
;* 函数名称 : FreeFileMan
;* 描 述 : 释放文件管理器
;* 输 入 : M_FILE: 文件指针
;*
;* 输 出 : 无
;*****************************************************************************************************
;*/
void FreeFileMan(M_FILE pf)
{
ClearNbyte((uint8 *)pf, sizeof(struct FileManageInfo));
984: 6b e1 ldi r22, 0x1B ; 27
986: 70 e0 ldi r23, 0x00 ; 0
988: 0e 94 50 09 call 0x12a0
98c: 08 95 ret
0000098e <_Z11_CreateFilePc>:
}
/*
;*****************************************************************************************************
;* 函数名称 : _CreateFile
;* 描 述 : 创建文件
;* 输 入 : Filename[11]: 内部文件名
;*
;* 输 出 : 文件目录项索引, MAX_FDT_NUM时为失败
;*****************************************************************************************************
;*/
uint16 _CreateFile(char Filename[11])
{
98e: cf 92 push r12
990: df 92 push r13
992: ef 92 push r14
994: ff 92 push r15
996: 0f 93 push r16
998: 1f 93 push r17
99a: cf 93 push r28
99c: df 93 push r29
99e: cd b7 in r28, 0x3d ; 61
9a0: de b7 in r29, 0x3e ; 62
9a2: 62 97 sbiw r28, 0x12 ; 18
9a4: 0f b6 in r0, 0x3f ; 63
9a6: f8 94 cli
9a8: de bf out 0x3e, r29 ; 62
9aa: 0f be out 0x3f, r0 ; 63
9ac: cd bf out 0x3d, r28 ; 61
9ae: 6c 01 movw r12, r24
FDT fFDT;
uint16 ClusIndex, FDTIndex;
/* 查看是否已存在该文件 */
if (FindSYSNameRootFDT(Filename, &fFDT) != FDT_NO_FOUND)
9b0: be 01 movw r22, r28
9b2: 6f 5f subi r22, 0xFF ; 255
9b4: 7f 4f sbci r23, 0xFF ; 255
9b6: 0e 94 16 04 call 0x82c
9ba: 20 91 c9 03 lds r18, 0x03C9
9be: 30 91 ca 03 lds r19, 0x03CA
9c2: 82 17 cp r24, r18
9c4: 93 07 cpc r25, r19
9c6: 11 f0 breq .+4 ; 0x9cc
{
return MAX_FDT_NUM;
9c8: c9 01 movw r24, r18
9ca: 34 c0 rjmp .+104 ; 0xa34
}
/* 建立簇链 */
ClusIndex = AddNewClus(EMPTY_CLUS);
9cc: 80 e0 ldi r24, 0x00 ; 0
9ce: 90 e0 ldi r25, 0x00 ; 0
9d0: 0e 94 5d 02 call 0x4ba
9d4: 7c 01 movw r14, r24
if (ClusIndex == BAD_CLUS)
9d6: 87 ef ldi r24, 0xF7 ; 247
9d8: e8 16 cp r14, r24
9da: 8f ef ldi r24, 0xFF ; 255
9dc: f8 06 cpc r15, r24
9de: 31 f1 breq .+76 ; 0xa2c
{
return MAX_FDT_NUM;
}
/* 获得一个空闲文件目录项 */
FDTIndex = GetFreeRootFDT();
9e0: 0e 94 78 03 call 0x6f0
9e4: 8c 01 movw r16, r24
if (FDTIndex == MAX_FDT_NUM)
9e6: 80 91 c9 03 lds r24, 0x03C9
9ea: 90 91 ca 03 lds r25, 0x03CA
9ee: 08 17 cp r16, r24
9f0: 19 07 cpc r17, r25
9f2: c1 f0 breq .+48 ; 0xa24
{
goto ERR;
}
/* 文件目录项名字 */
CopyNbyte(fFDT.Name, Filename, 11);
9f4: 4b e0 ldi r20, 0x0B ; 11
9f6: 50 e0 ldi r21, 0x00 ; 0
9f8: b6 01 movw r22, r12
9fa: ce 01 movw r24, r28
9fc: 01 96 adiw r24, 0x01 ; 1
9fe: 0e 94 30 09 call 0x1260
/* 文件目录项属性 */
fFDT.FstClusLO = ClusIndex;
a02: ed 86 std Y+13, r14 ; 0x0d
a04: fe 86 std Y+14, r15 ; 0x0e
fFDT.Attr = 0;
a06: 1c 86 std Y+12, r1 ; 0x0c
fFDT.FileSize = 0;
a08: 1f 86 std Y+15, r1 ; 0x0f
a0a: 18 8a std Y+16, r1 ; 0x10
a0c: 19 8a std Y+17, r1 ; 0x11
a0e: 1a 8a std Y+18, r1 ; 0x12
/* 写文件目录项 */
if (!WriteRootFDTInfo(FDTIndex, &fFDT))
a10: be 01 movw r22, r28
a12: 6f 5f subi r22, 0xFF ; 255
a14: 7f 4f sbci r23, 0xFF ; 255
a16: c8 01 movw r24, r16
a18: 0e 94 25 03 call 0x64a
a1c: 88 23 and r24, r24
a1e: 11 f0 breq .+4 ; 0xa24
{
goto ERR;
}
/* 返回文件目录项索引 */
return FDTIndex;
a20: c8 01 movw r24, r16
a22: 08 c0 rjmp .+16 ; 0xa34
ERR:
/* 出错, 删除簇链 */
DelClusChain(fFDT.FstClusLO);
a24: 8d 85 ldd r24, Y+13 ; 0x0d
a26: 9e 85 ldd r25, Y+14 ; 0x0e
a28: 0e 94 a4 02 call 0x548
return MAX_FDT_NUM;
a2c: 80 91 c9 03 lds r24, 0x03C9
a30: 90 91 ca 03 lds r25, 0x03CA
a34: 62 96 adiw r28, 0x12 ; 18
a36: 0f b6 in r0, 0x3f ; 63
a38: f8 94 cli
a3a: de bf out 0x3e, r29 ; 62
a3c: 0f be out 0x3f, r0 ; 63
a3e: cd bf out 0x3d, r28 ; 61
a40: df 91 pop r29
a42: cf 91 pop r28
a44: 1f 91 pop r17
a46: 0f 91 pop r16
a48: ff 90 pop r15
a4a: ef 90 pop r14
a4c: df 90 pop r13
a4e: cf 90 pop r12
a50: 08 95 ret
00000a52 <_Z10CreateFilePc>:
}
/*
;*****************************************************************************************************
;* 函数名称 : CreateFile
;* 描 述 : 创建文件
;* 输 入 : NameStr[11]: 文件名
;*
;* 输 出 : TRUE OR FALS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -