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

📄 output.lss

📁 protues仿真
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     254:	39 2b       	or	r19, r25
     256:	49 01       	movw	r8, r18
     258:	aa 24       	eor	r10, r10
     25a:	bb 24       	eor	r11, r11
	if (FATSz == 0)
     25c:	81 14       	cp	r8, r1
     25e:	91 04       	cpc	r9, r1
     260:	a1 04       	cpc	r10, r1
     262:	b1 04       	cpc	r11, r1
     264:	41 f5       	brne	.+80     	; 0x2b6
	FATSz				= GET_UINT32(Buf, BPB_FATSz32);
     266:	84 a1       	ldd	r24, Z+36	; 0x24
     268:	88 2e       	mov	r8, r24
     26a:	99 24       	eor	r9, r9
     26c:	aa 24       	eor	r10, r10
     26e:	bb 24       	eor	r11, r11
     270:	85 a1       	ldd	r24, Z+37	; 0x25
     272:	99 27       	eor	r25, r25
     274:	aa 27       	eor	r26, r26
     276:	bb 27       	eor	r27, r27
     278:	ba 2f       	mov	r27, r26
     27a:	a9 2f       	mov	r26, r25
     27c:	98 2f       	mov	r25, r24
     27e:	88 27       	eor	r24, r24
     280:	88 2a       	or	r8, r24
     282:	99 2a       	or	r9, r25
     284:	aa 2a       	or	r10, r26
     286:	bb 2a       	or	r11, r27
     288:	86 a1       	ldd	r24, Z+38	; 0x26
     28a:	99 27       	eor	r25, r25
     28c:	aa 27       	eor	r26, r26
     28e:	bb 27       	eor	r27, r27
     290:	dc 01       	movw	r26, r24
     292:	99 27       	eor	r25, r25
     294:	88 27       	eor	r24, r24
     296:	88 2a       	or	r8, r24
     298:	99 2a       	or	r9, r25
     29a:	aa 2a       	or	r10, r26
     29c:	bb 2a       	or	r11, r27
     29e:	87 a1       	ldd	r24, Z+39	; 0x27
     2a0:	99 27       	eor	r25, r25
     2a2:	aa 27       	eor	r26, r26
     2a4:	bb 27       	eor	r27, r27
     2a6:	b8 2f       	mov	r27, r24
     2a8:	aa 27       	eor	r26, r26
     2aa:	99 27       	eor	r25, r25
     2ac:	88 27       	eor	r24, r24
     2ae:	88 2a       	or	r8, r24
     2b0:	99 2a       	or	r9, r25
     2b2:	aa 2a       	or	r10, r26
     2b4:	bb 2a       	or	r11, r27

	/* 根目录目录项数 */
	FS_RootEntCnt		= GET_UINT16(Buf, BPB_RootEntCnt);
     2b6:	f7 01       	movw	r30, r14
     2b8:	81 89       	ldd	r24, Z+17	; 0x11
     2ba:	08 2f       	mov	r16, r24
     2bc:	11 27       	eor	r17, r17
     2be:	82 89       	ldd	r24, Z+18	; 0x12
     2c0:	99 27       	eor	r25, r25
     2c2:	98 2f       	mov	r25, r24
     2c4:	88 27       	eor	r24, r24
     2c6:	08 2b       	or	r16, r24
     2c8:	19 2b       	or	r17, r25
     2ca:	10 93 ca 03 	sts	0x03CA, r17
     2ce:	00 93 c9 03 	sts	0x03C9, r16

	/* 根目录开始扇区 */
	FS_RootDirStartSec	= FS_FATStartSec + FATSz * NumFATs;
     2d2:	24 2f       	mov	r18, r20
     2d4:	33 27       	eor	r19, r19
     2d6:	44 27       	eor	r20, r20
     2d8:	55 27       	eor	r21, r21
     2da:	c5 01       	movw	r24, r10
     2dc:	b4 01       	movw	r22, r8
     2de:	0e 94 2d 0a 	call	0x145a
     2e2:	dc 01       	movw	r26, r24
     2e4:	cb 01       	movw	r24, r22
     2e6:	9c 01       	movw	r18, r24
     2e8:	2d 0d       	add	r18, r13
     2ea:	31 1d       	adc	r19, r1
     2ec:	30 93 c8 03 	sts	0x03C8, r19
     2f0:	20 93 c7 03 	sts	0x03C7, r18

	/* 根目录占扇区数 */
	RootSecCnt			= (FS_RootEntCnt * 32 + 511) / 512; 
     2f4:	95 e0       	ldi	r25, 0x05	; 5
     2f6:	00 0f       	add	r16, r16
     2f8:	11 1f       	adc	r17, r17
     2fa:	9a 95       	dec	r25
     2fc:	e1 f7       	brne	.-8      	; 0x2f6
     2fe:	01 50       	subi	r16, 0x01	; 1
     300:	1e 4f       	sbci	r17, 0xFE	; 254
     302:	01 2f       	mov	r16, r17
     304:	11 27       	eor	r17, r17
     306:	06 95       	lsr	r16
     308:	c8 01       	movw	r24, r16
     30a:	aa 27       	eor	r26, r26
     30c:	bb 27       	eor	r27, r27

	/* 数据区开始扇区 */
	FS_DataStartSec		= FS_RootDirStartSec + RootSecCnt;
     30e:	a9 01       	movw	r20, r18
     310:	66 27       	eor	r22, r22
     312:	77 27       	eor	r23, r23
     314:	48 0f       	add	r20, r24
     316:	59 1f       	adc	r21, r25
     318:	6a 1f       	adc	r22, r26
     31a:	7b 1f       	adc	r23, r27
     31c:	40 93 c3 03 	sts	0x03C3, r20
     320:	50 93 c4 03 	sts	0x03C4, r21
     324:	60 93 c5 03 	sts	0x03C5, r22
     328:	70 93 c6 03 	sts	0x03C6, r23

	/* 总扇区数 */
	TotSec				= GET_UINT16(Buf, BPB_TotSec16);
     32c:	f7 01       	movw	r30, r14
     32e:	83 89       	ldd	r24, Z+19	; 0x13
     330:	28 2f       	mov	r18, r24
     332:	33 27       	eor	r19, r19
     334:	84 89       	ldd	r24, Z+20	; 0x14
     336:	99 27       	eor	r25, r25
     338:	98 2f       	mov	r25, r24
     33a:	88 27       	eor	r24, r24
     33c:	28 2b       	or	r18, r24
     33e:	39 2b       	or	r19, r25
     340:	49 01       	movw	r8, r18
     342:	aa 24       	eor	r10, r10
     344:	bb 24       	eor	r11, r11
	if (TotSec == 0)
     346:	81 14       	cp	r8, r1
     348:	91 04       	cpc	r9, r1
     34a:	a1 04       	cpc	r10, r1
     34c:	b1 04       	cpc	r11, r1
     34e:	41 f5       	brne	.+80     	; 0x3a0
	TotSec				= GET_UINT32(Buf, BPB_TotSec32);
     350:	80 a1       	ldd	r24, Z+32	; 0x20
     352:	88 2e       	mov	r8, r24
     354:	99 24       	eor	r9, r9
     356:	aa 24       	eor	r10, r10
     358:	bb 24       	eor	r11, r11
     35a:	81 a1       	ldd	r24, Z+33	; 0x21
     35c:	99 27       	eor	r25, r25
     35e:	aa 27       	eor	r26, r26
     360:	bb 27       	eor	r27, r27
     362:	ba 2f       	mov	r27, r26
     364:	a9 2f       	mov	r26, r25
     366:	98 2f       	mov	r25, r24
     368:	88 27       	eor	r24, r24
     36a:	88 2a       	or	r8, r24
     36c:	99 2a       	or	r9, r25
     36e:	aa 2a       	or	r10, r26
     370:	bb 2a       	or	r11, r27
     372:	82 a1       	ldd	r24, Z+34	; 0x22
     374:	99 27       	eor	r25, r25
     376:	aa 27       	eor	r26, r26
     378:	bb 27       	eor	r27, r27
     37a:	dc 01       	movw	r26, r24
     37c:	99 27       	eor	r25, r25
     37e:	88 27       	eor	r24, r24
     380:	88 2a       	or	r8, r24
     382:	99 2a       	or	r9, r25
     384:	aa 2a       	or	r10, r26
     386:	bb 2a       	or	r11, r27
     388:	83 a1       	ldd	r24, Z+35	; 0x23
     38a:	99 27       	eor	r25, r25
     38c:	aa 27       	eor	r26, r26
     38e:	bb 27       	eor	r27, r27
     390:	b8 2f       	mov	r27, r24
     392:	aa 27       	eor	r26, r26
     394:	99 27       	eor	r25, r25
     396:	88 27       	eor	r24, r24
     398:	88 2a       	or	r8, r24
     39a:	99 2a       	or	r9, r25
     39c:	aa 2a       	or	r10, r26
     39e:	bb 2a       	or	r11, r27

	/* 每簇扇区数 */
	FS_SecPerClus		= Buf[BPB_SecPerClus];
     3a0:	f7 01       	movw	r30, r14
     3a2:	85 85       	ldd	r24, Z+13	; 0x0d
     3a4:	80 93 ce 03 	sts	0x03CE, r24

	/* 数据区簇数 */
	FS_MaxClus = (TotSec - FS_DataStartSec)/FS_SecPerClus;
     3a8:	84 1a       	sub	r8, r20
     3aa:	95 0a       	sbc	r9, r21
     3ac:	a6 0a       	sbc	r10, r22
     3ae:	b7 0a       	sbc	r11, r23
     3b0:	28 2f       	mov	r18, r24
     3b2:	33 27       	eor	r19, r19
     3b4:	44 27       	eor	r20, r20
     3b6:	55 27       	eor	r21, r21
     3b8:	c5 01       	movw	r24, r10
     3ba:	b4 01       	movw	r22, r8
     3bc:	0e 94 4c 0a 	call	0x1498
     3c0:	da 01       	movw	r26, r20
     3c2:	c9 01       	movw	r24, r18
     3c4:	30 93 cc 03 	sts	0x03CC, r19
     3c8:	20 93 cb 03 	sts	0x03CB, r18

#ifdef WINDOWS
	printf("FS INFO:\n");
	printf("FS_FATStartSec      = 0x%x\n", FS_FATStartSec);
	printf("NumFATs             = 0x%x\n", NumFATs);
	printf("FATSz               = 0x%x\n", FATSz);
	printf("FS_RootEntCnt       = 0x%x\n", FS_RootEntCnt);
	printf("FS_RootDirStartSec  = 0x%x\n", FS_RootDirStartSec);
	printf("RootSecCnt          = 0x%x\n", RootSecCnt);
	printf("FS_DataStartSec     = 0x%x\n", FS_DataStartSec);
	printf("TotSec              = 0x%x\n", TotSec);
	printf("FS_SecPerClus       = 0x%x\n", FS_SecPerClus);
	printf("FS_MaxClus          = 0x%x\n", FS_MaxClus);
#endif

	if (FS_MaxClus < 4085 || FS_MaxClus >= 65525)	/* 不支持FAT12和FAT32 */
     3cc:	85 5f       	subi	r24, 0xF5	; 245
     3ce:	9f 40       	sbci	r25, 0x0F	; 15
     3d0:	80 50       	subi	r24, 0x00	; 0
     3d2:	90 4f       	sbci	r25, 0xF0	; 240
     3d4:	18 f0       	brcs	.+6      	; 0x3dc
	{
#ifdef WINDOWS
	printf("FS TYPE	IS NOT FAT16!\n");
#endif
		return FALSE;
     3d6:	80 e0       	ldi	r24, 0x00	; 0
     3d8:	90 e0       	ldi	r25, 0x00	; 0
     3da:	02 c0       	rjmp	.+4      	; 0x3e0
	}
#ifdef WINDOWS
	printf("FS TYPE	IS FAT16\n");
#endif

	return TRUE;
     3dc:	81 e0       	ldi	r24, 0x01	; 1
     3de:	90 e0       	ldi	r25, 0x00	; 0
     3e0:	df 91       	pop	r29
     3e2:	cf 91       	pop	r28
     3e4:	1f 91       	pop	r17
     3e6:	0f 91       	pop	r16
     3e8:	ff 90       	pop	r15
     3ea:	ef 90       	pop	r14
     3ec:	df 90       	pop	r13
     3ee:	bf 90       	pop	r11
     3f0:	af 90       	pop	r10
     3f2:	9f 90       	pop	r9
     3f4:	8f 90       	pop	r8
     3f6:	08 95       	ret

000003f8 <_Z11GetNextClusj>:
;* 输 	 出 : 下一簇号
;*****************************************************************************************************
;*/
uint16 GetNextClus(uint16 ClusIndex)
{
     3f8:	cf 93       	push	r28
     3fa:	df 93       	push	r29
     3fc:	fc 01       	movw	r30, r24
	uint8 *Buf;
	uint16 ByteOffset, Value; 
	uint32 SecIndex;

	if (ClusIndex >= FS_MaxClus)					/* 簇号无效 */
     3fe:	80 91 cb 03 	lds	r24, 0x03CB
     402:	90 91 cc 03 	lds	r25, 0x03CC
     406:	e8 17       	cp	r30, r24
     408:	f9 07       	cpc	r31, r25
     40a:	90 f4       	brcc	.+36     	; 0x430
	{
		return BAD_CLUS;
	}

	SecIndex   = ClusIndex / 256 + FS_FATStartSec;	/* 扇区号	*/
     40c:	8f 2f       	mov	r24, r31
     40e:	99 27       	eor	r25, r25
     410:	20 91 cd 03 	lds	r18, 0x03CD
     414:	82 0f       	add	r24, r18
     416:	91 1d       	adc	r25, r1
     418:	aa 27       	eor	r26, r26
     41a:	bb 27       	eor	r27, r27
	ByteOffset = ClusIndex * 2 % 512;				/* 字节偏移 */
     41c:	ef 01       	movw	r28, r30
     41e:	ce 0f       	add	r28, r30
     420:	df 1f       	adc	r29, r31
     422:	d1 70       	andi	r29, 0x01	; 1

	Buf = OpenSector(SecIndex);						/* 打开扇区 */	
     424:	bc 01       	movw	r22, r24
     426:	cd 01       	movw	r24, r26
     428:	0e 94 74 00 	call	0xe8
	if (Buf == NULL)
     42c:	00 97       	sbiw	r24, 0x00	; 0
     42e:	19 f4       	brne	.+6      	; 0x436
	{
		return BAD_CLUS;
     430:	27 ef       	ldi	r18, 0xF7	; 247
     432:	3f ef       	ldi	r19, 0xFF	; 255
     434:	0c c0       	rjmp	.+24     	; 0x44e
	}

	Value = GET_UINT16(Buf, ByteOffset);			/* 获得下一簇号	*/	
     436:	fe 01       	movw	r30, r28
     438:	e8 0f       	add	r30, r24
     43a:	f9 1f       	adc	r31, r25
     43c:	80 81       	ld	r24, Z
     43e:	28 2f       	mov	r18, r24
     440:	33 27       	eor	r19, r19
     442:	81 81       	ldd	r24, Z+1	; 0x01
     444:	99 27       	eor	r25, r25
     446:	98 2f       	mov	r25, r24
     448:	88 27       	eor	r24, r24
     44a:	28 2b       	or	r18, r24
     44c:	39 2b       	or	r19, r25

	return Value;
}
     44e:	c9 01       	movw	r24, r18
     450:	df 91       	pop	r29
     452:	cf 91       	pop	r28
     454:	08 95       	ret

00000456 <_Z11SetNextClusjj>:

/*
;*****************************************************************************************************
;* 函数名称 : SetNextClus
;* 描    述 : 设置指定簇的下一簇号
;* 输 	 入 : ClusIndex: 簇号, Value: 下一簇号
;*        
;* 输 	 出 : 下一簇号
;*****************************************************************************************************
;*/
uint16 SetNextClus(uint16 ClusIndex, uint16 Value)
{
     456:	0f 93       	push	r16
     458:	1f 93       	push	r17
     45a:	cf 93       	push	r28
     45c:	df 93       	push	r29
     45e:	fc 01       	movw	r30, r24
     460:	8b 01       	movw	r16, r22
	uint8 *Buf;
	uint16 ByteOffset; 
	uint32 SecIndex;

	if (ClusIndex >= FS_MaxClus)					/* 簇号无效 */
     462:	80 91 cb 03 	lds	r24, 0x03CB
     466:	90 91 cc 03 	lds	r25, 0x03CC
     46a:	e8 17       	cp	r30, r24
     46c:	f9 07       	cpc	r31, r25
     46e:	90 f4       	brcc	.+36     	; 0x494
	{
		return BAD_CLUS;
	}

	SecIndex   = ClusIndex / 256 + FS_FATStartSec;	/* 扇区号	*/
     470:	8f 2f       	mov	r24, r31
     472:	99 27       	eor	r25, r25
     474:	20 91 cd 03 	lds	r18, 0x03CD
     478:	82 0f       	add	r24, r18
     47a:	91 1d       	adc	r25, r1
     47c:	aa 27       	eor	r26, r26
     47e:	bb 27       	eor	r27, r27
	ByteOffset = ClusIndex * 2 % 512;				/* 字节偏移 */
     480:	ef 01       	movw	r28, r30
     482:	ce 0f       	add	r28, r30
     484:	df 1f       	adc	r29, r31
     486:	d1 70       	andi	r29, 0x01	; 1

	Buf = OpenSector(SecIndex);						/* 打开扇区 */	
     488:	bc 01       	movw	r22, r24
     48a:	cd 01       	movw	r24, r26
     48c:	0e 94 74 00 	call	0xe8
	if (Buf == NULL)
     490:	00 97       	sbiw	r24, 0x00	; 0
     492:	19 f4       	brne	.+6      	; 0x49a
	{
		return BAD_CLUS;
     494:	67 ef       	ldi	r22, 0xF7	; 247
     496:	7f ef       	ldi	r23, 0xFF	; 255
     498:	0a c0       	rjmp	.+20     	; 0x4ae
	}

	SET_UINT16(Buf, ByteOffset, Value);				/* 设置下一簇号 */
     49a:	fe 01       	movw	r30, r28
     49c:	e8 0f       	add	r30, r24
     49e:	f9 1f       	adc	r31, r25
     4a0:	00 83       	st	Z, r16
     4a2:	81 2f       	mov	r24, r17
     4a4:	99 27       	eor	r25, r25
     4a6:	81 83       	std	Z+1, r24	; 0x01

	WriteSector();									/* 写扇区 */
     4a8:	0e 94 bf 00 	call	0x17e

	return Value;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -