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

Обсуждаем контроллеры компании 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 выполняет больше пяти итераций.

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

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

Установка счетчика внутреннего цикла должна происходить ВНУТРИ ВНЕШНЕГО ЦИКЛА, а не перед ним.
В результате у Вас после второго входа во внутренний цикл переменная 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

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

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

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