Заведи секцию .vectors и размести её по нужному адресу в линкерном скрипте. http://www.caxapa.ru/mcu/wwwboard.html?id=44574&todo=full&hilite=.global
Или вообще "забудь об этих мелочей" и пиши: <pre> #define __SFR_OFFSET 0 .nolist #include <avr/io.h> .list .section .eeprom nibble2segs: ; '0' - light .byte /* 0 */ SEG_A & SEG_B & SEG_C & SEG_D & SEG_E & SEG_F .byte /* 1 */ SEG_B & SEG_C .byte /* 2 */ SEG_A & SEG_B & SEG_D & SEG_E & SEG_G .byte /* 3 */ SEG_A & SEG_B & SEG_C & SEG_D & SEG_G ; и так далее .section .text .global main .func main main: ldi tmp0, _BV(ACD) out ACSR, tmp0 ldi tmp0, _BV(CS01) ; CK/8 out TCCR0, tmp0 ldi tmp0, _BV(TOIE0) out TIMSK, tmp0 ser tmp0 ; и так далее .global SIG_OVERFLOW0 SIG_OVERFLOW0: // 512us in isreg,SREG in itmp0,PORTD andi itmp0,0x87 ; set all anodes to off out PORTD,itmp0 ; set PORTB as inputs with pull-ups even keyboard not sampled clr itmp0 ; и так далее </pre> А он сам поставит куда надо rjmp на этот обработчик прерывания. И вообще - смотри ссылку, тут уже обсуждалось, как надо писать на avr-gcc/asm
Или вообще "забудь об этих мелочей" и пиши: <pre> #define __SFR_OFFSET 0 .nolist #include <avr/io.h> .list .section .eeprom nibble2segs: ; '0' - light .byte /* 0 */ SEG_A & SEG_B & SEG_C & SEG_D & SEG_E & SEG_F .byte /* 1 */ SEG_B & SEG_C .byte /* 2 */ SEG_A & SEG_B & SEG_D & SEG_E & SEG_G .byte /* 3 */ SEG_A & SEG_B & SEG_C & SEG_D & SEG_G ; и так далее .section .text .global main .func main main: ldi tmp0, _BV(ACD) out ACSR, tmp0 ldi tmp0, _BV(CS01) ; CK/8 out TCCR0, tmp0 ldi tmp0, _BV(TOIE0) out TIMSK, tmp0 ser tmp0 ; и так далее .global SIG_OVERFLOW0 SIG_OVERFLOW0: // 512us in isreg,SREG in itmp0,PORTD andi itmp0,0x87 ; set all anodes to off out PORTD,itmp0 ; set PORTB as inputs with pull-ups even keyboard not sampled clr itmp0 ; и так далее </pre> А он сам поставит куда надо rjmp на этот обработчик прерывания. И вообще - смотри ссылку, тут уже обсуждалось, как надо писать на avr-gcc/asm