- •Лабораторна робота № 1
- •Короткі відомості з теорії
- •Завдання для домашньої підготовки
- •Завдання до лабораторної роботи
- •Порядок виконання завдання
- •Порядок виконання завдання
- •Порядок виконання завдання
- •Порядок виконання завдання
- •Порядок виконання завдання
- •Завдання для самоперевірки
- •Література
- •Лабораторна робота № 2
- •Короткі відомості з теорії
- •Завдання для домашньої підготовки
- •Завдання до лабораторної роботи
- •Порядок виконання завдання
- •Порядок виконання завдання
- •Порядок виконання завдання
- •Порядок виконання завдання
- •Порядок виконання завдання
- •Робота на навчальній еом
- •Завдання для самоперевірки
- •Література
- •Короткі відомості з теорії
- •Програма 8.6
- •Програма 8.7
- •Програма 8.8
- •Програма 8.9
- •Завдання до домашньої підготовки
- •Завдання до лабораторної роботи
- •Робота на навчальній еом
- •Завдання для самоперевірки
- •Література
- •Лабораторна робота 4 підпрограма і стек
- •Короткі відомості з теорії
- •Завдання для домашньої підготовки
- •Завдання до лабораторної роботи
- •Робота на навчальній еом
- •Завдання для самоперевірки
- •Завдання для домашньої підготовки
- •Завдання до лабораторної роботи
- •Робота на навчальній еом
- •Завдання для самоперевірки
- •Завдання для домашньої підготовки
- •Завдання до лабораторної роботи
- •Робота на навчальній еом
- •Завдання для самоперевірки
- •Завдання для домашньої підготовки
- •Завдання до лабораторної роботи
- •Робота на навчальній еом
- •Завдання для самоперевірки
- •Завдання для домашньої підготовки
- •Завдання до лабораторної роботи
- •Робота на навчальній еом
- •Завдання для самоперевірки
- •Завдання для домашньої підготовки
- •Робота на навчальній еом
- •Завдання для самоперевірки
- •Література
- •Робота на навчальній еом
- •Завдання для самоперевірки
- •Література
- •Завдання для домашньої підготовки
- •Робота на навчальній еом
- •Завдання для самоперевірки
- •Література
Робота на навчальній еом
В навчальній мікро-ЕОМ підпрограма записана в ПЗП за тими ж адресами, що наведені при описуванні підпрограми 8.18. До неї можна звертатися за допомогою команди CALL<A2><A1>. В мікро-ЕОМ є схема звукової сигналізації, що описана в лабораторній роботі 4. Початок підпрограми звукової сигналізації – адреса 0012. Це дозволяє дослідити програму 8.17 без будь-яких її змін. Всі наведені в лабораторній роботі програми, а також порядок їх виконання можуть бути досліджені на навчальній микро-ЕОМ.
Зміст звіту
Звіт повинен містити: 1. Повний перелік арифметичних команд МП БІС КР580ИК80. 2. Програму додавання двох 8-розрядних чисел з отриманням результату в двійково-десятичному коді, розробленого в п. 3. завдання для домашньої підготовки. 3. Результати виконання арифметичних операцій за всіма завданнями.
Завдання для самоперевірки
1. Які команди арифметичних операцій може виконувати МП БІС КР580ИК80?.
2. Сформулюйте правило виконання МП БІС команди DАА.
3. Після яких команд можна здійснювати десятичну корекцію числа акумудятора (виконувати команду DАА)?
7. В чому перевага віднімання функцій, що задані у вигляді таблиць?
8. Подайте числа від 0 до 20 в двійково-десятичному коді.
9. Вкажіть можливі способи подання чисел для МП БІС КР580ИК80.
Література
1. Прангишвили И.В. Микропроцессоры и микро-ЭВМ. – М.: Энергия, 1979.
2. Соучек Б. Микропроцессоры и микро-ЭВМ: Пер. с англ. – М.: Советское радио, 1979.
Лабораторна робота 6
ВИКОНАННЯ АРИФМЕТИЧНИХ ОПЕРАЦІЙ
(множення,ділення та обчислення спеціальних функцій )
Мета роботи:вивчення способів організації і дослідження програм виконання арифметичних операцій.
Короткі відомості з теорії
Множення
чисел.
Існує декілька алогритмів множення
чисел. При першому алгоритмі множення
можна замінити багатократним додаванням,
наприкад
.
Існує один недолік цього способу –
значна тривалість процеса обчислення.
При другому алгоритмі множення
здійснюється в стовпець. Цей алгоритм
застосовується і для множення двійкових
чисел, наприклад
0110 = 610
0011 = 310
–––––––––––
0110
0110
0000
0000
–––––––––––––––––
00010010 = 1810
При обчисленні результату за другим алгоритмом необхідно здійснити багатократне додавання зі зсувом наліво множуваного при одночасній перевірці вмісту розрядів множника починаючи зі сторони його розряду. При цьому якщо в черговому розряді множника записана 1, то множуване додається до суми і посувається наліво на один розряд, а якщо в розряді записаний 0, то відбудеться тільки зсув множуваного. Зсув множуваного наліво можна замінити зсувом суми направо. За цим алгоритмом (рис. 8.11, б) працює підпрограма множення двох однобайтових чисел з отриманням двохбайтного результату (підпрограма 8.18). Початкова адреса підпрограми – 04У1; вхідні параметри: регістр D – множуване, регістр У – множник. Результат перемноження записується в регістри В, С.
Програма 8.18
Адреса |
Машинний код |
Мітка |
Мнемокод |
Коментар |
8000 |
01 |
MPL |
LXI B, 0000 |
очистити вміст регістрів В, С |
8001 |
00 |
|
||
8002 |
00 |
|
||
8003 |
3E |
|
MVI A, 01 |
завантажити в акумулятор покажчик розряда |
8004 |
01 |
|||
8005 |
A7 |
|
ANA A |
очистити флаг С |
8006 |
F5 |
MPL 1 |
PUS H PCW |
зберегти покажчик розряду в стеку |
8007 |
A3 |
|
ANA E |
перевірити вміст чергового розряду множника |
8008 |
78 |
|
MOV A, B |
завантажити в акумулятор старший байт суми |
8009 |
CA |
|
JZ MPL2 |
якщо в черговому розряді записаний 0, йти на MPL 2 |
8010 |
13 |
|||
8011 |
80 |
|||
8012 |
82 |
|
ADD D |
додати множуване до суми |
8013 |
1F |
MPL 2 |
RAR |
зсунути суму наліво (молодший біт С) |
8014 |
47 |
|
MOV В, А |
зберегти вміст акумулятора в регістрі В |
8015 |
79 |
|
MOV А, С |
завантажити в акумулятор молодший байт суми |
8016 |
1F |
|
RAR |
Зсунути число в акумуляторі направо (С старший біт) |
8016 |
47 |
|
MOV С, А |
зберегти вміст акумулятора в регістрі С |
8017 |
F1 |
|
POP PSW |
отримати зі стека покажчик розряда |
8018 |
17 |
|
RAL |
покажчик на наступний розряд |
8019 |
D2 |
|
JNC MPL 1 |
якщо розряд не останній, продовжити на MPL 1 |
8020 |
06 |
|||
8021 |
80 |
|||
8022 |
C9 |
|
RET |
якщо розряд останній, повернення |
Ділення чисел. Ділення двійкових чисел, як і чисел, що подані в будь-якій іншій системі обчислення, грунтується на послідовному відніманні дільника з діленого і залишків від ділення. Однак двійкове ділення реалізується простіше, так як використання тілько двох цифр (0 і 1) виключає в кожному циклі ділення необхідність визначення числа дільників, що містяться в поточному значенні діленого або решти (достатньо тільки порівняти їх).
Схема алгоритма ділення двійкових чисел наведена на рис. 8.12. Програма DIVB побудована за цим алгоритмом (програма 8.19). Вхідними параметрами цієї програми є ділене (в регістрі E) і дільник (в регістрі D); вихідними параметрами – частка (в регістрі H) і зупинка (в регістрі C).
Програма 8.19.
Адреса |
Машинний код |
Мітка |
Мнемокод |
Коментар |
8000 |
21 0800 |
DIVB |
LXIH, 0008 |
завантажити лічильник бітів (регістр L) і очистити регістр частки H |
8003 |
0E 00 |
|
MVI C, 00 |
очистити регістр проміжного діленого |
8005 |
7B |
MXT B |
MOV A, E |
завантажити ділене в акумулятор |
8006 |
17 |
|
RAL |
зсунути старший байт в розряд C |
8007 |
5F |
|
MOV E, A |
повернути ділене в регістр E |
8008 |
79 |
|
MOV A, C |
завантажити в акумулятор проміжне ділене з регістра C |
8009 |
17 |
|
RAL |
зсунути розряд C в молодший байт |
800A |
92 |
|
SUB D |
відняти з вмісту акумулятора дільник |
800B |
D2 0F 09 |
|
JNC NOADD |
якщо C = 1, відновити вміст акумулятора |
800E |
B2 |
|
ADD D |
|
800F |
4F |
NOADD |
MOV C, A |
повернути проміжні дані в регістр C |
8010 |
3F |
|
CMC |
інвертувати розряд C |
8011 |
7C |
|
MOV A, H |
зсунути розряд C в молодший байт регістра частки H |
8012 |
17 |
|
RAL |
|
8013 |
67 |
|
MOV H, A |
|
8014 |
2D |
|
DCRL |
чи перевірені всі вісім розрядів? |
8015 |
C2 0509 |
|
JNZ MXTB |
якщо ні, продовжити |
8018 |
CF |
|
RSTI |
якщо да, перервати виконання програми |
Обчислення
спеціальних функцій.
Для обчислення спеціальних функцій
застосовуються спеціальні алгоритми.
Функції
можна обчислювати, скориставшись їх
розташуванням в рядок:
для
будь-якого х (рад);
для
будь-якого х (рад);
для
0 < x
1.
Числа членів рядка визначаються з умови отримання потрібної точності.
Для
обчислення функцій
точністю до ціли чисел можна застосувати
алгоритм, на основі якого квадрат числа
можна визначити додаванням послідовності
непарних чисел:
Виходячи з наведеного приклада видно, що яке число необхідно піднести до квадрату, таку ж кількість послідовних непарних чисел починаючи з 1 необхідно додати.
Обчислення спеціальних функцій за наведеними виразами займає тривалий час і забезпечує низьку точність. Це обумовлено порівняно невеликою довжиною машинного слова і обмеженою швидкодією МП БІС. Тому в тих випадках, коли ставляться жорсткі вимоги по швидкодії і точності, застосовується обчислення функцій за допомогою таблиць. Проілюструємо цей метод на прикладі програми обчислення квадрата чисел х (програма 8.20).
Програма 8.20
Адреса |
Машинний код |
Мітка |
Мнемокод |
Коментар |
8000 |
2600 |
SQ |
MVI H, 0 |
очистити регістр H |
8002 |
11 000A |
|
LXI D SQTB |
завантажити початкову адресу таблиці |
8005 |
19 |
|
DAD D |
отримати адресу елемента |
8006 |
66 |
|
MOV H, M |
завантажити його в регістр H |
8007 |
SF |
|
RST 1 |
перервати виконання програми |
0A00 |
00 |
|
|
|
0A01 |
01 |
|
|
|
0A02 |
04 |
|
|
|
0A03 |
09 |
|
|
|
0A04 |
10 |
|
|
|
0A05 |
19 |
|
таблиця квадратів чисел |
|
0A06 |
24 |
|
|
|
0A07 |
31 |
|
|
|
0A08 |
40 |
|
|
|
0A09 |
81 |
|
|
|
0A0A |
64 |
|
|
Програма
SQ визначає квадрат чисел від 0 до 10
включно. Вхідний параметр програми -
число x. Воно записується в регістр L.
Вихідний параметр - значення
в регістрі H.
