
- •Содержание
- •1 Лабораторная работа №1
- •Листинг программы
- •1.2 Описание работы программы
- •1.3 Блок схема программы
- •2 Лабораторная работа №2
- •2.1 Листинг программы
- •2.2 Описание работы программы
- •2.3 Блок схема программы
- •3 Лабораторная работа №3
- •3.1 Листинг программы
- •3.2 Описание программы
- •3.3 Блок – схема программы
- •4 Лабораторная работа №4
- •4.1 Листинг программы
- •4.2 Описание работы программы
- •4.3 Блок – схема для лабораторной работы №4
- •5.1 Листинг программы
- •5.2 Описание работы программы
- •5.3 Блок – схема для лабораторной работы №5
- •6 Лабораторная работа №6
- •6.1 Листинг программы
- •6.2 Описание работы программы
- •6.3 Блок – схема для лабораторной работы №6
5.3 Блок – схема для лабораторной работы №5
Блок – схема к лабораторной работе №5 находится в приложении Д. В приложении Д приняты следующие сокращения: ЯП – ячейка памяти, РП – регистровая пара, РОН – регистр общего назначения, ЭМ – элемент массива.
6 Лабораторная работа №6
Написание подпрограммы с организацией вложенного или дополнительного цикла на языке ассемблер микроконтроллера ATmega 8515 фирмы Atmel.
В некоторых случаях требуется организация еще и второго цикла либо внутри основного, либо после него. В этом случае понадобится еще один счетчик цикла, который также необходимо уменьшать на 1 и проверять на обнуление.
В массиве из 29 элементов, первый элемент массива (ЭМ) находится в ячейке памяти с адресом 58410 (адрес следующего ЭМ на 1 больше), найти количество бит, равных лог. 0 в младшей тетраде ЭМ, содержащего четные данные, попадающие в интервал 9810 ≤ х ≤ 20410. Результат поместить, начиная с ЯП с адресом 58810.
6.1 Листинг программы
Необходимо перевести числа из десятичной системы исчисления в шестнадцатеричную:
- 2910 → 1D16;
- 58410 → 024816;
- 9810 → 6216;
- 20410 → СC16;
- 58810 → 024C16;
ldi r29,0x02 ;Загрузить старшую часть адреса ЯП в РОН r29
ldi r28,0x48 ;Загрузить младшую часть адреса ЯП в РОН r28
ldi r16,0x1D ;Создать счетчик цикла ЭМ
clr r20 ;Создать счетчик количества бит равных лог. 0
m1: ld r18, Y ;Загрузить текущий ЭМ в РОН r18 из ЯП, адрес
;которой указан в РП Y
ror r18 ;Сдвинуть данные вправо для последующей
;проверки на нечетность
brcs m2 ;Если флаг С = 1 (данные в РОН r20 нечетные),то
;перейти на метку m2
rol r18 ;Сдвинуть данные влево для восстановления
cpi r18,0x62 ;Сравнить данные в текущем ЭМ с нижней
;границей интервала
brcs m2 ;Если данные в РОН меньше 9810 (не подходят по
;условию) то перейти на метку m2
cpi r20,0xCD ;Сравнить данные в текущем ЭМ с числом 20410
brcs m2 ;Если данные < 9810, то перейти на метку m2
cpi r18,0xCD ;Сравнить данные в r18 с верхней границей
brcc m2 ;Если флаг С=0,(данные ≥20510) перейти на m2
ldi r19,0x04 ;Загружаем число 4 для создания счетчика 2-го
;цикла
m3: ror r18 ;Путем сдвига вправо, выясняем значение
;последнего бита
brcs m4 ;Если счетчик не равен 0, вернуться в начало
;второго цикла
inc r20 ;Если бит равен 0, увеличить счетчик бит на 1
m4: dec r19 ;Уменьшить счетчик 2-го цикла на 1
brne m3 ;Если счетчик не равен 0 то вернуться в начало
;второго цикла
m2: ld r18,-Y ;Используем предекремент задаем адрес след.
;элемента массива
dec r16 ;Уменьшить на 1 счетчик первого цикла
brne m1 ;Если счетчик не равен 0, то вернуться в начало
;первого цикла
sts 0x024C,r20 ;Сохранить кол-во бит с лог. 0 в ЯП 58810
nop ;Конец программы