
Лабораторна робота №6
Тема: Складне програмування
Мета: навчитися користуватися командами для рішення складних задач
Теоретичні відомості
Приклад. Скласти пiдпрограму зсуву елементiв масиву на певне число крокiв вліво.
Блок – схема Програма
org
0800h call
ssuv hlt ssuv: lxi
h,kil mov
b,m lda
krok mov
c,a lxi
d,mas inx
h nn1: dcx
h dcr
c jnz
nn1 next: ldax
d mov
m,a inx
h inx
d dcr
b jnz
next ret
ds
10 kil: db
5 mas:
db 5,4,8,19,2 krok: db
7
end
HL
kil B
{(HL)} A
(krok)
C
A DE
mas HL
HL + 1
HL
HL - 1 C
C - 1
ні
так
A
{(DE)} {(HL)}
A
HL
HL
+ 1 DE
DE + 1 B
B - 1
ні
так
Завдання: Написати алгоритм і програму у відповідності з вказаним варіантом. Програму розпочати з адреси 800H+N, N - номер варіанту. Програму відлагодити за допомогою емулятору, перевірити результати.
Варiант 1
Використовуючи цикли, скласти програму, яка обчислює n-ий член послiдовностi, заданої рекурентним спiввiдношенням:
Xn= Xn-1 + Xn-2, X0=X1=1;
Варiант 2
Використовуючи цикли, скласти програму, яка обчислює n-ий член послiдовностi, заданої рекурентним спiввiдношенням:
Xn= 2* Xn-1 + 3 * Xn-2, X0=0; X1=9;
Варiант 3
Використовуючи цикли, скласти програму, яка обчислює n-ий член послiдовностi, заданої рекурентним спiввiдношенням:
Xn = Xn-1 + Xn-2 + Xn-3 , X0=X1=1; X2=6;
Варiант 4
Використовуючи цикли, скласти програму, яка обчислює n-ий член послiдовностi, заданої рекурентним спiввiдношенням:
Xn = Xn-1 + 4 * Xn-3 , X0=X1=X2=2;
Варiант 5
Обчислити кiлькiсть одиниць в 8-розрядному кодi.
Варiант 6
Скласти пiдпрограму затримання на час ~ 20 мкс.
Варiант 7
Скласти пiдпрограму, яка підраховує кількість елементiв однобайтного масиву, що більше 100.
Варiант 8
Скласти пiдпрограму зсуву елементiв масиву на певне число крокiв вправо.
Варiант 9
Скласти пiдпрограму порiвняння двох масивiв, сформувати масив з номерами елементiв, якi не порівнялись.
Варiант 10
Скласти пiдпрограму порiвняння двох масивiв, елементам обох масивiв, якi не порівнялись, привласнити код 00h.
Варiант 11
Скласти пiдпрограму порiвняння двох однобайтних масивiв, знайти
суму елементiв, якi порівнялись.
Варiант 12
Cкласти пiдпрограму заповнення областi пам'ятi const.
Варiант 13
Cкласти пiдпрограму привласнення певного коду заданому елементу масиву.
Варiант 14
Cкласти пiдпрограму читання заданого елемента масиву.
Варiант 15
Скласти пiдпрограму порiвняння двох 16-бiтних кодiв, в акумулятор занести 1, якщо 1-ий код бiльше другого, 0-якщо коди еквiвалентнi i 0FFH, в iншому випадку.
Варiант 16
Скласти пiдпрограму збереження змiсту всiх РЗП в пам'ятi користувача i пiдпрограму вiдновлення їх з пам'ятi.
Варiант 17
Використовуючи цикли, скласти програму, яка обчислює n-ий член послiдовностi, заданої рекурентним спiввiдношенням:
Xn = Xn-1 + 2 * (Xn-2 + 1) , X0=0;X1=1;
Варiант 18
В масивi однобайтних чисел пiдрахувати кiлькiсть чисел бiльших 10, рiвних 0 i всiх iнших.
Варiант 19
Використовуючи цикли, скласти програму, яка обчислює n-ий член послiдовностi, заданої рекурентним спiввiдношенням:
Xn = Xn-1 + Xn-2, X0=X1=1;
Варiант 20
Використовуючи цикли, скласти програму, яка обчислює n-ий член послiдовностi, заданої рекурентним спiввiдношенням:
Xn = 2* Xn-1 + 3 * Xn-2, X0=0; X1=9;
Варiант 21
Використовуючи цикли, скласти програму, яка обчислює n-ий член послiдовностi, заданої рекурентним спiввiдношенням:
Xn = Xn-1 + Xn-2 + Xn-3 , X0=X1=1; X2=6;
Варiант 22
Використовуючи цикли, скласти програму, яка обчислює n-ий член послiдовностi, заданої рекурентним спiввiдношенням:
Xn = Xn-1 + 4 * Xn-3 , X0=X1=X2=2;
Варiант 23
Обчислити кiлькiсть одиниць в 8-розрядному кодi.
Варiант 24
Скласти пiдпрограму затримання на час ~ 20 мкс.
Варiант 25
Скласти пiдпрограму, яка підраховує кількість елементiв однобайтного масиву, що менше 100.
Варiант 26
Скласти пiдпрограму зсуву елементiв масиву на певне число крокiв вправо.
Варiант 27
Скласти пiдпрограму порiвняння двох масивiв, сформувати масив з номерами елементiв, якi не порівнялись.
Варiант 28
Скласти пiдпрограму порiвняння двох масивiв, елементам обох масивiв, якi не порівнялись, привласнити код 00h.
Варiант 29
Скласти пiдпрограму порiвняння двох однобайтних масивiв, знайти суму елементiв, якi порівнялись.
Варiант 30
Cкласти пiдпрограму заповнення областi пам'ятi const.
Контрольні питання:
Яким чином можна організувати рекурсію і де краще розташувати початкові значення ?
Що таке підпрограма і які команди використовують для виклику підпрограми ?
Для чого використовується стек при роботі з підпрограмами ?