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

📄 output.lss

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