roboforum.ru

Технический форум по робототехнике.
Текущее время: 30 ноя 2024, 15:48

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Команды на ASM в WinAvr
СообщениеДобавлено: 30 окт 2009, 13:01 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Именно обнулить, если меняешь. И - да, при старте там 0.

Вот кусок листинга:
Код:
   a(z1);
  da:   60 91 64 00    lds   r22, 0x0064
  de:   ce 01          movw   r24, r28
  e0:   45 96          adiw   r24, 0x15   ; 21
  e2:   70 e0          ldi   r23, 0x00   ; 0
  e4:   bc df          rcall   .-136       ; 0x5e <a>
   z32+=z1;
  e6:   20 91 64 00    lds   r18, 0x0064
  ea:   80 91 7c 00    lds   r24, 0x007C
  ee:   90 91 7d 00    lds   r25, 0x007D
  f2:   a0 91 7e 00    lds   r26, 0x007E
  f6:   b0 91 7f 00    lds   r27, 0x007F
  fa:   82 0f          add   r24, r18
  fc:   91 1d          adc   r25, r1
  fe:   a1 1d          adc   r26, r1
100:   b1 1d          adc   r27, r1
102:   80 93 7c 00    sts   0x007C, r24
106:   90 93 7d 00    sts   0x007D, r25
10a:   a0 93 7e 00    sts   0x007E, r26
10e:   b0 93 7f 00    sts   0x007F, r27


Если функция a() запишет в R1 что-то отличное от нуля, то z32+=z1 будет неверно вычислено

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Команды на ASM в WinAvr
СообщениеДобавлено: 30 окт 2009, 13:10 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Я почему спросил - если именно "восстанавливать", а не "вообще не трогать", то это значит что обработчик прерывания не может полагаться на то что там 0 и должен записывать его туда сам, если вызывает другие функции, так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Команды на ASM в WinAvr
СообщениеДобавлено: 30 окт 2009, 13:13 
Не в сети
Аватара пользователя

Зарегистрирован: 05 июн 2007, 12:20
Сообщения: 196
Откуда: Киев
прог. языки: C/C++, ASSEMBLER
Короче, лучше __zero_reg__ не трогать :)

_________________
Глюк по-немецки означает "счастье"...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Команды на ASM в WinAvr
СообщениеДобавлено: 30 окт 2009, 13:14 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
А, ну да, про прерываня я забыл. В обработчике прерываний - да, надо сохранять, обнулять, а при выходе восстанавливать.
Вот кусок из мануала соответствующий:
Цитата:
• Fixed registers (r0, r1):
Never allocated by gcc for local data, but often used for fixed purposes:
r0 - temporary register, can be clobbered by any C code (except interrupt handlers
which save it), may be used to remember something for a while within one piece
of assembler code
r1 - assumed to be always zero in any C code, may be used to remember some-
thing for a while within one piece of assembler code, but must then be cleared
after use (clr r1). This includes any use of the [f]mul[s[u]] instructions,
which return their result in r1:r0. Interrupt handlers save and clear r1 on entry,
and restore r1 on exit (in case it was non-zero).

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO