У gcc линкуется сначала в формат elf, потом из него выковыирвается hex для флеша и eeprom Если задан ключ отладочной информации -g то в этот elf летит полная информация о номерах строк, именах файлов, ...
В результате дамп elf-файла (с учётом заглядывания avr-objdump в исходные файлы) - это полный-преполный листинг со всеми твоими комментариями и вместе с подлинкованными библиотеками, запускалкой и т.д.
Где-то так:
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 e7 0a jmp 0x15ce <__init>
4: 0c 94 04 0b jmp 0x1608 <__bad_interrupt>
8: 0c 94 04 0b jmp 0x1608 <__bad_interrupt>
c: 0c 94 04 0b jmp 0x1608 <__bad_interrupt>
10: 0c 94 04 0b jmp 0x1608 <__bad_interrupt>
14: 0c 94 04 0b jmp 0x1608 <__bad_interrupt>
18: 0c 94 04 0b jmp 0x1608 <__bad_interrupt>
1c: 0c 94 04 0b jmp 0x1608 <__bad_interrupt>
20: 0c 94 04 0b jmp 0x1608 <__bad_interrupt>
24: 0c 94 f7 19 jmp 0x33ee <__vector_9>
28: 0c 94 2a 19 jmp 0x3254 <__vector_10>
:
:
00001722 :
static FILE console_file = FDEV_SETUP_STREAM(console_putc, console_getc, _FDEV_SETUP_RW);
#define fconsole (&console_file)
void dbg_printf_P(dbg_level lev, const prog_char *fmt, ...)
{
1722: cf 93 push r28
1724: df 93 push r29
1726: cd b7 in r28, 0x3d ; 61
1728: de b7 in r29, 0x3e ; 62
172a: 9d 81 ldd r25, Y+5 ; 0x05
172c: 6e 81 ldd r22, Y+6 ; 0x06
172e: 7f 81 ldd r23, Y+7 ; 0x07
if (lev <= curr_lev) {
1730: 80 91 0e 01 lds r24, 0x010E
1734: 89 17 cp r24, r25
1736: 38 f0 brcs .+14 ; 0x1746
va_list va;
va_start(va, fmt);
vfprintf_P( fconsole, fmt, va);
1738: ae 01 movw r20, r28
173a: 48 5f subi r20, 0xF8 ; 248
173c: 5f 4f sbci r21, 0xFF ; 255
173e: 80 e0 ldi r24, 0x00 ; 0
1740: 91 e0 ldi r25, 0x01 ; 1
1742: 0e 94 c7 23 call 0x478e
1746: df 91 pop r29
1748: cf 91 pop r28
174a: 08 95 ret
0000174c :
va_end(va);
}
}
uint16_t get_tcnt3(void)
{
uint16_t temp;
ATOMIC_CODE( temp = TCNT3; );
174c: 2f b7 in r18, 0x3f ; 63
174e: f8 94 cli
1750: 80 91 88 00 lds r24, 0x0088
1754: 90 91 89 00 lds r25, 0x0089
1758: 2f bf out 0x3f, r18 ; 63
175a: 08 95 ret
0000175c :
return temp;
}
#define CPU_TICK_SCALE ((uint32_t)(((1000000UL * 256) + XTAL_FREQ_HZ / 2) / XTAL_FREQ_HZ))
void report_ex_time( const prog_char *header, uint32_t cpu_ticks)
{
175c: 0f 93 push r16
175e: 1f 93 push r17
1760: cf 93 push r28
1762: df 93 push r29
1764: 8c 01 movw r16, r24
1766: eb 01 movw r28, r22
uint32_t ex_time = (cpu_ticks * CPU_TICK_SCALE + 128) / 256; // CPU ticks to us
1768: ca 01 movw r24, r20
176a: b9 01 movw r22, r18
176c: 23 e2 ldi r18, 0x23 ; 35
176e: 30 e0 ldi r19, 0x00 ; 0
1770: 40 e0 ldi r20, 0x00 ; 0
1772: 50 e0 ldi r21, 0x00 ; 0
1774: 0e 94 0f 27 call 0x4e1e <__mulsi3>
1778: dc 01 movw r26, r24
177a: cb 01 movw r24, r22
p.s. про "прикрутить JMP на обработчик прерывания куда надо" в другой ветке читал?