⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 output.lss

📁 protues仿真
💻 LSS
📖 第 1 页 / 共 5 页
字号:
{
     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 + -