Вложеный цикл

Обсуждаем контроллеры компании Atmel.
Ответить
Резистор
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс фев 03, 2013 13:11:59

Вложеный цикл

Сообщение Резистор »

Здравствуйте.

Решил я немного попрограммировать на языке ассемблера. В качестве первой практики написал программу для испытания вложенного цикла( for в for'e )

Пишу для МК attiny2313. Вот код:

Код: Выделить всё

.include "tn2313def.inc"

.def temp = R16
.def temp1 = R17

main:

   ldi temp,   0xA
   ldi temp1, 0x5

   loop_1: ;цикл №1

      loop_2: ;цикл №2

         dec temp1
         brne loop_2

      dec temp
      brne loop_1
rjmp main


Пытаюсь отладить программу в отладчике. На первой итерации цикла №1 всё идёт по плану. Но на второй итерации цикла №1, цикл №2 выполняет больше пяти итераций.

Где я допустил ошибку?
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25121
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Вложеный цикл

Сообщение КРАМ »

Установка счетчика внутреннего цикла должна происходить ВНУТРИ ВНЕШНЕГО ЦИКЛА, а не перед ним.
В результате у Вас после второго входа во внутренний цикл переменная temp1 проскочила ноль и будет декрементироваться 255 раз.

.include "tn2313def.inc"

.def temp = R16
.def temp1 = R17

main:

ldi temp, 0xA
ldi temp1, 0x5

loop_1: ;цикл №1

ldi temp1, 0x5

loop_2: ;цикл №2

dec temp1
brne loop_2

dec temp
brne loop_1
rjmp main
Резистор
Открыл глаза
Сообщения: 63
Зарегистрирован: Вс фев 03, 2013 13:11:59

Re: Вложеный цикл

Сообщение Резистор »

Всё. Понял. Спасибо
Ответить

Вернуться в «AVR»