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

4) Команди з бітами (bit and bit-test instructions)

ror msk ; Rotate right through carry - Циклічний зсув (маски msk) праворуч

; через перенесення: Rd(7) <= C, Rd(n) <= Rd(n+1), C <= Rd(0)

clc ; Clear Carry - Очистити прапор перенесення: С <= 0

5) Команди керування мк (mcu control instructions)

nop ; No operation - Порожня команда

Використані мнемокоди команд (витяг з файлу лістинга 10func.lst) ATmega8515 instruction use summary:

add, sub, mul, dec, or, ori, neg, rjmp, brge, brne, brpl, cpi, mov, ldi, ld, st, ror, clc, nop

Instructions used: 19 out of 110 (17.3%)

ЗАВДАННЯ НА СРС: Написати приклади команд з використанням цих мнемокодів. Вказівка: Звернути увагу на припустимі операнди.

КОНТРОЛЬНІ ЗАПИТАННЯ ТА ВПРАВИ

  1. Запис масиву РФ – ОЗП *(з різними адресами та напрямками їх зміни).

  2. Завантаження ОЗП – РФ. *

  3. Перезапис масиву ОЗП – ОЗП. *

  4. Перевантаження масиву РФ – РФ **(з різними операціями над даними).

  5. Запис масиву з наступним завантаження РФ – ОЗП – РФ. **

  6. Завантаження масиву з наступним записом ОЗП – РФ – ОЗП. **

  7. …

НЕВІРНО

Мортон. с. 54

ВІРНО: vprava02. Написати програму з п'яти команд для запису К чисел 0…К-1 до регістрів R0…R(К-1), у прикладі: 15 чисел 0…14 до регістрів R0…R14.

.def tmp = r16 ; Тимчасові дані

.equ K = $F ; Кількість К чисел 0…K-1 і регістрів R0…R(К-1)

LOOP: ; Цикл (петля)

st Z+,tmp ; R0 <= 0, R1 <= 1, R2 <= 2, …, R14 <= 0xE

inc tmp ; tmp = 0 => 1, 1 => 2, …, 14 => 15

cpi tmp,K ; tmp - 15

brne LOOP ; Якщо tmp != 15 (Z = 0), перехід до LOOP, інакше (tmp = 15,

; Z = 1), вихід з циклу LOOP на END

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

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

vprava01. Написати програму для завантаження до регістрів Rі кількості К чисел: N = 10і, де і = 5, 6, … (5+К-1) наприклад, до регістрів R5, R6, …, R19 записати 15 чисел 50, 60, …, 190.

.def tmp = r16 ; Тимчасові дані

.equ K = $F ; Кількість К чисел 0…K-1 і регістрів R0…R(К-1)

LOOP: ; Цикл (петля)

st Z+,tmp ; R0 <= 0, R1 <= 1, R2 <= 2, …, R14 <= 0xE

inc tmp ; tmp = 0 => 1, 1 => 2, …, 14 => 15

cpi tmp,K ; tmp - 15

brne LOOP ; Якщо tmp != 15 (Z = 0), перехід до LOOP, інакше (tmp = 15,

; Z = 1), вихід з циклу LOOP на END

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

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

vprava01. Написати програму для запису до регістрів R5, R6, …, R(5+К-1) кількість К чисел: 50, 60, …,10(5+К-1) , наприклад, до регістрів R5…R19 записати 15 чисел 50, 60, …, 190 .

.def tmp = r16 ; Тимчасові дані

.equ K = $F ; Кількість К чисел 0…K-1 і регістрів R0…R(К-1)

LOOP: ; Цикл (петля)

st Z+,tmp ; R0 <= 0, R1 <= 1, R2 <= 2, …, R14 <= 0xE

inc tmp ; tmp = 0 => 1, 1 => 2, …, 14 => 15

cpi tmp,K ; tmp - 15

brne LOOP ; Якщо tmp != 15 (Z = 0), перехід до LOOP, інакше (tmp = 15,

; Z = 1), вихід з циклу LOOP на END

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

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

Ax3 + Bx2 + Cx + D