📄 output.lss
字号:
output.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 000000be 00800100 000014dc 00001570 2**0
CONTENTS, ALLOC, LOAD, DATA
1 .text 000014dc 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
2 .bss 0000022c 008001be 008001be 0000162e 2**0
ALLOC
3 .noinit 00000000 008003ea 008003ea 0000162e 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 0000162e 2**0
CONTENTS
5 .stab 000030a8 00000000 00000000 00001630 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 0000134a 00000000 00000000 000046d8 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 46 00 jmp 0x8c
4: 0c 94 63 00 jmp 0xc6
8: 0c 94 63 00 jmp 0xc6
c: 0c 94 63 00 jmp 0xc6
10: 0c 94 63 00 jmp 0xc6
14: 0c 94 63 00 jmp 0xc6
18: 0c 94 63 00 jmp 0xc6
1c: 0c 94 63 00 jmp 0xc6
20: 0c 94 63 00 jmp 0xc6
24: 0c 94 63 00 jmp 0xc6
28: 0c 94 63 00 jmp 0xc6
2c: 0c 94 63 00 jmp 0xc6
30: 0c 94 63 00 jmp 0xc6
34: 0c 94 63 00 jmp 0xc6
38: 0c 94 63 00 jmp 0xc6
3c: 0c 94 63 00 jmp 0xc6
40: 0c 94 63 00 jmp 0xc6
44: 0c 94 63 00 jmp 0xc6
48: 0c 94 63 00 jmp 0xc6
4c: 0c 94 63 00 jmp 0xc6
50: 0c 94 63 00 jmp 0xc6
54: 0c 94 63 00 jmp 0xc6
58: 0c 94 63 00 jmp 0xc6
5c: 0c 94 63 00 jmp 0xc6
60: 0c 94 63 00 jmp 0xc6
64: 0c 94 63 00 jmp 0xc6
68: 0c 94 63 00 jmp 0xc6
6c: 0c 94 63 00 jmp 0xc6
70: 0c 94 63 00 jmp 0xc6
74: 0c 94 63 00 jmp 0xc6
78: 0c 94 63 00 jmp 0xc6
7c: 0c 94 63 00 jmp 0xc6
80: 0c 94 63 00 jmp 0xc6
84: 0c 94 63 00 jmp 0xc6
88: 0c 94 63 00 jmp 0xc6
0000008c <__ctors_end>:
8c: 11 24 eor r1, r1
8e: 1f be out 0x3f, r1 ; 63
90: cf ef ldi r28, 0xFF ; 255
92: d0 e1 ldi r29, 0x10 ; 16
94: de bf out 0x3e, r29 ; 62
96: cd bf out 0x3d, r28 ; 61
00000098 <__do_copy_data>:
98: 11 e0 ldi r17, 0x01 ; 1
9a: a0 e0 ldi r26, 0x00 ; 0
9c: b1 e0 ldi r27, 0x01 ; 1
9e: ec ed ldi r30, 0xDC ; 220
a0: f4 e1 ldi r31, 0x14 ; 20
a2: 00 e0 ldi r16, 0x00 ; 0
a4: 0b bf out 0x3b, r16 ; 59
a6: 02 c0 rjmp .+4 ; 0xac
000000a8 <.__do_copy_data_loop>:
a8: 07 90 elpm r0, Z+
aa: 0d 92 st X+, r0
000000ac <.__do_copy_data_start>:
ac: ae 3b cpi r26, 0xBE ; 190
ae: b1 07 cpc r27, r17
b0: d9 f7 brne .-10 ; 0xa8
000000b2 <__do_clear_bss>:
b2: 13 e0 ldi r17, 0x03 ; 3
b4: ae eb ldi r26, 0xBE ; 190
b6: b1 e0 ldi r27, 0x01 ; 1
b8: 01 c0 rjmp .+2 ; 0xbc
000000ba <.do_clear_bss_loop>:
ba: 1d 92 st X+, r1
000000bc <.do_clear_bss_start>:
bc: aa 3e cpi r26, 0xEA ; 234
be: b1 07 cpc r27, r17
c0: e1 f7 brne .-8 ; 0xba
c2: 0c 94 94 09 jmp 0x1328
000000c6 <__bad_interrupt>:
c6: 0c 94 00 00 jmp 0x0
000000ca <_Z10Cache_Initv>:
;*****************************************************************************************************
;*/
void Cache_Init(void)
{
cache.Index = (uint32)(-1); /* 缓冲无效扇区 */
ca: 8f ef ldi r24, 0xFF ; 255
cc: 9f ef ldi r25, 0xFF ; 255
ce: af ef ldi r26, 0xFF ; 255
d0: bf ef ldi r27, 0xFF ; 255
d2: 80 93 be 01 sts 0x01BE, r24
d6: 90 93 bf 01 sts 0x01BF, r25
da: a0 93 c0 01 sts 0x01C0, r26
de: b0 93 c1 01 sts 0x01C1, r27
cache.WbFlag = 0; /* 无需回写 */
e2: 10 92 c2 01 sts 0x01C2, r1
e6: 08 95 ret
000000e8 <_Z10OpenSectorm>:
}
/*
;*****************************************************************************************************
;* 函数名称 : OpenSector
;* 描 述 : 打开指定扇区
;* 输 入 : SecIndex: 扇区号
;*
;* 输 出 : 扇区读写地址
;*****************************************************************************************************
;*/
uint8 *OpenSector(uint32 SecIndex)
{
e8: ef 92 push r14
ea: ff 92 push r15
ec: 0f 93 push r16
ee: 1f 93 push r17
f0: cf 93 push r28
f2: df 93 push r29
f4: 7b 01 movw r14, r22
f6: 8c 01 movw r16, r24
if (cache.Index != SecIndex) /* 当前不是缓冲该扇区 */
f8: a0 91 be 01 lds r26, 0x01BE
fc: b0 91 bf 01 lds r27, 0x01BF
100: c0 91 c0 01 lds r28, 0x01C0
104: d0 91 c1 01 lds r29, 0x01C1
108: a6 17 cp r26, r22
10a: b7 07 cpc r27, r23
10c: c8 07 cpc r28, r24
10e: d9 07 cpc r29, r25
110: 69 f1 breq .+90 ; 0x16c
{
if (cache.WbFlag) /* 缓冲的扇区需要回写 */
112: 80 91 c2 01 lds r24, 0x01C2
116: 88 23 and r24, r24
118: 51 f0 breq .+20 ; 0x12e
{
/* 回写缓冲区的内容到物理扇区 */
if (!WriteIDESector(cache.Index, cache.Buf))
11a: 43 ec ldi r20, 0xC3 ; 195
11c: 51 e0 ldi r21, 0x01 ; 1
11e: bd 01 movw r22, r26
120: ce 01 movw r24, r28
122: 0e 94 bf 08 call 0x117e
126: 88 23 and r24, r24
128: b1 f0 breq .+44 ; 0x156
{
return ((uint8 *)0);
}
cache.WbFlag = 0; /* 无需再回写 */
12a: 10 92 c2 01 sts 0x01C2, r1
}
if (!ReadIDESector(SecIndex, cache.Buf))
12e: 43 ec ldi r20, 0xC3 ; 195
130: 51 e0 ldi r21, 0x01 ; 1
132: c8 01 movw r24, r16
134: b7 01 movw r22, r14
136: 0e 94 5d 08 call 0x10ba
13a: 88 23 and r24, r24
13c: 79 f4 brne .+30 ; 0x15c
{
cache.Index = (uint32)(-1); /* 缓冲区的内容可能已脏 */
13e: 8f ef ldi r24, 0xFF ; 255
140: 9f ef ldi r25, 0xFF ; 255
142: af ef ldi r26, 0xFF ; 255
144: bf ef ldi r27, 0xFF ; 255
146: 80 93 be 01 sts 0x01BE, r24
14a: 90 93 bf 01 sts 0x01BF, r25
14e: a0 93 c0 01 sts 0x01C0, r26
152: b0 93 c1 01 sts 0x01C1, r27
return ((uint8 *)0);
156: 80 e0 ldi r24, 0x00 ; 0
158: 90 e0 ldi r25, 0x00 ; 0
15a: 0a c0 rjmp .+20 ; 0x170
}
cache.Index = SecIndex; /* 当前缓冲该扇区 */
15c: e0 92 be 01 sts 0x01BE, r14
160: f0 92 bf 01 sts 0x01BF, r15
164: 00 93 c0 01 sts 0x01C0, r16
168: 10 93 c1 01 sts 0x01C1, r17
}
return cache.Buf; /* 返回缓冲区地址 */
16c: 83 ec ldi r24, 0xC3 ; 195
16e: 91 e0 ldi r25, 0x01 ; 1
170: df 91 pop r29
172: cf 91 pop r28
174: 1f 91 pop r17
176: 0f 91 pop r16
178: ff 90 pop r15
17a: ef 90 pop r14
17c: 08 95 ret
0000017e <_Z11WriteSectorv>:
}
/*
;*****************************************************************************************************
;* 函数名称 : WriteSector
;* 描 述 : 写已打开的扇区
;* 输 入 : 无
;*
;* 输 出 : 无
;*****************************************************************************************************
;*/
void WriteSector(void)
{
cache.WbFlag = 1; /* 切换时需回写扇区 */
17e: 81 e0 ldi r24, 0x01 ; 1
180: 80 93 c2 01 sts 0x01C2, r24
184: 08 95 ret
00000186 <_Z14CacheWriteBackv>:
}
/*
;*****************************************************************************************************
;* 函数名称 : CacheWriteBack
;* 描 述 : 回写已打开的扇区
;* 输 入 : 无
;*
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 CacheWriteBack(void)
{
if (cache.WbFlag) /* 需回写扇区 */
186: 80 91 c2 01 lds r24, 0x01C2
18a: 88 23 and r24, r24
18c: 99 f0 breq .+38 ; 0x1b4
{
/* 回写缓冲区的内容到物理扇区 */
if (!WriteIDESector(cache.Index, cache.Buf))
18e: 43 ec ldi r20, 0xC3 ; 195
190: 51 e0 ldi r21, 0x01 ; 1
192: 60 91 be 01 lds r22, 0x01BE
196: 70 91 bf 01 lds r23, 0x01BF
19a: 80 91 c0 01 lds r24, 0x01C0
19e: 90 91 c1 01 lds r25, 0x01C1
1a2: 0e 94 bf 08 call 0x117e
1a6: 88 23 and r24, r24
1a8: 19 f4 brne .+6 ; 0x1b0
{
return FALSE;
1aa: 80 e0 ldi r24, 0x00 ; 0
1ac: 90 e0 ldi r25, 0x00 ; 0
1ae: 08 95 ret
}
cache.WbFlag = 0; /* 无需再回写 */
1b0: 10 92 c2 01 sts 0x01C2, r1
}
return TRUE;
1b4: 81 e0 ldi r24, 0x01 ; 1
1b6: 90 e0 ldi r25, 0x00 ; 0
}
1b8: 08 95 ret
1ba: 08 95 ret
000001bc <_Z9Disk_Initv>:
;* 输 出 : TRUE OR FALSE
;*****************************************************************************************************
;*/
uint8 Disk_Init(void)
{
1bc: 8f 92 push r8
1be: 9f 92 push r9
1c0: af 92 push r10
1c2: bf 92 push r11
1c4: df 92 push r13
1c6: ef 92 push r14
1c8: ff 92 push r15
1ca: 0f 93 push r16
1cc: 1f 93 push r17
1ce: cf 93 push r28
1d0: df 93 push r29
uint8 *Buf;
uint8 NumFATs;
uint32 RootSecCnt;
uint32 FATSz;
uint32 TotSec;
if (!Init_IDE())
1d2: 0e 94 0a 08 call 0x1014
1d6: 88 23 and r24, r24
1d8: 09 f4 brne .+2 ; 0x1dc
1da: fd c0 rjmp .+506 ; 0x3d6
{
return FALSE;
}
Buf = OpenSector(0);
1dc: 60 e0 ldi r22, 0x00 ; 0
1de: 70 e0 ldi r23, 0x00 ; 0
1e0: 80 e0 ldi r24, 0x00 ; 0
1e2: 90 e0 ldi r25, 0x00 ; 0
1e4: 0e 94 74 00 call 0xe8
1e8: 7c 01 movw r14, r24
if (Buf == NULL)
1ea: 00 97 sbiw r24, 0x00 ; 0
1ec: 09 f4 brne .+2 ; 0x1f0
1ee: f8 c0 rjmp .+496 ; 0x3e0
{
return FALSE;
}
/* 每扇区字节数 */
if (GET_UINT16(Buf, BPB_BytsPerSec) != 512) /* 必须为512 */
1f0: fc 01 movw r30, r24
1f2: 83 85 ldd r24, Z+11 ; 0x0b
1f4: 28 2f mov r18, r24
1f6: 33 27 eor r19, r19
1f8: 84 85 ldd r24, Z+12 ; 0x0c
1fa: 99 27 eor r25, r25
1fc: 98 2f mov r25, r24
1fe: 88 27 eor r24, r24
200: 28 2b or r18, r24
202: 39 2b or r19, r25
204: 20 50 subi r18, 0x00 ; 0
206: 32 40 sbci r19, 0x02 ; 2
208: 09 f0 breq .+2 ; 0x20c
20a: e5 c0 rjmp .+458 ; 0x3d6
{
return FALSE;
}
/* 检查0扇区末尾是否为0xAA55 */
if (GET_UINT16(Buf, 510) != 0xAA55)
20c: 4e ef ldi r20, 0xFE ; 254
20e: 51 e0 ldi r21, 0x01 ; 1
210: e4 0e add r14, r20
212: f5 1e adc r15, r21
214: f7 01 movw r30, r14
216: 81 91 ld r24, Z+
218: 7f 01 movw r14, r30
21a: 28 2f mov r18, r24
21c: 33 27 eor r19, r19
21e: 80 81 ld r24, Z
220: 41 e0 ldi r20, 0x01 ; 1
222: 5e ef ldi r21, 0xFE ; 254
224: e4 0e add r14, r20
226: f5 1e adc r15, r21
228: 99 27 eor r25, r25
22a: 98 2f mov r25, r24
22c: 88 27 eor r24, r24
22e: 28 2b or r18, r24
230: 39 2b or r19, r25
232: 25 55 subi r18, 0x55 ; 85
234: 3a 4a sbci r19, 0xAA ; 170
236: 09 f0 breq .+2 ; 0x23a
238: ce c0 rjmp .+412 ; 0x3d6
{
return FALSE;
}
/* 保留扇区数 */
/* 第一张FAT表开始扇区 */
FS_FATStartSec = GET_UINT16(Buf, BPB_RsvdSecCnt);
23a: f7 01 movw r30, r14
23c: d6 84 ldd r13, Z+14 ; 0x0e
23e: d0 92 cd 03 sts 0x03CD, r13
/* FAT表数 */
NumFATs = Buf[BPB_NumFATs];
242: 40 89 ldd r20, Z+16 ; 0x10
/* 每张FAT表占扇区数 */
FATSz = GET_UINT16(Buf, BPB_FATSz16);
244: 86 89 ldd r24, Z+22 ; 0x16
246: 28 2f mov r18, r24
248: 33 27 eor r19, r19
24a: 87 89 ldd r24, Z+23 ; 0x17
24c: 99 27 eor r25, r25
24e: 98 2f mov r25, r24
250: 88 27 eor r24, r24
252: 28 2b or r18, r24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -