disk.lis
来自「Atmega64单片机程序(完整工程)」· LIS 代码 · 共 1,577 行 · 第 1/5 页
LIS
1,577 行
0318 4424 clr R4
031A 5524 clr R5
031C 2082 std z+0,R2
031E 3182 std z+1,R3
0320 4282 std z+2,R4
0322 5382 std z+3,R5
0324 ; #if FS_DEBUG_EN
0324 ; #if USART1_EN
0324 ; {
0324 ; Uart1_SendString("\n 3.FATStartSec:");//调试用 ,FAT开始扇区号
0324 00E0 ldi R16,<L51
0326 10E0 ldi R17,>L51
0328 0E940000 xcall _Uart1_SendString
032C ; PUT_INT32U_DecTOString(DiskInfo[i].FATStartSec);
032C 8EE2 ldi R24,46
032E 8A9D mul R24,R10
0330 F001 movw R30,R0
0332 80E0 ldi R24,<_DiskInfo+4
0334 90E0 ldi R25,>_DiskInfo+4
0336 E80F add R30,R24
0338 F91F adc R31,R25
033A 0081 ldd R16,z+0
033C 1181 ldd R17,z+1
033E 2281 ldd R18,z+2
0340 3381 ldd R19,z+3
0342 0E940000 xcall _PUT_INT32U_DecTOString
0346 ; }
0346 ; #endif
0346 ; #endif
0346 ;
0346 ; /* FAT表占用扇区数 */
0346 ; temp=((INT32U)Buf[23]<<8)+Buf[22];
0346 88E0 ldi R24,8
0348 90E0 ldi R25,0
034A F701 movw R30,R14
034C 2788 ldd R2,z+23
034E 3324 clr R3
0350 4424 clr R4
0352 5524 clr R5
0354 8A93 st -y,R24
0356 8101 movw R16,R2
0358 9201 movw R18,R4
035A 0E940000 xcall lsl32
035E 1801 movw R2,R16
0360 2901 movw R4,R18
0362 F701 movw R30,R14
0364 6688 ldd R6,z+22
0366 7724 clr R7
0368 8824 clr R8
036A 9924 clr R9
036C 260C add R2,R6
036E 371C adc R3,R7
0370 481C adc R4,R8
0372 591C adc R5,R9
0374 6101 movw R12,R2
0376 ; if(temp!=0)
0376 2220 tst R2
0378 11F4 brne X3
037A 3320 tst R3
037C 79F0 breq L53
037E X3:
037E ; DiskInfo[i].FATSecCnt=temp ;
037E 8EE2 ldi R24,46
0380 8A9D mul R24,R10
0382 F001 movw R30,R0
0384 80E0 ldi R24,<_DiskInfo+8
0386 90E0 ldi R25,>_DiskInfo+8
0388 E80F add R30,R24
038A F91F adc R31,R25
038C 1601 movw R2,R12
038E 4424 clr R4
0390 5524 clr R5
0392 2082 std z+0,R2
0394 3182 std z+1,R3
0396 4282 std z+2,R4
0398 5382 std z+3,R5
039A 4EC0 xjmp L54
039C L53:
039C ; else
039C ; {
039C ; DiskInfo[i].FATSecCnt=((INT32U)Buf[37]<<8)+Buf[36];
039C 88E0 ldi R24,8
039E 90E0 ldi R25,0
03A0 F701 movw R30,R14
03A2 25A0 ldd R2,z+37
03A4 3324 clr R3
03A6 4424 clr R4
03A8 5524 clr R5
03AA 8A93 st -y,R24
03AC 8101 movw R16,R2
03AE 9201 movw R18,R4
03B0 0E940000 xcall lsl32
03B4 1801 movw R2,R16
03B6 2901 movw R4,R18
03B8 F701 movw R30,R14
03BA 64A0 ldd R6,z+36
03BC 7724 clr R7
03BE 8824 clr R8
03C0 9924 clr R9
03C2 260C add R2,R6
03C4 371C adc R3,R7
03C6 481C adc R4,R8
03C8 591C adc R5,R9
03CA 8EE2 ldi R24,46
03CC 8A9D mul R24,R10
03CE F001 movw R30,R0
03D0 80E0 ldi R24,<_DiskInfo+8
03D2 90E0 ldi R25,>_DiskInfo+8
03D4 E80F add R30,R24
03D6 F91F adc R31,R25
03D8 2082 std z+0,R2
03DA 3182 std z+1,R3
03DC 4282 std z+2,R4
03DE 5382 std z+3,R5
03E0 ; DiskInfo[i].FATSecCnt|=(((INT32U)Buf[38]<<16)+((INT32U)Buf[39]<<24));
03E0 8EE2 ldi R24,46
03E2 8A9D mul R24,R10
03E4 1001 movw R2,R0
03E6 80E0 ldi R24,<_DiskInfo+8
03E8 90E0 ldi R25,>_DiskInfo+8
03EA 280E add R2,R24
03EC 391E adc R3,R25
03EE 88E1 ldi R24,24
03F0 90E0 ldi R25,0
03F2 F701 movw R30,R14
03F4 47A0 ldd R4,z+39
03F6 5524 clr R5
03F8 6624 clr R6
03FA 7724 clr R7
03FC 8A93 st -y,R24
03FE 8201 movw R16,R4
0400 9301 movw R18,R6
0402 0E940000 xcall lsl32
0406 F701 movw R30,R14
0408 46A0 ldd R4,z+38
040A 5524 clr R5
040C 6624 clr R6
040E 7724 clr R7
0410 3201 movw R6,R4
0412 4424 clr R4
0414 5524 clr R5
0416 400E add R4,R16
0418 511E adc R5,R17
041A 621E adc R6,R18
041C 731E adc R7,R19
041E F101 movw R30,R2
0420 4081 ldd R20,z+0
0422 5181 ldd R21,z+1
0424 6281 ldd R22,z+2
0426 7381 ldd R23,z+3
0428 4429 or R20,R4
042A 5529 or R21,R5
042C 6629 or R22,R6
042E 7729 or R23,R7
0430 4083 std z+0,R20
0432 5183 std z+1,R21
0434 6283 std z+2,R22
0436 7383 std z+3,R23
0438 ; }
0438 L54:
0438 ; #if FS_DEBUG_EN
0438 ; #if USART1_EN
0438 ; {
0438 ; Uart1_SendString("\n 4.FATSecCnt:");//FAT表占用扇区数
0438 00E0 ldi R16,<L58
043A 10E0 ldi R17,>L58
043C 0E940000 xcall _Uart1_SendString
0440 ; PUT_INT32U_DecTOString(DiskInfo[i].FATSecCnt);
0440 8EE2 ldi R24,46
0442 8A9D mul R24,R10
0444 F001 movw R30,R0
0446 80E0 ldi R24,<_DiskInfo+8
0448 90E0 ldi R25,>_DiskInfo+8
044A E80F add R30,R24
044C F91F adc R31,R25
044E 0081 ldd R16,z+0
0450 1181 ldd R17,z+1
0452 2281 ldd R18,z+2
0454 3381 ldd R19,z+3
0456 0E940000 xcall _PUT_INT32U_DecTOString
045A ; }
045A ; #endif
045A ; #endif
045A ;
045A ; /* FAT表个数 */
045A ; DiskInfo[i].NumFATs=Buf[16];
045A 8EE2 ldi R24,46
045C 8A9D mul R24,R10
045E F001 movw R30,R0
0460 80E0 ldi R24,<_DiskInfo+3
0462 90E0 ldi R25,>_DiskInfo+3
0464 E80F add R30,R24
0466 F91F adc R31,R25
0468 D701 movw R26,R14
046A 5096 adiw R26,16
046C 2C90 ld R2,x
046E 2082 std z+0,R2
0470 ; #if FS_DEBUG_EN
0470 ; #if USART1_EN
0470 ; {
0470 ; Uart1_SendString("\n 5.NumFATs:");//调试用 ,FAT表个数
0470 00E0 ldi R16,<L61
0472 10E0 ldi R17,>L61
0474 0E940000 xcall _Uart1_SendString
0478 ; PUT_INT32U_DecTOString(DiskInfo[i].NumFATs);
0478 8EE2 ldi R24,46
047A 8A9D mul R24,R10
047C F001 movw R30,R0
047E 80E0 ldi R24,<_DiskInfo+3
0480 90E0 ldi R25,>_DiskInfo+3
0482 E80F add R30,R24
0484 F91F adc R31,R25
0486 2080 ldd R2,z+0
0488 3324 clr R3
048A 4424 clr R4
048C 5524 clr R5
048E 8101 movw R16,R2
0490 9201 movw R18,R4
0492 0E940000 xcall _PUT_INT32U_DecTOString
0496 ; }
0496 ; #endif
0496 ; #endif
0496 ;
0496 ; /* 根目录占扇区数 */
0496 ; DiskInfo[i].RootSecCnt=((((INT16U)Buf[18]<<8)+Buf[17])*32+DiskInfo[i].BytsPerSec-1)/DiskInfo[i].BytsPerSec ;
0496 8EE2 ldi R24,46
0498 8A9D mul R24,R10
049A 1001 movw R2,R0
049C F701 movw R30,R14
049E 4188 ldd R4,z+17
04A0 F701 movw R30,R14
04A2 5288 ldd R5,z+18
04A4 352D mov R19,R5
04A6 242D mov R18,R4
04A8 00E2 ldi R16,32
04AA 10E0 ldi R17,0
04AC 0E940000 xcall empy16s
04B0 2801 movw R4,R16
04B2 6624 clr R6
04B4 7724 clr R7
04B6 80E0 ldi R24,<_DiskInfo+16
04B8 90E0 ldi R25,>_DiskInfo+16
04BA F101 movw R30,R2
04BC E80F add R30,R24
04BE F91F adc R31,R25
04C0 4081 ldd R20,z+0
04C2 5181 ldd R21,z+1
04C4 6281 ldd R22,z+2
04C6 7381 ldd R23,z+3
04C8 440E add R4,R20
04CA 551E adc R5,R21
04CC 661E adc R6,R22
04CE 771E adc R7,R23
04D0 41E0 ldi R20,1
04D2 50E0 ldi R21,0
04D4 60E0 ldi R22,0
04D6 70E0 ldi R23,0
04D8 441A sub R4,R20
04DA 550A sbc R5,R21
04DC 660A sbc R6,R22
04DE 770A sbc R7,R23
04E0 F101 movw R30,R2
04E2 E80F add R30,R24
04E4 F91F adc R31,R25
04E6 4081 ldd R20,z+0
04E8 5181 ldd R21,z+1
04EA 6281 ldd R22,z+2
04EC 7381 ldd R23,z+3
04EE 7A93 st -y,R23
04F0 6A93 st -y,R22
04F2 5A93 st -y,R21
04F4 4A93 st -y,R20
04F6 8201 movw R16,R4
04F8 9301 movw R18,R6
04FA 0E940000 xcall div32u
04FE 80E0 ldi R24,<_DiskInfo+24
0500 90E0 ldi R25,>_DiskInfo+24
0502 F101 movw R30,R2
0504 E80F add R30,R24
0506 F91F adc R31,R25
0508 0083 std z+0,R16
050A 1183 std z+1,R17
050C 2283 std z+2,R18
050E 3383 std z+3,R19
0510 ; #if FS_DEBUG_EN
0510 ; #if USART1_EN
0510 ; {
0510 ; Uart1_SendString("\n 6.RootSecCnt:");//根目录占扇区数
0510 00E0 ldi R16,<L66
0512 10E0 ldi R17,>L66
0514 0E940000 xcall _Uart1_SendString
0518 ; PUT_INT32U_DecTOString(DiskInfo[i].RootSecCnt);
0518 8EE2 ldi R24,46
051A 8A9D mul R24,R10
051C F001 movw R30,R0
051E 80E0 ldi R24,<_DiskInfo+24
0520 90E0 ldi R25,>_DiskInfo+24
0522 E80F add R30,R24
0524 F91F adc R31,R25
0526 0081 ldd R16,z+0
0528 1181 ldd R17,z+1
052A 2281 ldd R18,z+2
052C 3381 ldd R19,z+3
052E 0E940000 xcall _PUT_INT32U_DecTOString
0532 ; }
0532 ; #endif
0532 ; #endif
0532 ;
0532 ; /* 逻辑盘(卷)占扇区数 */
0532 ; temp=((INT16U)Buf[20]<<8)+Buf[19];
0532 F701 movw R30,R14
0534 2388 ldd R2,z+19
0536 F701 movw R30,R14
0538 3488 ldd R3,z+20
053A D32C mov R13,R3
053C C22C mov R12,R2
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?