📄 fat16.lst
字号:
97:fat16.c **** ;* 函数名称 : AddNewClus
98:fat16.c **** ;* 描 述 : 为指定簇链增加一个簇
99:fat16.c **** ;* 输 入 : ClusIndex: 簇号
100:fat16.c **** ;*
101:fat16.c **** ;* 输 出 : 下一簇号
102:fat16.c **** ;**************************************************************************************************
103:fat16.c **** ;*/
104:fat16.c **** uint16 AddNewClus(uint16 ClusIndex)
105:fat16.c **** {
297 .LM21:
298 /* prologue: frame size=0 */
299 00c2 0F93 push r16
300 00c4 1F93 push r17
301 00c6 CF93 push r28
302 00c8 DF93 push r29
303 /* prologue end (size=4) */
304 00ca EC01 movw r28,r24
305 .LBB6:
306 .LBB7:
106:fat16.c **** uint16 NextClus, i;
107:fat16.c ****
108:fat16.c **** if (ClusIndex >= FS_MaxClus) /* 簇号无效 */
308 .LM22:
309 00cc 8091 0000 lds r24,FS_MaxClus
310 00d0 9091 0000 lds r25,(FS_MaxClus)+1
311 00d4 C817 cp r28,r24
312 00d6 D907 cpc r29,r25
313 00d8 98F5 brsh .L24
109:fat16.c **** {
110:fat16.c **** return BAD_CLUS;
111:fat16.c **** }
112:fat16.c ****
113:fat16.c **** if (ClusIndex > EMPTY_CLUS_1) /* 追加簇链 */
315 .LM23:
316 00da C230 cpi r28,2
317 00dc D105 cpc r29,__zero_reg__
318 00de 80F0 brlo .L11
319 .L12:
114:fat16.c **** {
115:fat16.c **** /* 查找簇链尾 */
116:fat16.c **** do
117:fat16.c **** {
118:fat16.c **** NextClus = GetNextClus(ClusIndex); /* 下一簇号 */
321 .LM24:
322 00e0 CE01 movw r24,r28
323 00e2 0E94 0000 call _Z11GetNextClusj
324 00e6 9C01 movw r18,r24
119:fat16.c ****
120:fat16.c **** if (NextClus == BAD_CLUS) /* 当前簇为坏簇 */
326 .LM25:
327 00e8 4FEF ldi r20,hi8(-9)
328 00ea 873F cpi r24,lo8(-9)
329 00ec 9407 cpc r25,r20
330 00ee 31F0 breq .L25
121:fat16.c **** {
122:fat16.c **** return BAD_CLUS;
123:fat16.c **** }
124:fat16.c **** /* 到达簇链尾 */
125:fat16.c **** if (NextClus >= EOF_CLUS_1 || NextClus <= EMPTY_CLUS_1)
332 .LM26:
333 00f0 0297 sbiw r24,2
334 00f2 865F subi r24,lo8(-10)
335 00f4 9F4F sbci r25,hi8(-10)
336 00f6 30F4 brsh .L16
126:fat16.c **** {
127:fat16.c **** break;
128:fat16.c **** }
129:fat16.c **** ClusIndex = NextClus;
338 .LM27:
339 00f8 E901 movw r28,r18
130:fat16.c **** } while (1);
341 .LM28:
342 00fa F2CF rjmp .L12
343 .L25:
345 .LM29:
346 00fc BC01 movw r22,r24
347 00fe 22C0 rjmp .L9
348 .L11:
131:fat16.c **** }
132:fat16.c **** else /* 新建一个簇 */
133:fat16.c **** {
134:fat16.c **** ClusIndex = NEW_CLUS_CHAIN;
350 .LM30:
351 0100 C0E0 ldi r28,lo8(0)
352 0102 D0E0 ldi r29,hi8(0)
353 .L16:
135:fat16.c **** }
136:fat16.c ****
137:fat16.c **** /* 查找一个空闲簇 */
138:fat16.c **** for (i = EMPTY_CLUS_1 + 1; i < FS_MaxClus; i++)
355 .LM31:
356 0104 02E0 ldi r16,lo8(2)
357 0106 10E0 ldi r17,hi8(2)
358 .L26:
359 0108 8091 0000 lds r24,FS_MaxClus
360 010c 9091 0000 lds r25,(FS_MaxClus)+1
361 0110 0817 cp r16,r24
362 0112 1907 cpc r17,r25
363 0114 A8F4 brsh .L24
139:fat16.c **** {
140:fat16.c **** if (GetNextClus(i) == EMPTY_CLUS) /* 找到空闲簇 */
365 .LM32:
366 0116 C801 movw r24,r16
367 0118 0E94 0000 call _Z11GetNextClusj
368 011c 892B or r24,r25
369 011e 69F4 brne .L19
141:fat16.c **** {
142:fat16.c **** if (ClusIndex != NEW_CLUS_CHAIN) /* 追加簇链 */
371 .LM33:
372 0120 2097 sbiw r28,0
373 0122 21F0 breq .L21
143:fat16.c **** {
144:fat16.c **** SetNextClus(ClusIndex, i);
375 .LM34:
376 0124 B801 movw r22,r16
377 0126 CE01 movw r24,r28
378 0128 0E94 0000 call _Z11SetNextClusjj
379 .L21:
145:fat16.c **** }
146:fat16.c **** SetNextClus(i, EOF_CLUS_END); /* 簇链尾 */
381 .LM35:
382 012c 6FEF ldi r22,lo8(-1)
383 012e 7FEF ldi r23,hi8(-1)
384 0130 C801 movw r24,r16
385 0132 0E94 0000 call _Z11SetNextClusjj
147:fat16.c **** return i;
387 .LM36:
388 0136 B801 movw r22,r16
389 0138 05C0 rjmp .L9
390 .L19:
392 .LM37:
393 013a 0F5F subi r16,lo8(-(1))
394 013c 1F4F sbci r17,hi8(-(1))
395 013e E4CF rjmp .L26
396 .L24:
148:fat16.c **** }
149:fat16.c **** }
150:fat16.c **** return BAD_CLUS;
398 .LM38:
399 0140 67EF ldi r22,lo8(-9)
400 0142 7FEF ldi r23,hi8(-9)
401 .L9:
402 .LBE7:
403 .LBE6:
151:fat16.c **** }
405 .LM39:
406 0144 CB01 movw r24,r22
407 /* epilogue: frame size=0 */
408 0146 DF91 pop r29
409 0148 CF91 pop r28
410 014a 1F91 pop r17
411 014c 0F91 pop r16
412 014e 0895 ret
413 /* epilogue end (size=5) */
414 /* function uint16 AddNewClus(uint16) size 72 (63) */
422 .global _Z12DelClusChainj
424 _Z12DelClusChainj:
152:fat16.c ****
153:fat16.c **** /*
154:fat16.c **** ;**************************************************************************************************
155:fat16.c **** ;* 函数名称 : DelClusChain
156:fat16.c **** ;* 描 述 : 删除簇链
157:fat16.c **** ;* 输 入 : ClusIndex: 簇号
158:fat16.c **** ;*
159:fat16.c **** ;* 输 出 : 无
160:fat16.c **** ;**************************************************************************************************
161:fat16.c **** ;*/
162:fat16.c **** void DelClusChain(uint16 CurClus)
163:fat16.c **** {
426 .LM40:
427 /* prologue: frame size=0 */
428 0150 0F93 push r16
429 0152 1F93 push r17
430 0154 CF93 push r28
431 0156 DF93 push r29
432 /* prologue end (size=4) */
433 0158 8C01 movw r16,r24
434 .LBB8:
435 .LBB9:
164:fat16.c **** uint16 NextClus;
165:fat16.c ****
166:fat16.c **** /* 簇号无效 */
167:fat16.c **** if (CurClus >= FS_MaxClus)
437 .LM41:
438 015a 8091 0000 lds r24,FS_MaxClus
439 015e 9091 0000 lds r25,(FS_MaxClus)+1
440 0162 0817 cp r16,r24
441 0164 1907 cpc r17,r25
442 0166 98F4 brsh .L27
443 .L29:
168:fat16.c **** {
169:fat16.c **** return;
170:fat16.c **** }
171:fat16.c ****
172:fat16.c **** while (1)
173:fat16.c **** {
174:fat16.c **** NextClus = GetNextClus(CurClus); /* 获得当前簇的下一簇号 */
445 .LM42:
446 0168 C801 movw r24,r16
447 016a 0E94 0000 call _Z11GetNextClusj
448 016e EC01 movw r28,r24
175:fat16.c **** if (NextClus == BAD_CLUS) /* 当前簇为坏簇 */
450 .LM43:
451 0170 875F subi r24,lo8(-9)
452 0172 9F4F sbci r25,hi8(-9)
453 0174 61F0 breq .L27
176:fat16.c **** {
177:fat16.c **** break;
178:fat16.c **** }
179:fat16.c ****
180:fat16.c **** SetNextClus(CurClus, EMPTY_CLUS); /* 释放当前簇 */
455 .LM44:
456 0176 60E0 ldi r22,lo8(0)
457 0178 70E0 ldi r23,hi8(0)
458 017a C801 movw r24,r16
459 017c 0E94 0000 call _Z11SetNextClusjj
181:fat16.c ****
182:fat16.c **** if (NextClus >= EOF_CLUS_1 || NextClus <= EMPTY_CLUS_1) /* 结束或保留簇 */
461 .LM45:
462 0180 CE01 movw r24,r28
463 0182 0297 sbiw r24,2
464 0184 865F subi r24,lo8(-10)
465 0186 9F4F sbci r25,hi8(-10)
466 0188 10F4 brsh .L27
183:fat16.c **** {
184:fat16.c **** break;
185:fat16.c **** }
186:fat16.c **** CurClus = NextClus;
468 .LM46:
469 018a 8E01 movw r16,r28
470 018c EDCF rjmp .L29
471 .L27:
472 .LBE9:
473 .LBE8:
474 /* epilogue: frame size=0 */
475 018e DF91 pop r29
476 0190 CF91 pop r28
477 0192 1F91 pop r17
478 0194 0F91 pop r16
479 0196 0895 ret
480 /* epilogue end (size=5) */
481 /* function void DelClusChain(uint16) size 38 (29) */
492 .text
494 Letext:
495 /* File "fat16.c": code 209 = 0x00d1 ( 177), prologues 14, epilogues 18 */
DEFINED SYMBOLS
*ABS*:00000000 fat16.c
*ABS*:0000003f __SREG__
*ABS*:0000003e __SP_H__
*ABS*:0000003d __SP_L__
*ABS*:00000000 __tmp_reg__
*ABS*:00000001 __zero_reg__
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:85 .bss:00000000 FS_DataStartSec
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:91 .bss:00000004 FS_RootDirStartSec
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:97 .bss:00000006 FS_RootEntCnt
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:103 .bss:00000008 FS_MaxClus
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:109 .bss:0000000a FS_FATStartSec
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:115 .bss:0000000b FS_SecPerClus
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:122 .text:00000000 _Z11GetNextClusj
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:206 .text:0000005e _Z11SetNextClusjj
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:295 .text:000000c2 _Z10AddNewClusj
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:424 .text:00000150 _Z12DelClusChainj
C:\Users\ADMINI~1\AppData\Local\Temp/ccmyaaaa.s:494 .text:00000198 Letext
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
_Z10OpenSectorm
_Z11WriteSectorv
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -