arm-17 писал(а):Да я азы программирования знаю. Может ближе к делу. )))
Ща доедем, я в онлайне разбираюсь с твоей программой, т.е. не смотрел ее до этого
Продолжим:
Доехали до Inf и rjmp Inf, приплыли, хрень, выходим из дебагера
Смотрим прогу, видим какой-то Forward:;(ПРИБАВИТь), что как бэ намекает, ок после настройки стека добавляем: rjmp Forward, компилим, запускаем дебагер.
4 раза f11 и мы уже на месте.
Видим "inc temp", ставим курсор на temp и появляется подсказка, что это r16.
На моем скриншоте регистры уже видны при дебаженье, если нет то в view/register.
Кликаем на r16 и записываем туда 23, жмем f11, регистр прибавляет единицу как и положено.
Тут задаем себе вопрос: "если я знаю азы программирования, почему я не могу сам проверить"
доезжаем до rcall bin16_ascii.
Жмем f11, еще раз, пипец, еще f11, пипец, еще f11, пипец, разрыв шаблона, ладно жмем дальше, все зациклилось на _bcd4, вручную будет долго, ладно, ставим точку останова после "brcs _bcd4", жмем run (f5), остановились на breakpoint,
какой-то "push temp", какой-то "pop temp". Ладно добираемся до ret, он хоть есть. Опс, вывалились на какой-то "reti ;выход из обработчика", хм, глюк? делаем reset, жмем run ( у нас стоит точка останова в нужном месте). Медленно жмем f11, какой-то "push temp", какой-то "pop temp". Опять reti. Чозанах?
Ага, "Forward:" оказался куском прерывания, и bin16_ascii тож в прерывании вызывается. Ой, они же меняют кучу регистров, а я их нигде не сохранял при вызове прерывания, бедная основная программа, она и не знает, что регистры искажаются в прерывании как хотят