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

📄 fat16.lst

📁 AT89C51 MP3源程序AT89C51 MP3源程序 SD AT89C51 MP3源程序AT89C51 MP3源程序 SD
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"fat16.c"
   2               		.arch atmega128
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
  80               	.global	FS_DataStartSec
  81               	.global	FS_DataStartSec
  82               		.section .bss
  85               	FS_DataStartSec:
  86 0000 0000 0000 		.skip 4,0
  87               	.global	FS_RootDirStartSec
  88               	.global	FS_RootDirStartSec
  91               	FS_RootDirStartSec:
  92 0004 0000      		.skip 2,0
  93               	.global	FS_RootEntCnt
  94               	.global	FS_RootEntCnt
  97               	FS_RootEntCnt:
  98 0006 0000      		.skip 2,0
  99               	.global	FS_MaxClus
 100               	.global	FS_MaxClus
 103               	FS_MaxClus:
 104 0008 0000      		.skip 2,0
 105               	.global	FS_FATStartSec
 106               	.global	FS_FATStartSec
 109               	FS_FATStartSec:
 110 000a 00        		.skip 1,0
 111               	.global	FS_SecPerClus
 112               	.global	FS_SecPerClus
 115               	FS_SecPerClus:
 116 000b 00        		.skip 1,0
 117               		.text
 120               	.global	_Z11GetNextClusj
 122               	_Z11GetNextClusj:
   1:fat16.c       **** /*
   2:fat16.c       **** ;**************************************************************************************************
   3:fat16.c       **** ;*									Copyright (c) 2006 by JiaoJinXing. 
   4:fat16.c       **** ;*											All rights reserved.
   5:fat16.c       **** ;*
   6:fat16.c       **** ;*---- 文件信息 -----------------------------------------------------------------------------------
   7:fat16.c       **** ;* 文   件   名 : FAT16.c
   8:fat16.c       **** ;* 创   建   人 : 焦进星
   9:fat16.c       **** ;* 描        述 : FAT16文件分配表文件
  10:fat16.c       **** ;*
  11:fat16.c       **** ;*---- 历史版本信息 -------------------------------------------------------------------------------
  12:fat16.c       **** ;* 日   期  : 2008年 12 月 15 日
  13:fat16.c       **** ;* 创 建 人  : 焦进星
  14:fat16.c       **** ;* 描   述  : 建立版本 V1.0.0
  15:fat16.c       **** ;*
  16:fat16.c       **** ;*---- 联系方式 -----------------------------------------------------------------------------------
  17:fat16.c       **** ;* Email    : wyoujtg@163.com
  18:fat16.c       **** ;* Web      : http://wyoujtg.blog.163.com  
  19:fat16.c       **** ;**************************************************************************************************
  20:fat16.c       **** ;*/
  21:fat16.c       **** 
  22:fat16.c       **** #define IN_FAT16
  23:fat16.c       **** #include "minifs.h"
  24:fat16.c       **** 
  25:fat16.c       **** /*
  26:fat16.c       **** ;**************************************************************************************************
  27:fat16.c       **** ;* 函数名称 : GetNextClus
  28:fat16.c       **** ;* 描    述 : 获得指定簇的下一簇号
  29:fat16.c       **** ;* 输 	 入 : ClusIndex: 簇号
  30:fat16.c       **** ;*        
  31:fat16.c       **** ;* 输 	 出 : 下一簇号
  32:fat16.c       **** ;**************************************************************************************************
  33:fat16.c       **** ;*/
  34:fat16.c       **** uint16 GetNextClus(uint16 ClusIndex)
  35:fat16.c       **** {
 124               	.LM1:
 125               	/* prologue: frame size=0 */
 126 0000 CF93      		push r28
 127 0002 DF93      		push r29
 128               	/* prologue end (size=2) */
 129 0004 FC01      		movw r30,r24
 130               	.LBB2:
 131               	.LBB3:
  36:fat16.c       **** 	uint8 *Buf;
  37:fat16.c       **** 	uint16 ByteOffset, Value; 
  38:fat16.c       **** 	uint32 SecIndex;
  39:fat16.c       **** 
  40:fat16.c       **** 	if (ClusIndex >= FS_MaxClus)					/* 簇号无效 */
 133               	.LM2:
 134 0006 8091 0000 		lds r24,FS_MaxClus
 135 000a 9091 0000 		lds r25,(FS_MaxClus)+1
 136 000e E817      		cp r30,r24
 137 0010 F907      		cpc r31,r25
 138 0012 90F4      		brsh .L4
  41:fat16.c       **** 	{
  42:fat16.c       **** 		return BAD_CLUS;
  43:fat16.c       **** 	}
  44:fat16.c       **** 
  45:fat16.c       **** 	SecIndex   = ClusIndex / 256 + FS_FATStartSec;	/* 扇区号	*/
 140               	.LM3:
 141 0014 8F2F      		mov r24,r31
 142 0016 9927      		clr r25
 143 0018 2091 0000 		lds r18,FS_FATStartSec
 144 001c 820F      		add r24,r18
 145 001e 911D      		adc r25,__zero_reg__
 146 0020 AA27      		clr r26
 147 0022 BB27      		clr r27
  46:fat16.c       **** 	ByteOffset = ClusIndex * 2 % 512;				/* 字节偏移 */
 149               	.LM4:
 150 0024 EF01      		movw r28,r30
 151 0026 CE0F      		add r28,r30
 152 0028 DF1F      		adc r29,r31
 153 002a D170      		andi r29,hi8(511)
  47:fat16.c       **** 
  48:fat16.c       **** 	Buf = OpenSector(SecIndex);						/* 打开扇区 */	
 155               	.LM5:
 156 002c BC01      		movw r22,r24
 157 002e CD01      		movw r24,r26
 158 0030 0E94 0000 		call _Z10OpenSectorm
  49:fat16.c       **** 	if (Buf == NULL)
 160               	.LM6:
 161 0034 0097      		sbiw r24,0
 162 0036 19F4      		brne .L3
 163               	.L4:
  50:fat16.c       **** 	{
  51:fat16.c       **** 		return BAD_CLUS;
 165               	.LM7:
 166 0038 27EF      		ldi r18,lo8(-9)
 167 003a 3FEF      		ldi r19,hi8(-9)
 168 003c 0CC0      		rjmp .L1
 169               	.L3:
  52:fat16.c       **** 	}
  53:fat16.c       **** 
  54:fat16.c       **** 	Value = GET_UINT16(Buf, ByteOffset);			/* 获得下一簇号	*/	
 171               	.LM8:
 172 003e FE01      		movw r30,r28
 173 0040 E80F      		add r30,r24
 174 0042 F91F      		adc r31,r25
 175 0044 8081      		ld r24,Z
 176 0046 282F      		mov r18,r24
 177 0048 3327      		clr r19
 178 004a 8181      		ldd r24,Z+1
 179 004c 9927      		clr r25
 180 004e 982F      		mov r25,r24
 181 0050 8827      		clr r24
 182 0052 282B      		or r18,r24
 183 0054 392B      		or r19,r25
 184               	.L1:
 185               	.LBE3:
 186               	.LBE2:
  55:fat16.c       **** 
  56:fat16.c       **** 	return Value;
  57:fat16.c       **** }
 188               	.LM9:
 189 0056 C901      		movw r24,r18
 190               	/* epilogue: frame size=0 */
 191 0058 DF91      		pop r29
 192 005a CF91      		pop r28
 193 005c 0895      		ret
 194               	/* epilogue end (size=3) */
 195               	/* function uint16 GetNextClus(uint16) size 48 (43) */
 204               	.global	_Z11SetNextClusjj
 206               	_Z11SetNextClusjj:
  58:fat16.c       **** 
  59:fat16.c       **** /*
  60:fat16.c       **** ;**************************************************************************************************
  61:fat16.c       **** ;* 函数名称 : SetNextClus
  62:fat16.c       **** ;* 描    述 : 设置指定簇的下一簇号
  63:fat16.c       **** ;* 输 	 入 : ClusIndex: 簇号, Value: 下一簇号
  64:fat16.c       **** ;*        
  65:fat16.c       **** ;* 输 	 出 : 下一簇号
  66:fat16.c       **** ;**************************************************************************************************
  67:fat16.c       **** ;*/
  68:fat16.c       **** uint16 SetNextClus(uint16 ClusIndex, uint16 Value)
  69:fat16.c       **** {
 208               	.LM10:
 209               	/* prologue: frame size=0 */
 210 005e 0F93      		push r16
 211 0060 1F93      		push r17
 212 0062 CF93      		push r28
 213 0064 DF93      		push r29
 214               	/* prologue end (size=4) */
 215 0066 FC01      		movw r30,r24
 216 0068 8B01      		movw r16,r22
 217               	.LBB4:
 218               	.LBB5:
  70:fat16.c       **** 	uint8 *Buf;
  71:fat16.c       **** 	uint16 ByteOffset; 
  72:fat16.c       **** 	uint32 SecIndex;
  73:fat16.c       **** 
  74:fat16.c       **** 	if (ClusIndex >= FS_MaxClus)					/* 簇号无效 */
 220               	.LM11:
 221 006a 8091 0000 		lds r24,FS_MaxClus
 222 006e 9091 0000 		lds r25,(FS_MaxClus)+1
 223 0072 E817      		cp r30,r24
 224 0074 F907      		cpc r31,r25
 225 0076 90F4      		brsh .L8
  75:fat16.c       **** 	{
  76:fat16.c       **** 		return BAD_CLUS;
  77:fat16.c       **** 	}
  78:fat16.c       **** 
  79:fat16.c       **** 	SecIndex   = ClusIndex / 256 + FS_FATStartSec;	/* 扇区号	*/
 227               	.LM12:
 228 0078 8F2F      		mov r24,r31
 229 007a 9927      		clr r25
 230 007c 2091 0000 		lds r18,FS_FATStartSec
 231 0080 820F      		add r24,r18
 232 0082 911D      		adc r25,__zero_reg__
 233 0084 AA27      		clr r26
 234 0086 BB27      		clr r27
  80:fat16.c       **** 	ByteOffset = ClusIndex * 2 % 512;				/* 字节偏移 */
 236               	.LM13:
 237 0088 EF01      		movw r28,r30
 238 008a CE0F      		add r28,r30
 239 008c DF1F      		adc r29,r31
 240 008e D170      		andi r29,hi8(511)
  81:fat16.c       **** 
  82:fat16.c       **** 	Buf = OpenSector(SecIndex);						/* 打开扇区 */	
 242               	.LM14:
 243 0090 BC01      		movw r22,r24
 244 0092 CD01      		movw r24,r26
 245 0094 0E94 0000 		call _Z10OpenSectorm
  83:fat16.c       **** 	if (Buf == NULL)
 247               	.LM15:
 248 0098 0097      		sbiw r24,0
 249 009a 19F4      		brne .L7
 250               	.L8:
  84:fat16.c       **** 	{
  85:fat16.c       **** 		return BAD_CLUS;
 252               	.LM16:
 253 009c 67EF      		ldi r22,lo8(-9)
 254 009e 7FEF      		ldi r23,hi8(-9)
 255 00a0 0AC0      		rjmp .L5
 256               	.L7:
  86:fat16.c       **** 	}
  87:fat16.c       **** 
  88:fat16.c       **** 	SET_UINT16(Buf, ByteOffset, Value);				/* 设置下一簇号 */
 258               	.LM17:
 259 00a2 FE01      		movw r30,r28
 260 00a4 E80F      		add r30,r24
 261 00a6 F91F      		adc r31,r25
 262 00a8 0083      		st Z,r16
 263 00aa 812F      		mov r24,r17
 264 00ac 9927      		clr r25
 265 00ae 8183      		std Z+1,r24
  89:fat16.c       **** 
  90:fat16.c       **** 	WriteSector();									/* 写扇区 */
 267               	.LM18:
 268 00b0 0E94 0000 		call _Z11WriteSectorv
  91:fat16.c       **** 
  92:fat16.c       **** 	return Value;
 270               	.LM19:
 271 00b4 B801      		movw r22,r16
 272               	.L5:
 273               	.LBE5:
 274               	.LBE4:
  93:fat16.c       **** }
 276               	.LM20:
 277 00b6 CB01      		movw r24,r22
 278               	/* epilogue: frame size=0 */
 279 00b8 DF91      		pop r29
 280 00ba CF91      		pop r28
 281 00bc 1F91      		pop r17
 282 00be 0F91      		pop r16
 283 00c0 0895      		ret
 284               	/* epilogue end (size=5) */
 285               	/* function uint16 SetNextClus(uint16, uint16) size 51 (42) */
 293               	.global	_Z10AddNewClusj
 295               	_Z10AddNewClusj:
  94:fat16.c       **** 
  95:fat16.c       **** /*
  96:fat16.c       **** ;**************************************************************************************************

⌨️ 快捷键说明

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