У 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> : : 00001722p.s. про "прикрутить JMP на обработчик прерывания куда надо" в другой ветке читал?: 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