📄 fdt.lst
字号:
297 0128 8A8F std Y+26,r24
298 012a 8485 ldd r24,Z+12
299 012c 9585 ldd r25,Z+13
300 012e 892F mov r24,r25
301 0130 9927 clr r25
302 0132 8B8F std Y+27,r24
96:fdt.c ****
97:fdt.c **** SET_UINT16(Buf, 28, pFDT->FileSize); /* 大小 */
304 .LM25:
305 0134 8685 ldd r24,Z+14
306 0136 8C8F std Y+28,r24
307 0138 8685 ldd r24,Z+14
308 013a 9785 ldd r25,Z+15
309 013c A089 ldd r26,Z+16
310 013e B189 ldd r27,Z+17
311 0140 892F mov r24,r25
312 0142 9A2F mov r25,r26
313 0144 AB2F mov r26,r27
314 0146 BB27 clr r27
315 0148 8D8F std Y+29,r24
98:fdt.c ****
99:fdt.c **** WriteSector(); /* 写扇区 */
317 .LM26:
318 014a 0E94 0000 call _Z11WriteSectorv
100:fdt.c ****
101:fdt.c **** return TRUE;
320 .LM27:
321 014e 81E0 ldi r24,lo8(1)
322 0150 90E0 ldi r25,hi8(1)
323 .L4:
324 .LBE5:
325 .LBE4:
326 /* epilogue: frame size=0 */
327 0152 DF91 pop r29
328 0154 CF91 pop r28
329 0156 1F91 pop r17
330 0158 0F91 pop r16
331 015a FF90 pop r15
332 015c EF90 pop r14
333 015e 0895 ret
334 /* epilogue end (size=7) */
335 /* function uint8 WriteRootFDTInfo(uint16, FDT*) size 84 (71) */
341 .global _Z14GetFreeRootFDTv
343 _Z14GetFreeRootFDTv:
102:fdt.c **** }
103:fdt.c ****
104:fdt.c **** /*
105:fdt.c **** ;**************************************************************************************************
106:fdt.c **** ;* 函数名称 : GetFreeRootFDT
107:fdt.c **** ;* 描 述 : 分配一个空闲根目录项
108:fdt.c **** ;* 输 入 : 无
109:fdt.c **** ;*
110:fdt.c **** ;* 输 出 : 目录项索引
111:fdt.c **** ;**************************************************************************************************
112:fdt.c **** ;*/
113:fdt.c **** uint16 GetFreeRootFDT(void)
114:fdt.c **** {
345 .LM28:
346 /* prologue: frame size=18 */
347 0160 0F93 push r16
348 0162 1F93 push r17
349 0164 CF93 push r28
350 0166 DF93 push r29
351 0168 CDB7 in r28,__SP_L__
352 016a DEB7 in r29,__SP_H__
353 016c 6297 sbiw r28,18
354 016e 0FB6 in __tmp_reg__,__SREG__
355 0170 F894 cli
356 0172 DEBF out __SP_H__,r29
357 0174 0FBE out __SREG__,__tmp_reg__
358 0176 CDBF out __SP_L__,r28
359 /* prologue end (size=12) */
360 .LBB6:
361 .LBB7:
115:fdt.c **** uint16 i;
116:fdt.c **** FDT pFDT;
117:fdt.c ****
118:fdt.c **** for (i = 0; i < MAX_FDT_NUM; i++)
363 .LM29:
364 0178 00E0 ldi r16,lo8(0)
365 017a 10E0 ldi r17,hi8(0)
366 .L15:
368 .LM30:
369 017c 8091 0000 lds r24,FS_RootEntCnt
370 0180 9091 0000 lds r25,(FS_RootEntCnt)+1
371 0184 0817 cp r16,r24
372 0186 1907 cpc r17,r25
373 0188 70F4 brsh .L9
119:fdt.c **** {
120:fdt.c **** ReadRootFDTInfo(i, &pFDT); /* 读取第i个根目录项 */
375 .LM31:
376 018a BE01 movw r22,r28
377 018c 6F5F subi r22,lo8(-(1))
378 018e 7F4F sbci r23,hi8(-(1))
379 0190 C801 movw r24,r16
380 0192 0E94 0000 call _Z15ReadRootFDTInfojP4_FDT
121:fdt.c **** if (pFDT.Name[0] == 0xE5 || pFDT.Name[0] == 0x00) /* 空闲 */
382 .LM32:
383 0196 8981 ldd r24,Y+1
384 0198 853E cpi r24,lo8(-27)
385 019a 29F0 breq .L9
386 019c 8823 tst r24
387 019e 19F0 breq .L9
389 .LM33:
390 01a0 0F5F subi r16,lo8(-(1))
391 01a2 1F4F sbci r17,hi8(-(1))
392 01a4 EBCF rjmp .L15
393 .L9:
394 .LBE7:
395 .LBE6:
122:fdt.c **** {
123:fdt.c **** break;
124:fdt.c **** }
125:fdt.c **** }
126:fdt.c **** return i; /* 返回目录项索引 */
127:fdt.c **** }
397 .LM34:
398 01a6 C801 movw r24,r16
399 /* epilogue: frame size=18 */
400 01a8 6296 adiw r28,18
401 01aa 0FB6 in __tmp_reg__,__SREG__
402 01ac F894 cli
403 01ae DEBF out __SP_H__,r29
404 01b0 0FBE out __SREG__,__tmp_reg__
405 01b2 CDBF out __SP_L__,r28
406 01b4 DF91 pop r29
407 01b6 CF91 pop r28
408 01b8 1F91 pop r17
409 01ba 0F91 pop r16
410 01bc 0895 ret
411 /* epilogue end (size=11) */
412 /* function uint16 GetFreeRootFDT() size 47 (24) */
421 .global _Z14FileNameChangePcS_
423 _Z14FileNameChangePcS_:
128:fdt.c ****
129:fdt.c **** /*
130:fdt.c **** ;**************************************************************************************************
131:fdt.c **** ;* 函数名称 : FileNameChange
132:fdt.c **** ;* 描 述 : 将外部文件名转化为内部文件名
133:fdt.c **** ;* 输 入 : NameStr: 外部文件名, Filename: 内部文件名
134:fdt.c **** ;*
135:fdt.c **** ;* 输 出 : TRUE OR FALSE
136:fdt.c **** ;**************************************************************************************************
137:fdt.c **** ;*/
138:fdt.c **** uint8 FileNameChange(char *NameStr, char Filename[11])
139:fdt.c **** {
425 .LM35:
426 /* prologue: frame size=0 */
427 /* prologue end (size=0) */
428 01be DC01 movw r26,r24
429 .LBB8:
430 .LBB9:
140:fdt.c **** uint8 i, z;
141:fdt.c **** uint8 extp = 0, len= 0;
432 .LM36:
433 01c0 30E0 ldi r19,lo8(0)
434 01c2 432F mov r20,r19
142:fdt.c **** uint8 ch;
143:fdt.c ****
144:fdt.c **** if (NameStr == NULL)
436 .LM37:
437 01c4 0097 sbiw r24,0
438 01c6 09F4 brne .L17
145:fdt.c **** {
146:fdt.c **** return FALSE;
440 .LM38:
441 01c8 0895 ret
442 .L17:
147:fdt.c **** }
148:fdt.c ****
149:fdt.c **** /* 名首不能为空格和'.'及空 */
150:fdt.c **** ch = *NameStr;
444 .LM39:
445 01ca 2C91 ld r18,X
151:fdt.c **** if (ch == ' ' || ch == '.' || ch == '\0')
447 .LM40:
448 01cc 2032 cpi r18,lo8(32)
449 01ce 01F1 breq .L35
450 01d0 2E32 cpi r18,lo8(46)
451 01d2 F1F0 breq .L35
452 01d4 2223 tst r18
453 01d6 E1F0 breq .L35
454 .L39:
152:fdt.c **** {
153:fdt.c **** return FALSE;
154:fdt.c **** }
155:fdt.c ****
156:fdt.c **** while ( (len < 11) && ((ch = *NameStr) != '\0') )
157:fdt.c **** {
158:fdt.c **** switch (ch)
456 .LM41:
457 01d8 822F mov r24,r18
458 01da 9927 clr r25
459 01dc 8F32 cpi r24,47
460 01de 9105 cpc r25,__zero_reg__
461 01e0 B9F0 breq .L35
462 01e2 8033 cpi r24,48
463 01e4 9105 cpc r25,__zero_reg__
464 01e6 54F4 brge .L36
465 01e8 8232 cpi r24,34
466 01ea 9105 cpc r25,__zero_reg__
467 01ec 89F0 breq .L35
468 01ee 8232 cpi r24,34
469 01f0 9105 cpc r25,__zero_reg__
470 01f2 8CF0 brlt .L22
471 01f4 8A97 sbiw r24,42
472 01f6 0397 sbiw r24,3
473 01f8 70F4 brsh .L22
474 01fa 0AC0 rjmp .L35
475 .L36:
476 01fc 8A33 cpi r24,58
477 01fe 9105 cpc r25,__zero_reg__
478 0200 54F0 brlt .L22
479 0202 8034 cpi r24,64
480 0204 9105 cpc r25,__zero_reg__
481 0206 24F0 brlt .L35
482 0208 8B55 subi r24,lo8(-(-91))
483 020a 9040 sbci r25,hi8(-(-91))
484 020c 0297 sbiw r24,2
485 020e 18F4 brsh .L22
486 .L35:
159:fdt.c **** {
160:fdt.c **** case 0x22:
161:fdt.c **** case 0x2A:
162:fdt.c **** case 0x2B:
163:fdt.c **** case 0x2C:
164:fdt.c **** case 0x2F:
165:fdt.c **** case 0x3A:
166:fdt.c **** case 0x3B:
167:fdt.c **** case 0x3C:
168:fdt.c **** case 0x3D:
169:fdt.c **** case 0x3E:
170:fdt.c **** case 0x3F:
171:fdt.c **** case 0x5B:
172:fdt.c **** case 0x5C:
173:fdt.c **** return FALSE;
488 .LM42:
489 0210 80E0 ldi r24,lo8(0)
490 0212 90E0 ldi r25,hi8(0)
491 0214 0895 ret
492 .L22:
174:fdt.c **** }
175:fdt.c **** /* 小写转大写 */
176:fdt.c **** if (ch >= 'a' && ch <= 'z')
494 .LM43:
495 0216 822F mov r24,r18
496 0218 8156 subi r24,lo8(-(-97))
497 021a 8A31 cpi r24,lo8(26)
498 021c 08F4 brsh .L37
177:fdt.c **** {
178:fdt.c **** ch -= 'a' - 'A';
500 .LM44:
501 021e 2052 subi r18,lo8(-(-32))
502 .L37:
179:fdt.c **** }
180:fdt.c **** /* 找到第一个扩展名标识'.' */
181:fdt.c **** if (ch == '.' && extp == 0)
504 .LM45:
505 0220 2E32 cpi r18,lo8(46)
506 0222 19F4 brne .L38
507 0224 4423 tst r20
508 0226 09F4 brne .L38
182:fdt.c **** {
183:fdt.c **** extp = len; /* 记下它的位置 */
510 .LM46:
511 0228 432F mov r20,r19
512 .L38:
184:fdt.c **** }
185:fdt.c **** Filename[len] = ch; /* 记录 */
514 .LM47:
515 022a FB01 movw r30,r22
516 022c E30F add r30,r19
517 022e F11D adc r31,__zero_reg__
518 0230 2083 st Z,r18
186:fdt.c **** len++;
520 .LM48:
521 0232 3F5F subi r19,lo8(-(1))
187:fdt.c **** NameStr++;
523 .LM49:
524 0234 1196 adiw r26,1
525 0236 3B30 cpi r19,lo8(11)
526 0238 18F4 brsh .L21
527 023a 2C91 ld r18,X
528 023c 2223 tst r18
529 023e 61F6 brne .L39
530 .L21:
188:fdt.c **** }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -