📄 fat16.lst
字号:
1 .file "FAT16.c"
2 .arch atmega32
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:
87 .global ReadBlock
89 ReadBlock:
1:FAT16.c **** //-------------------------------------------------------------------------
2:FAT16.c **** #include <avr/io.h>
3:FAT16.c **** #include <stdint.h>
4:FAT16.c ****
5:FAT16.c **** #include "FAT16.h"
6:FAT16.c **** #include "mmc.h"
7:FAT16.c **** //------------------------------------------------------------------------
8:FAT16.c **** #define SEC_Size 512//every sector's content is 512Byte
9:FAT16.c **** #define MBR_Sector 0 //绝对地址
10:FAT16.c **** #define FAT_Sector 0 //逻辑地址
11:FAT16.c **** //-------------------------------------------------------------------------
12:FAT16.c **** uint8_t BUFFER[SEC_Size];
13:FAT16.c **** uint8_t PB_RelativeSector;//绝对地址和逻辑地址的映射,即add+it=lba,mbr里唯一我们关注的东西
14:FAT16.c **** uint16_t BPB_BytesPerSec;
15:FAT16.c **** uint8_t BPB_SecPerClus;
16:FAT16.c **** uint16_t BPB_RsvdSecCnt;
17:FAT16.c **** uint8_t BPB_NumFATs;
18:FAT16.c **** uint16_t BPB_RootEntCnt;
19:FAT16.c **** uint16_t BPB_TotSec16;
20:FAT16.c **** uint16_t BPB_FATSz16; //FAT占用的sectors
21:FAT16.c **** uint32_t BPB_HiddSec;
22:FAT16.c ****
23:FAT16.c **** //-------------------------------------------------------------------------
24:FAT16.c **** uint8_t ReadBlock(uint32_t LBA){ //绝对地址读一个扇区
91 .LM1:
92 /* prologue: frame size=0 */
93 0000 EF92 push r14
94 0002 FF92 push r15
95 0004 0F93 push r16
96 0006 1F93 push r17
97 /* prologue end (size=4) */
98 0008 7B01 movw r14,r22
99 000a 8C01 movw r16,r24
25:FAT16.c **** mmcReset();
101 .LM2:
102 000c 0E94 0000 call mmcReset
26:FAT16.c **** if(mmcRead(LBA,BUFFER)!=0)return SD_FAIL;
104 .LM3:
105 0010 40E0 ldi r20,lo8(BUFFER)
106 0012 50E0 ldi r21,hi8(BUFFER)
107 0014 C801 movw r24,r16
108 0016 B701 movw r22,r14
109 0018 0E94 0000 call mmcRead
110 001c 8823 tst r24
111 001e 19F0 breq .L2
113 .LM4:
114 0020 81E0 ldi r24,lo8(1)
115 0022 90E0 ldi r25,hi8(1)
116 0024 02C0 rjmp .L1
117 .L2:
27:FAT16.c **** return SD_SUCC;
119 .LM5:
120 0026 80E0 ldi r24,lo8(0)
121 0028 90E0 ldi r25,hi8(0)
122 .L1:
123 /* epilogue: frame size=0 */
124 002a 1F91 pop r17
125 002c 0F91 pop r16
126 002e FF90 pop r15
127 0030 EF90 pop r14
128 0032 0895 ret
129 /* epilogue end (size=5) */
130 /* function ReadBlock size 26 (17) */
132 .Lscope0:
135 .global WriteBlock
137 WriteBlock:
28:FAT16.c **** }
29:FAT16.c **** //-------------------------------------------------------------------------
30:FAT16.c **** uint8_t WriteBlock(uint32_t LBA){ //绝对地址写一个扇区
139 .LM6:
140 /* prologue: frame size=0 */
141 0034 EF92 push r14
142 0036 FF92 push r15
143 0038 0F93 push r16
144 003a 1F93 push r17
145 /* prologue end (size=4) */
146 003c 7B01 movw r14,r22
147 003e 8C01 movw r16,r24
31:FAT16.c **** mmcReset();
149 .LM7:
150 0040 0E94 0000 call mmcReset
32:FAT16.c **** if(mmcWrite(LBA,BUFFER)!=0)return SD_FAIL;
152 .LM8:
153 0044 40E0 ldi r20,lo8(BUFFER)
154 0046 50E0 ldi r21,hi8(BUFFER)
155 0048 C801 movw r24,r16
156 004a B701 movw r22,r14
157 004c 0E94 0000 call mmcWrite
158 0050 8823 tst r24
159 0052 19F0 breq .L4
161 .LM9:
162 0054 81E0 ldi r24,lo8(1)
163 0056 90E0 ldi r25,hi8(1)
164 0058 02C0 rjmp .L3
165 .L4:
33:FAT16.c **** return SD_SUCC;
167 .LM10:
168 005a 80E0 ldi r24,lo8(0)
169 005c 90E0 ldi r25,hi8(0)
170 .L3:
171 /* epilogue: frame size=0 */
172 005e 1F91 pop r17
173 0060 0F91 pop r16
174 0062 FF90 pop r15
175 0064 EF90 pop r14
176 0066 0895 ret
177 /* epilogue end (size=5) */
178 /* function WriteBlock size 26 (17) */
180 .Lscope1:
183 .global ReadFatBlock
185 ReadFatBlock:
34:FAT16.c **** }
35:FAT16.c **** //-------------------------------------------------------------------------
36:FAT16.c **** uint8_t ReadFatBlock(uint32_t Add){ //逻辑地址读一个扇区
187 .LM11:
188 /* prologue: frame size=0 */
189 /* prologue end (size=0) */
190 0068 DC01 movw r26,r24
191 006a CB01 movw r24,r22
37:FAT16.c **** return ReadBlock(Add+PB_RelativeSector);
193 .LM12:
194 006c 2091 0000 lds r18,PB_RelativeSector
195 0070 820F add r24,r18
196 0072 911D adc r25,__zero_reg__
197 0074 A11D adc r26,__zero_reg__
198 0076 B11D adc r27,__zero_reg__
199 0078 BC01 movw r22,r24
200 007a CD01 movw r24,r26
201 007c 0E94 0000 call ReadBlock
38:FAT16.c **** }
203 .LM13:
204 0080 9927 clr r25
205 /* epilogue: frame size=0 */
206 0082 0895 ret
207 /* epilogue end (size=1) */
208 /* function ReadFatBlock size 14 (13) */
210 .Lscope2:
213 .global WriteFatBlock
215 WriteFatBlock:
39:FAT16.c **** //-------------------------------------------------------------------------
40:FAT16.c **** uint8_t WriteFatBlock(uint32_t Add){ //逻辑地址写一个扇区
217 .LM14:
218 /* prologue: frame size=0 */
219 /* prologue end (size=0) */
220 0084 DC01 movw r26,r24
221 0086 CB01 movw r24,r22
41:FAT16.c **** return WriteBlock(Add+PB_RelativeSector);
223 .LM15:
224 0088 2091 0000 lds r18,PB_RelativeSector
225 008c 820F add r24,r18
226 008e 911D adc r25,__zero_reg__
227 0090 A11D adc r26,__zero_reg__
228 0092 B11D adc r27,__zero_reg__
229 0094 BC01 movw r22,r24
230 0096 CD01 movw r24,r26
231 0098 0E94 0000 call WriteBlock
42:FAT16.c **** }
233 .LM16:
234 009c 9927 clr r25
235 /* epilogue: frame size=0 */
236 009e 0895 ret
237 /* epilogue end (size=1) */
238 /* function WriteFatBlock size 14 (13) */
240 .Lscope3:
245 .global CopyBytes
247 CopyBytes:
43:FAT16.c **** //-------------------------------------------------------------------------
44:FAT16.c **** void CopyBytes(uint8_t *ps,uint8_t *pd,uint16_t size){ //内存拷贝
249 .LM17:
250 /* prologue: frame size=0 */
251 /* prologue end (size=0) */
252 00a0 DC01 movw r26,r24
253 00a2 FB01 movw r30,r22
254 .L14:
45:FAT16.c **** for(;size;size--)*pd++=*ps++;
256 .LM18:
257 00a4 4115 cp r20,__zero_reg__
258 00a6 5105 cpc r21,__zero_reg__
259 00a8 29F0 breq .L13
260 00aa 8D91 ld r24,X+
261 00ac 8193 st Z+,r24
262 00ae 4150 subi r20,lo8(-(-1))
263 00b0 5040 sbci r21,hi8(-(-1))
264 00b2 F8CF rjmp .L14
265 .L13:
266 00b4 0895 ret
267 /* epilogue: frame size=0 */
268 /* epilogue: noreturn */
269 /* epilogue end (size=0) */
270 /* function CopyBytes size 11 (11) */
272 .Lscope4:
277 .global IsEqual
279 IsEqual:
46:FAT16.c **** }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -