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

📄 file.lst

📁 protues仿真
💻 LST
📖 第 1 页 / 共 5 页
字号:
 373:file.c        **** 
 374:file.c        **** 	if (fp->Offset >= fp->fFDT.FileSize)
 805               	.LM82:
 806 0340 AF88      		ldd r10,Y+23
 807 0342 B88C      		ldd r11,Y+24
 808 0344 C98C      		ldd r12,Y+25
 809 0346 DA8C      		ldd r13,Y+26
 810 0348 A816      		cp r10,r24
 811 034a B906      		cpc r11,r25
 812 034c CA06      		cpc r12,r26
 813 034e DB06      		cpc r13,r27
 814 0350 18F0      		brlo .L64
 815               	.L67:
 375:file.c        **** 	{
 376:file.c        **** 		return '\0';
 817               	.LM83:
 818 0352 80E0      		ldi r24,lo8(0)
 819 0354 90E0      		ldi r25,hi8(0)
 820 0356 4AC0      		rjmp .L60
 821               	.L64:
 377:file.c        **** 	}
 378:file.c        **** 
 379:file.c        **** 	ReadPoint = fp->Offset;
 380:file.c        **** 
 381:file.c        **** 	/* 读写指针所在簇的开始扇区 */
 382:file.c        **** 	SecIndex = GetFristSecOfClus(fp->CurClus);
 823               	.LM84:
 824 0358 8D89      		ldd r24,Y+21
 825 035a 9E89      		ldd r25,Y+22
 826 035c 0E94 0000 		call _Z17GetFristSecOfClusj
 827 0360 7B01      		movw r14,r22
 828 0362 8C01      		movw r16,r24
 383:file.c        **** 
 384:file.c        **** 	/* 读写指针的扇区偏移 */	
 385:file.c        **** 	SecOffset = ReadPoint / 512;
 830               	.LM85:
 831 0364 D601      		movw r26,r12
 832 0366 C501      		movw r24,r10
 833 0368 29E0      		ldi r18,9
 834 036a B695      	1:	lsr r27
 835 036c A795      		ror r26
 836 036e 9795      		ror r25
 837 0370 8795      		ror r24
 838 0372 2A95      		dec r18
 839 0374 D1F7      		brne 1b
 386:file.c        **** 
 387:file.c        **** 	/* 读写指针所在扇区的簇内偏移 */	
 388:file.c        **** 	SecOffset = SecOffset % FS_SecPerClus;
 841               	.LM86:
 842 0376 2091 0000 		lds r18,FS_SecPerClus
 843 037a 3327      		clr r19
 844 037c 4427      		clr r20
 845 037e 5527      		clr r21
 846 0380 BC01      		movw r22,r24
 847 0382 CD01      		movw r24,r26
 848 0384 0E94 0000 		call __udivmodsi4
 849 0388 DC01      		movw r26,r24
 850 038a CB01      		movw r24,r22
 389:file.c        **** 
 390:file.c        **** 	/* 读写指针所在扇区号 */
 391:file.c        **** 	SecIndex  = SecIndex + SecOffset;
 852               	.LM87:
 853 038c E80E      		add r14,r24
 854 038e F91E      		adc r15,r25
 855 0390 0A1F      		adc r16,r26
 856 0392 1B1F      		adc r17,r27
 392:file.c        **** 
 393:file.c        **** 	/* 打开扇区 */
 394:file.c        **** 	Buf = OpenSector(SecIndex);
 858               	.LM88:
 859 0394 C801      		movw r24,r16
 860 0396 B701      		movw r22,r14
 861 0398 0E94 0000 		call _Z10OpenSectorm
 395:file.c        **** 	if (Buf == NULL)
 863               	.LM89:
 864 039c 0097      		sbiw r24,0
 865 039e 31F1      		breq .L60
 396:file.c        **** 	{
 397:file.c        **** 		return '\0';
 398:file.c        **** 	}	
 399:file.c        **** 
 400:file.c        **** 	/* 读写指针在所在扇区的字节偏移 */
 401:file.c        **** 	ByteOffset = ReadPoint % 512;
 867               	.LM90:
 868 03a0 2FEF      		ldi r18,lo8(511)
 869 03a2 31E0      		ldi r19,hi8(511)
 870 03a4 40E0      		ldi r20,hlo8(511)
 871 03a6 50E0      		ldi r21,hhi8(511)
 872 03a8 A222      		and r10,r18
 873 03aa B322      		and r11,r19
 874 03ac C422      		and r12,r20
 875 03ae D522      		and r13,r21
 876 03b0 F501      		movw r30,r10
 402:file.c        **** 
 403:file.c        **** 	/* 读数据 */
 404:file.c        **** 	ch = Buf[ByteOffset];
 878               	.LM91:
 879 03b2 E80F      		add r30,r24
 880 03b4 F91F      		adc r31,r25
 881 03b6 E081      		ld r30,Z
 405:file.c        **** 
 406:file.c        **** 	/* 字节偏移加一 */
 407:file.c        **** 	if (fp->Offset < fp->fFDT.FileSize - 1)
 883               	.LM92:
 884 03b8 8E85      		ldd r24,Y+14
 885 03ba 9F85      		ldd r25,Y+15
 886 03bc A889      		ldd r26,Y+16
 887 03be B989      		ldd r27,Y+17
 888 03c0 0197      		sbiw r24,1
 889 03c2 A109      		sbc r26,__zero_reg__
 890 03c4 B109      		sbc r27,__zero_reg__
 891 03c6 2F89      		ldd r18,Y+23
 892 03c8 388D      		ldd r19,Y+24
 893 03ca 498D      		ldd r20,Y+25
 894 03cc 5A8D      		ldd r21,Y+26
 895 03ce 2817      		cp r18,r24
 896 03d0 3907      		cpc r19,r25
 897 03d2 4A07      		cpc r20,r26
 898 03d4 5B07      		cpc r21,r27
 899 03d6 40F4      		brsh .L66
 408:file.c        **** 	{
 409:file.c        **** 		fp->Offset++;
 901               	.LM93:
 902 03d8 2F5F      		subi r18,lo8(-(1))
 903 03da 3F4F      		sbci r19,hi8(-(1))
 904 03dc 4F4F      		sbci r20,hlo8(-(1))
 905 03de 5F4F      		sbci r21,hhi8(-(1))
 906 03e0 2F8B      		std Y+23,r18
 907 03e2 388F      		std Y+24,r19
 908 03e4 498F      		std Y+25,r20
 909 03e6 5A8F      		std Y+26,r21
 910               	.L66:
 410:file.c        **** 	}
 411:file.c        **** 	return ch;
 912               	.LM94:
 913 03e8 8E2F      		mov r24,r30
 914 03ea 9927      		clr r25
 915               	.L60:
 916               	.LBE20:
 917               	.LBE19:
 918               	/* epilogue: frame size=0 */
 919 03ec DF91      		pop r29
 920 03ee CF91      		pop r28
 921 03f0 1F91      		pop r17
 922 03f2 0F91      		pop r16
 923 03f4 FF90      		pop r15
 924 03f6 EF90      		pop r14
 925 03f8 DF90      		pop r13
 926 03fa CF90      		pop r12
 927 03fc BF90      		pop r11
 928 03fe AF90      		pop r10
 929 0400 0895      		ret
 930               	/* epilogue end (size=11) */
 931               	/* function uint8 GetchFile(FileManageInfo*) size 125 (104) */
 942               	.global	_Z9PutchFileP14FileManageInfoh
 944               	_Z9PutchFileP14FileManageInfoh:
 412:file.c        **** }
 413:file.c        **** 
 414:file.c        **** /*
 415:file.c        **** ;**************************************************************************************************
 416:file.c        **** ;* 函数名称 : PutchFile
 417:file.c        **** ;* 描    述 : 写一个字节到文件
 418:file.c        **** ;* 输 	 入 : fp: 文件指针; ch: 要写入的字节
 419:file.c        **** ;*        
 420:file.c        **** ;* 输 	 出 : 要写入的字节
 421:file.c        **** ;**************************************************************************************************
 422:file.c        **** ;*/
 423:file.c        **** uint8 PutchFile(M_FILE fp, uint8 ch)
 424:file.c        **** {
 946               	.LM95:
 947               	/* prologue: frame size=0 */
 948 0402 9F92      		push r9
 949 0404 AF92      		push r10
 950 0406 BF92      		push r11
 951 0408 CF92      		push r12
 952 040a DF92      		push r13
 953 040c EF92      		push r14
 954 040e FF92      		push r15
 955 0410 0F93      		push r16
 956 0412 1F93      		push r17
 957 0414 CF93      		push r28
 958 0416 DF93      		push r29
 959               	/* prologue end (size=11) */
 960 0418 EC01      		movw r28,r24
 961 041a 962E      		mov r9,r22
 962               	.LBB21:
 963               	.LBB22:
 425:file.c        **** 	uint8 *Buf;
 426:file.c        **** 	uint32 SecOffset;
 427:file.c        **** 	uint32 SecIndex;
 428:file.c        **** 	uint16 ByteOffset;
 429:file.c        **** 	uint16 ClusIndex;
 430:file.c        **** 
 431:file.c        **** 	/* 参数无效 */
 432:file.c        **** 	if (!fp)
 965               	.LM96:
 966 041c 0097      		sbiw r24,0
 967 041e 29F0      		breq .L76
 433:file.c        **** 	{
 434:file.c        **** 		return '\0';
 435:file.c        **** 	}
 436:file.c        **** 
 437:file.c        **** 	/* 判断文件是否已打开 */
 438:file.c        **** 	fp = IsFileOpen(fp->fFDT.Name);
 969               	.LM97:
 970 0420 0E94 0000 		call _Z10IsFileOpenPc
 971 0424 EC01      		movw r28,r24
 439:file.c        **** 	if (!fp)
 973               	.LM98:
 974 0426 892B      		or r24,r25
 975 0428 11F4      		brne .L71
 976               	.L76:
 440:file.c        **** 	{
 441:file.c        **** 		return '\0';
 978               	.LM99:
 979 042a CE01      		movw r24,r28
 980 042c 73C0      		rjmp .L69
 981               	.L71:
 442:file.c        **** 	}
 443:file.c        **** 
 444:file.c        **** 	/* 读写指针在所在扇区的字节偏移 */
 445:file.c        **** 	ByteOffset = fp->Offset % 512;
 983               	.LM100:
 984 042e 2F89      		ldd r18,Y+23
 985 0430 388D      		ldd r19,Y+24
 986 0432 498D      		ldd r20,Y+25
 987 0434 5A8D      		ldd r21,Y+26
 988 0436 DA01      		movw r26,r20
 989 0438 C901      		movw r24,r18
 990 043a 9170      		andi r25,hi8(511)
 991 043c A070      		andi r26,hlo8(511)
 992 043e B070      		andi r27,hhi8(511)
 993 0440 5C01      		movw r10,r24
 446:file.c        **** 
 447:file.c        **** 	/* 读写指针的扇区偏移 */	
 448:file.c        **** 	SecOffset = fp->Offset / 512;
 995               	.LM101:
 996 0442 69E0      		ldi r22,9
 997 0444 5695      	1:	lsr r21
 998 0446 4795      		ror r20
 999 0448 3795      		ror r19
 1000 044a 2795      		ror r18
 1001 044c 6A95      		dec r22
 1002 044e D1F7      		brne 1b
 449:file.c        **** 
 450:file.c        **** 	/* 读写指针所在扇区的簇内偏移 */	
 451:file.c        **** 	SecOffset = SecOffset % FS_SecPerClus;
 1004               	.LM102:
 1005 0450 8091 0000 		lds r24,FS_SecPerClus
 1006 0454 E82E      		mov r14,r24
 1007 0456 FF24      		clr r15
 1008 0458 0027      		clr r16
 1009 045a 1127      		clr r17
 1010 045c CA01      		movw r24,r20
 1011 045e B901      		movw r22,r18
 1012 0460 A801      		movw r20,r16
 1013 0462 9701      		movw r18,r14
 1014 0464 0E94 0000 		call __udivmodsi4
 1015 0468 7B01      		movw r14,r22
 1016 046a 8C01      		movw r16,r24
 452:file.c        **** 
 453:file.c        **** 	ClusIndex = fp->CurClus;
 1018               	.LM103:
 1019 046c CD88      		ldd r12,Y+21
 1020 046e DE88      		ldd r13,Y+22
 454:file.c        **** 
 455:file.c        **** 	/* 读写指针所在簇的开始扇区 */
 456:file.c        **** 	SecIndex = GetFristSecOfClus(ClusIndex);
 1022               	.LM104:
 1023 0470 C601      		movw r24,r12
 1024 0472 0E94 0000 		call _Z17GetFristSecOfClusj
 1025 0476 DC01      		movw r26,r24
 1026 0478 CB01      		movw r24,r22
 457:file.c        **** 
 458:file.c        **** 	/* 读写指针所在扇区号 */
 459:file.c        **** 	SecIndex  = SecIndex + SecOffset;
 1028               	.LM105:
 1029 047a 8E0D      		add r24,r14
 1030 047c 9F1D      		adc r25,r15
 1031 047e A01F      		adc r26,r16
 1032 0480 B11F      		adc r27,r17
 460:file.c        **** 
 461:file.c        **** 	/* 打开扇区 */
 462:file.c        **** 	Buf = OpenSector(SecIndex);
 1034               	.LM106:
 1035 0482 BC01      		movw r22,r24
 1036 0484 CD01      		movw r24,r26
 1037 0486 0E94 0000 		call _Z10OpenSectorm
 1038 048a FC01      		movw r30,r24
 463:file.c        **** 	if (Buf == NULL)
 1040               	.LM107:
 1041 048c 0097      		sbiw r24,0
 1042 048e 09F4      		brne .+2
 1043 0490 41C0      		rjmp .L69
 464:file.c        **** 	{
 465:file.c        **** 		return '\0';
 466:file.c        **** 	}	
 467:file.c        **** 
 468:file.c        **** 	/* 写数据 */
 469:file.c        **** 	Buf[ByteOffset] = ch;
 1045               	.LM108:
 1046 0492 EA0D      		add r30,r10
 1047 0494 FB1D      		adc r31,r11
 1048 0496 9082      		st Z,r9
 470:file.c        **** 
 471:file.c        **** 	WriteSector();
 1050               	.LM109:
 1051 0498 0E94 0000 		call _Z11WriteSectorv
 472:file.c        **** 
 473:file.c        **** 	/* 字节偏移加一 */
 474:file.c        **** 	fp->Offset++;
 1053               	.LM110:
 1054 049c 8F89      		ldd r24,Y+23
 1055 049e 988D      		ldd r25,Y+24
 1056 04a0 A98D      		ldd r26,Y+25
 1057 04a2 BA8D      		ldd r27,Y+26
 1058 04a4 0196      		adiw r24,1
 1059 04a6 A11D      		adc r26,__zero_reg__
 1060 04a8 B11D      		adc r27,__zero_reg__
 1061 04aa 8F8B      		std Y+23,r24
 1062 04ac 988F      		std Y+24,r25
 1063 04ae A98F      		std Y+25,r26

⌨️ 快捷键说明

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