📄 mp3_player_06.lss
字号:
10ca: 90 e0 ldi r25, 0x00 ; 0
10cc: a0 e0 ldi r26, 0x00 ; 0
10ce: b0 e0 ldi r27, 0x00 ; 0
10d0: e8 22 and r14, r24
10d2: f9 22 and r15, r25
10d4: 0a 23 and r16, r26
10d6: 1b 23 and r17, r27
10d8: f7 01 movw r30, r14
10da: ee 0f add r30, r30
10dc: ff 1f adc r31, r31
10de: ee 0f add r30, r30
10e0: ff 1f adc r31, r31
10e2: e8 0d add r30, r8
10e4: f9 1d adc r31, r9
10e6: 60 81 ld r22, Z
10e8: 71 81 ldd r23, Z+1 ; 0x01
10ea: 82 81 ldd r24, Z+2 ; 0x02
10ec: 93 81 ldd r25, Z+3 ; 0x03
10ee: 18 c0 rjmp .+48 ; 0x1120 <__stack+0x21>
}
else
{
offset=cluster%256;//find the position
sector=((unsigned int *)buffer)[offset];
10f0: 8f ef ldi r24, 0xFF ; 255
10f2: 90 e0 ldi r25, 0x00 ; 0
10f4: a0 e0 ldi r26, 0x00 ; 0
10f6: b0 e0 ldi r27, 0x00 ; 0
10f8: e8 22 and r14, r24
10fa: f9 22 and r15, r25
10fc: 0a 23 and r16, r26
10fe: 1b 23 and r17, r27
1100: f7 01 movw r30, r14
1102: ee 0f add r30, r30
1104: ff 1f adc r31, r31
1106: e8 0d add r30, r8
1108: f9 1d adc r31, r9
110a: 80 81 ld r24, Z
110c: 91 81 ldd r25, Z+1 ; 0x01
110e: dc 01 movw r26, r24
1110: bd 01 movw r22, r26
1112: 88 27 eor r24, r24
1114: 99 27 eor r25, r25
1116: 04 c0 rjmp .+8 ; 0x1120 <__stack+0x21>
1118: 68 ef ldi r22, 0xF8 ; 248
111a: 7f ef ldi r23, 0xFF ; 255
111c: 8f ef ldi r24, 0xFF ; 255
111e: 9f e0 ldi r25, 0x0F ; 15
1120: c0 50 subi r28, 0x00 ; 0
1122: de 4f sbci r29, 0xFE ; 254
1124: 0f b6 in r0, 0x3f ; 63
1126: f8 94 cli
1128: de bf out 0x3e, r29 ; 62
112a: 0f be out 0x3f, r0 ; 63
112c: cd bf out 0x3d, r28 ; 61
112e: df 91 pop r29
1130: cf 91 pop r28
1132: 1f 91 pop r17
1134: 0f 91 pop r16
1136: ff 90 pop r15
1138: ef 90 pop r14
113a: df 90 pop r13
113c: cf 90 pop r12
113e: bf 90 pop r11
1140: af 90 pop r10
1142: 9f 90 pop r9
1144: 8f 90 pop r8
1146: 08 95 ret
00001148 <FAT_FindFreeCluster>:
}
return (unsigned long)sector;//return the cluste number
}
/*unsigned long FAT_NextCluster_NEW(unsigned long cluster)
{
//BYTE buffer[512];
BYTE temp;
DWORD sector;
DWORD offset;
if(cluster<2)return 0x0ffffff8;
if(FAT32_Enable)temp = 127;
else temp = 255;
offset = cluster/(temp+1);
sector=FirstFATSector+offset;//calculate the actual sector where the FAT placed
offset=cluster%(temp+1);//find the position //计算出在表中的偏移量
cluster -= offset;//找出需要的起始位置 ,以便于当前保存的起始簇号比较
if(TABLE_READ == 0 || cluster != START_CLUSTER)//从未读过 or 不在已有的FAT表内 需重新读
{
if(FAT_ReadSector(sector,FAT_TABLE))return 0x0ffffff8;//read fat table / return 0xfff8 when error occured
START_CLUSTER = cluster;
TABLE_READ = 1;
}
// if(cluster != START_CLUSTER)//不在已有的FAT表内 需重新读
// {
// if(FAT_ReadSector(sector,FAT_TABLE))return 0x0ffffff8;//read fat table / return 0xfff8 when error occured
// START_CLUSTER = cluster;
// TABLE_READ = 1;
// }
if(FAT32_Enable)
{
// offset=cluster%128;//find the position
sector=((unsigned long *)FAT_TABLE)[offset];
}
else
{
// offset=cluster%256;//find the position
sector=((unsigned int *)FAT_TABLE)[offset];
}
return (unsigned long)sector;//return the cluste number
}*/
//在FAT表内找空簇
//Find a free cluster return the cluster number
unsigned long FAT_FindFreeCluster()
{
1148: 8f 92 push r8
114a: 9f 92 push r9
114c: af 92 push r10
114e: bf 92 push r11
1150: cf 92 push r12
1152: df 92 push r13
1154: ef 92 push r14
1156: ff 92 push r15
1158: 0f 93 push r16
115a: 1f 93 push r17
115c: cf 93 push r28
115e: df 93 push r29
1160: cd b7 in r28, 0x3d ; 61
1162: de b7 in r29, 0x3e ; 62
1164: c0 50 subi r28, 0x00 ; 0
1166: d2 40 sbci r29, 0x02 ; 2
1168: 0f b6 in r0, 0x3f ; 63
116a: f8 94 cli
116c: de bf out 0x3e, r29 ; 62
116e: 0f be out 0x3f, r0 ; 63
1170: cd bf out 0x3d, r28 ; 61
BYTE buffer[512];
//DWORD sector;
unsigned int i;
unsigned long cnt;
// sector=FirstFATSector+offset;//calculate the actual sector
//sector=FirstFATSector;
if(FAT32_Enable)
1172: 80 91 ca 01 lds r24, 0x01CA
1176: 88 23 and r24, r24
1178: 21 f4 brne .+8 ; 0x1182 <FAT_FindFreeCluster+0x3a>
117a: ee 24 eor r14, r14
117c: ff 24 eor r15, r15
117e: 87 01 movw r16, r14
1180: 8e c0 rjmp .+284 ; 0x129e <FAT_FindFreeCluster+0x156>
1182: ee 24 eor r14, r14
1184: ff 24 eor r15, r15
1186: 87 01 movw r16, r14
1188: aa 24 eor r10, r10
118a: bb 24 eor r11, r11
118c: 65 01 movw r12, r10
118e: 40 c0 rjmp .+128 ; 0x1210 <FAT_FindFreeCluster+0xc8>
{
for(cnt=0;cnt<FATsectors;cnt++)//find in the FAT table
{
if(FAT_ReadSector(FirstFATSector+cnt,buffer))return 1;//error
1190: 60 91 b7 01 lds r22, 0x01B7
1194: 70 91 b8 01 lds r23, 0x01B8
1198: 80 91 b9 01 lds r24, 0x01B9
119c: 90 91 ba 01 lds r25, 0x01BA
11a0: 6e 0d add r22, r14
11a2: 7f 1d adc r23, r15
11a4: 80 1f adc r24, r16
11a6: 91 1f adc r25, r17
11a8: e0 91 cb 01 lds r30, 0x01CB
11ac: f0 91 cc 01 lds r31, 0x01CC
11b0: 4e 01 movw r8, r28
11b2: 08 94 sec
11b4: 81 1c adc r8, r1
11b6: 91 1c adc r9, r1
11b8: a4 01 movw r20, r8
11ba: 09 95 icall
11bc: 88 23 and r24, r24
11be: 09 f0 breq .+2 ; 0x11c2 <FAT_FindFreeCluster+0x7a>
11c0: 7c c0 rjmp .+248 ; 0x12ba <FAT_FindFreeCluster+0x172>
11c2: f4 01 movw r30, r8
11c4: 60 e0 ldi r22, 0x00 ; 0
11c6: 70 e0 ldi r23, 0x00 ; 0
for(i=0;i<128;i++)
{
if(((unsigned long *)buffer)[i]==0x00000000)break;//an unused cluster
11c8: 80 81 ld r24, Z
11ca: 91 81 ldd r25, Z+1 ; 0x01
11cc: a2 81 ldd r26, Z+2 ; 0x02
11ce: b3 81 ldd r27, Z+3 ; 0x03
11d0: 00 97 sbiw r24, 0x00 ; 0
11d2: a1 05 cpc r26, r1
11d4: b1 05 cpc r27, r1
11d6: 39 f0 breq .+14 ; 0x11e6 <FAT_FindFreeCluster+0x9e>
11d8: 6f 5f subi r22, 0xFF ; 255
11da: 7f 4f sbci r23, 0xFF ; 255
11dc: 34 96 adiw r30, 0x04 ; 4
11de: 60 38 cpi r22, 0x80 ; 128
11e0: 71 05 cpc r23, r1
11e2: 49 f0 breq .+18 ; 0x11f6 <FAT_FindFreeCluster+0xae>
11e4: f1 cf rjmp .-30 ; 0x11c8 <FAT_FindFreeCluster+0x80>
}
if(i!=128)
{
cnt=cnt*128+i;
11e6: 9b 01 movw r18, r22
11e8: 44 27 eor r20, r20
11ea: 55 27 eor r21, r21
11ec: 2a 0d add r18, r10
11ee: 3b 1d adc r19, r11
11f0: 4c 1d adc r20, r12
11f2: 5d 1d adc r21, r13
11f4: 66 c0 rjmp .+204 ; 0x12c2 <FAT_FindFreeCluster+0x17a>
11f6: 08 94 sec
11f8: e1 1c adc r14, r1
11fa: f1 1c adc r15, r1
11fc: 01 1d adc r16, r1
11fe: 11 1d adc r17, r1
1200: 80 e8 ldi r24, 0x80 ; 128
1202: 90 e0 ldi r25, 0x00 ; 0
1204: a0 e0 ldi r26, 0x00 ; 0
1206: b0 e0 ldi r27, 0x00 ; 0
1208: a8 0e add r10, r24
120a: b9 1e adc r11, r25
120c: ca 1e adc r12, r26
120e: db 1e adc r13, r27
1210: 80 91 cd 01 lds r24, 0x01CD
1214: 90 91 ce 01 lds r25, 0x01CE
1218: a0 91 cf 01 lds r26, 0x01CF
121c: b0 91 d0 01 lds r27, 0x01D0
1220: e8 16 cp r14, r24
1222: f9 06 cpc r15, r25
1224: 0a 07 cpc r16, r26
1226: 1b 07 cpc r17, r27
1228: 08 f4 brcc .+2 ; 0x122c <FAT_FindFreeCluster+0xe4>
122a: b2 cf rjmp .-156 ; 0x1190 <FAT_FindFreeCluster+0x48>
122c: 46 c0 rjmp .+140 ; 0x12ba <FAT_FindFreeCluster+0x172>
return cnt;//return the free cluster number
}
}
}
else
{
for(cnt=0;cnt<FATsectors;cnt++)//find in the FAT table
{
if(FAT_ReadSector(FirstFATSector+cnt,buffer))return 1;//error
122e: 60 91 b7 01 lds r22, 0x01B7
1232: 70 91 b8 01 lds r23, 0x01B8
1236: 80 91 b9 01 lds r24, 0x01B9
123a: 90 91 ba 01 lds r25, 0x01BA
123e: 6e 0d add r22, r14
1240: 7f 1d adc r23, r15
1242: 80 1f adc r24, r16
1244: 91 1f adc r25, r17
1246: e0 91 cb 01 lds r30, 0x01CB
124a: f0 91 cc 01 lds r31, 0x01CC
124e: 6e 01 movw r12, r28
1250: 08 94 sec
1252: c1 1c adc r12, r1
1254: d1 1c adc r13, r1
1256: a6 01 movw r20, r12
1258: 09 95 icall
125a: 88 23 and r24, r24
125c: 71 f5 brne .+92 ; 0x12ba <FAT_FindFreeCluster+0x172>
125e: f6 01 movw r30, r12
1260: 60 e0 ldi r22, 0x00 ; 0
1262: 70 e0 ldi r23, 0x00 ; 0
for(i=0;i<256;i++)
{
if(((unsigned int *)buffer)[i]==0x0000)break;//an unused cluster
1264: 80 81 ld r24, Z
1266: 91 81 ldd r25, Z+1 ; 0x01
1268: 89 2b or r24, r25
126a: 41 f0 breq .+16 ; 0x127c <FAT_FindFreeCluster+0x134>
126c: 6f 5f subi r22, 0xFF ; 255
126e: 7f 4f sbci r23, 0xFF ; 255
1270: 32 96 adiw r30, 0x02 ; 2
1272: 91 e0 ldi r25, 0x01 ; 1
1274: 60 30 cpi r22, 0x00 ; 0
1276: 79 07 cpc r23, r25
1278: 69 f0 breq .+26 ; 0x1294 <FAT_FindFreeCluster+0x14c>
127a: f4 cf rjmp .-24 ; 0x1264 <FAT_FindFreeCluster+0x11c>
}
if(i!=256)
{
cnt=cnt*256+i;
127c: 50 2f mov r21, r16
127e: 4f 2d mov r20, r15
1280: 3e 2d mov r19, r14
1282: 22 27 eor r18, r18
1284: cb 01 movw r24, r22
1286: aa 27 eor r26, r26
1288: bb 27 eor r27, r27
128a: 28 0f add r18, r24
128c: 39 1f adc r19, r25
128e: 4a 1f adc r20, r26
1290: 5b 1f adc r21, r27
1292: 17 c0 rjmp .+46 ; 0x12c2 <FAT_FindFreeCluster+0x17a>
1294: 08 94 sec
1296: e1 1c adc r14, r1
1298: f1 1c adc r15, r1
129a: 01 1d adc r16, r1
129c: 11 1d adc r17, r1
129e: 80 91 cd 01 lds r24, 0x01CD
12a2: 90 91 ce 01 lds r25, 0x01CE
12a6: a0 91 cf 01 lds r26, 0x01CF
12aa: b0 91 d0 01 lds r27, 0x01D0
12ae: e8 16 cp r14, r24
12b0: f9 06 cpc r15, r25
12b2: 0a 07 cpc r16, r26
12b4: 1b 07 cpc r17, r27
12b6: 08 f4 brcc .+2 ; 0x12ba <FAT_FindFreeCluster+0x172>
12b8: ba cf rjmp .-140 ; 0x122e <FAT_FindFreeCluster+0xe6>
12ba: 21 e0 ldi r18, 0x01 ; 1
12bc: 30 e0 ldi r19, 0x00 ; 0
12be: 40 e0 ldi r20, 0x00 ; 0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -