Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦП_ч.2_Лаб.W07.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.27 Mб
Скачать

3.9. Зупин програми

З надходженням синхроімпульсів лічильник команд весь час змінює вихідний код для вибору із ЗП програм чергової команди, отже, програму зупинити в принципі неможливо, тому кожна програма має бути нескінченним циклом. Більшість технічних задач і є циклами (наприклад, мигтіння реклами), проте якщо немає потреби повторювати одні й ті ж самі дії (як у нашій "бухгалтерській" задачі), нескінченний цикл організують штучно (команда 2).

END: ;******** НЕСКІНЧЕННИЙ ЦИКЛ ПО ЗАКІНЧЕННІ ПРОГРАМИ

(1) nop ; No operation - Порожня команда (тут її вставлено лише для

; візуалізації циклу під час налагодження програми)

(2) rjmp END ; Relative jump - Відносний перехід (безумовний, до позначки)

4. Команди нашої програми

У додатках (табл. 1…4) наведено команди для МК ATmega8515 фірми Atmel [www.atmel.com/literature, doc2512_m8515.pdf], які виробник поділяє на п'ять груп. Докладнішу інформацію про формат команди, кількість циклів її ви­конання, припустимі операнди тощо та приклади найпростіше отримати в дові­дці пакету AVR Studio 4. Тут вивчатимемо лише команди, що застосовуються в нашій програмі.

1) Арифметичні і логічні команди

(ARITHMETIC AND LOGIC INSTRUCTIONS)

add tmp,r0 ; Add without carry - Додати без перенесення: tmp <= tmp + R0

sub tmp,C ; Subtract without carry - Відняти без перенесення: tmp <= tmp – С

mul xi,xi ; Multiply unsigned - Множення беззнакове: R1:R0 <= xі*xі

dec xi ; Decrement - Декрементувати: xі <= xі – 1

neg tmp ; Two's complement - Виконати операцію доповнення:

; tmp <= $00 – tmp

ori msk,$80 ; Logical OR with immediate - Логічне АБО безпосередньо

; з константою: msk <= msk # $80

or sgn,msk ; Logical OR - Логічне АБО: sign <= sign # msk

2) Команди переходів (branch instructions)

rjmp END ; Relative jump - Відносний перехід (безумовний, до позначки END)

brpl MEM ; Branch if plus - Перехід (умовний, до позначки МЕМ), якщо плюс

; (якщо прапор N=0)

brne LOOP ; Branch if Not Equal - Перехід, якщо не дорівнює (поки Z = 0)

brge MAIN ; Branch if greater or equal, signed - Перехід (умовний, до позначки

; MAIN), якщо більше або дорівнює, з урахуванням знаку

cpi YL,8 ; Compare Register with Immediate - Порівняння безпосереднє:

; YL – 8 (активні прапори Z, N, V, C, H)

3) Команди передачі даних (data transfer instructions)

mov tmp, r0 ; Copy register - Скопіювати регістр (move - пересунути з його

; збереженням у джерелі): tmp <= R0

ldi A,a0 ; Load immediate - Завантажити безпосередньо

; (константу): A <= a0, тобто R18 <= 4

ld tmp,Z+ ; Load indirect and postincrement - Завантажити з непрямою

; адресацією та з постінкрементом: tmp <= (Z), Z <= Z+1,

st -Z,tmp ; Store indirect and predecrement - Записати в пам'ять з непрямою

; адресацією та з переддекрементом: Z <= Z-1, (Z) <= tmp,

st Y+,tmp ; Store indirect and postincrement - Записати в пам'ять з непрямою

; адресацією та з постінкрементом: (Y) <= tmp, Y <= Y+1