реклама на сайте
подробности

 
 
> Указатель на функцию в компиляторе WINAVR
Giekelberri
сообщение Feb 16 2011, 12:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 28-01-11
Пользователь №: 62 532



Всем привет!

Не могу понять работу компилятора WINAVR. Есть самый простейший код на С. В функции main() создается указатель на функцию evaluate(). Далее происходит вызов функции используя этот указатель.

Код
void evaluate(void)
{
}
int main(void)
{
    void (*p)(void) = evaluate;
    (*p)();
    return 0;
}


Однако, просмотрев сгенерированный ассемблерный код, получаю следующее (оптимизация отключена, не относящиеся к делу строки удалены):

Код
[b]000000be[/b] <evaluate>:
void evaluate(void)
{
  be:    df 93           push    r29
  c0:    cf 93           push    r28
  c2:    cd b7           in    r28, 0x3d; 61
  c4:    de b7           in    r29, 0x3e; 62
}
  c6:    cf 91           pop    r28
  c8:    df 91           pop    r29
  ca:    08 95           ret

000000cc <main>:
int main(void)
{
  cc:    df 93           push    r29
  ce:    cf 93           push    r28
  d0:    00 d0           rcall    .+0     ; 0xd2 <main+0x6>
  d2:    cd b7           in    r28, 0x3d; 61
  d4:    de b7           in    r29, 0x3e; 62
    void (*p)(void) = evaluate;
  d6:    8f e5           [b]ldi      r24, 0x5F[/b]; 95
  d8:    90 e0    [b]ldi      r25, 0x00[/b]; 0
  da:    9a 83           std    Y+2, r25; 0x02
  dc:    89 83           std    Y+1, r24; 0x01
    (*p)();
  de:    e9 81           ldd    r30, Y+1; 0x01
  e0:    fa 81           ldd    r31, Y+2; 0x02
  e2:    09 95           [b]icall[/b]
    return 0;
  e4:    80 e0           ldi    r24, 0x00; 0
  e6:    90 e0           ldi    r25, 0x00; 0
}
  e8:    0f 90           pop    r0
  ea:    0f 90           pop    r0
  ec:    cf 91           pop    r28
  ee:    df 91           pop    r29
  f0:    08 95           ret


Как видно, указатель на функцию evaluate() инициализируется значением r24:r25 = 5F00. Но почему? Ведь адрес функции evaluate() равен 000000be.

Сообщение отредактировал Giekelberri - Feb 16 2011, 12:21
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 14:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01727 секунд с 7
ELECTRONIX ©2004-2016