МК
.pdfзатримки.
Завдання 4. Досліджувати програму 14.
Порядок виконання завдання
1.Ввести програму 14 у мікро-ЕОМ.
2.Встановити на вхідному пристрої перемикачі відповідно до числа FF.
Здійснити пуск програми. Переконатися, що мікро-ЕОМ знаходитиметься в
режимі очікування появи 0 у будь-якому розряді вхідного пристрою.
3.Встановити 0 за допомогою перемикачів у кожнім з розрядів вхідного пристрою. Перевірити вміст регістрів МП після завершення виконання програми 14.
4.Здійснити повторний запуск програми за наявності нулів у двох розрядах вхідного пристрою. Яке число буде записане в регістрі В МП після завершення виконання програми ?
Зміст звіту
1.Тимчасові діаграми виконання команд CALL <А2> <А1> , RET.
2.Відповіді на питання п.6 завдання для домашньої підготовки.
3.Повний перелік команд виклику і повернення з підпрограм для МП КР580ИК780.
4.Розроблені в процесі домашньої підготовки програми 5- й 10-секундної затримки.
5.Перелік команд роботи зі стеком для МП КР580ИК80.
6.Відповіді на питання, поставлені в п.7 завдання для домашньої підготовки.
Завдання для самоконтролю
1. Вкажіть кількість машинних тактів виконання команди САLL <А2>
<А1>.
2. У якій послідовності записується і зчитується зі стека вміст
91
акумулятора і регістра ознак МП під час виконання команд PUS H PSW і POP
PSW?
3.За допомогою яких команд можна задати чи перепозначити область пам'яті, відведену під стек ?
4.Вкажіть порядок виконання мікро-ЕОМ команди RET.
5.Порівняйте процес виконання мікро-ЕОМ команд CALL и RST.
6.Як треба змінити підпрограму 13, щоб тимчасова затримка, одержана в результаті її виконання, визначалась числами, записаними за адресами 0В00 і
ОВ01?
7.В якій послідовності зберігається і виймається вміст регістрів МП у підпрограмах?
8.Яка мінімальна адреса буде записана в покажчик стека SP МП для виконання підпрограми 15?
9.Як виконуватиметься підпрограма 15, якщо замість команди POP В в ній буде записана команда NOP?
10.Який максимальний час затримки може забезпечувати підпрограма 10,
якщо тривалість машинного такту Т = 1мкс ?
11.Який максимальний і мінімальний час затримки може забезпечувати підпрограма 13, якщо тривалість машинного такту Т = 1 мкс ?
12.Як збільшити час затримки з використанням підпрограми 13 ?
Бібліографічний список
1.Балашов Е.П., Пузанков Д.В. Микропроцессоры и микропроцессорные системы.-М.: Радио и связь, 1981.
2.Соучек Б. Микропроцессоры и микро-ЭОМ: Пер. с англ.– М.:
Советское радио, 1979.
92
ЛАБОРАТОРНА РОБОТА 8
ВИКОНАННЯ АРИФМЕТИЧНИХ ОПЕРАЦІЙ
Мета роботи: вивчення способів організації і дослідження програм виконання арифметичних операцій.
Обладнання, прилади та інструменти: мікро-ЕОМ на МП КР580ІК80.
Загальні відомості
Із двох способів визначення чисел з фіксованою крапкою і крапкою, що плаває, перший набув найбільшого поширення в програмуванні мікро-ЕОМ на МП КР580ИК80. Це пов'язано з відсутністю спеціальних команд, що дозволяють працювати МП з числами з крапкою, що плаває. У свою чергу двійкове восьмирозрядне число з фіксованою крапкою можна подати як двійкове число зі знаком, що має значення від -12810 до + 12710. При цьому від’ємні числа подаються в додатковому коді, а старший, сьомий, розряд числа використовується як знаковий. Таке подання чисел не дозволяє виконувати арифметичні операції з використанням переносу у додаванні і заміни у відніманні.
Число з фіксованою крапкою можна подати також двійковими числами без знака, що мають значення від 0 до 25510.
Для МП КР580ИК80 можна подавати такі числа у вигляді двійково-
десяткового числа - BINARY - CODED -DECIMAL (BCD ), за якого кожен байт розглядається як два напівбайти – два зошити, кожен з який кодує десяткову цифру. Таке подання дозволяє закодувати в 1 байт числа від 0 до 9910.
Проведення арифметичних операцій додавання, віднімання, множення,
ділення, обчислення спеціальних функцій розглянемо на прикладах відповідних підпрограм.
Програма додавання масиву однобайтних чисел з одержанням двобайтного результату – підпрограма MAIN (підпрограма 16, табл. 23).
Доданки повинні розташовуватись у послідовних адресах пам'яті. Вхідними
93
|
|
|
|
|
|
Таблиця 23 |
|
|
|
Підпрограма 16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
Адреса |
Машинний |
Мітка |
Мнемокод |
Коментар |
|
||
код |
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
записати |
в |
регістри |
|
0800 |
21000В |
MAIN |
LXI Н ОВ00 |
Н, L адресу першого |
|
||
доданка |
|
|
|
||||
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
завантажити в |
|
||
0803 |
06 05 |
|
MVI В 0 5 |
регістр В |
|
|
|
|
кількість доданків |
|
|||||
|
|
|
|
|
|||
|
|
|
|
викликати |
|
|
|
0805 |
CD 0908 |
|
CALL ADDВ |
підпрограму |
|
|
|
|
додавання |
|
|
||||
|
|
|
|
|
|
||
0808 |
CF |
|
RSTІ |
перервати виконання |
|
||
|
програми |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
0809 |
AF |
ADDB |
XRA А |
очистити акумулятор |
|
||
|
|
|
|
|
|
|
|
080А |
4F |
|
MOV C А |
очистити |
лічильник |
|
|
|
переносів |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
додати |
до |
вмісту |
|
080В |
86 |
CN T |
ADD M |
акумулятора число з |
|
||
масиву доданків |
|
||||||
|
|
|
|
|
|||
|
|
|
|
якщо переносу |
|
||
080С |
D 2 1008 |
|
JNС TRM |
немає, то йти на |
|
||
|
TRM |
|
|
|
|||
|
|
|
|
|
|
|
|
080F |
ОС |
|
INR С |
збільшити зміст |
|
||
|
регістра С на 1 |
|
|||||
|
|
|
|
|
|||
|
|
|
|
|
|
||
0810 |
23 |
TRM |
INX H |
вказати на наступну |
|
||
адресу доданка |
|
||||||
|
|
|
|
|
|||
|
|
|
|
|
|
||
0811 |
05 |
|
DCR B |
зменшити вміст |
|
||
|
лічильника доданків |
|
|||||
|
|
|
|
|
|||
|
|
|
|
|
|
||
0812 |
D2 OB08 |
|
JNC CNT |
якщо не всі доданки, |
|
||
|
то йти на CNT |
|
|||||
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
0815 |
С9 |
|
RET |
|
|
|
|
|
|
|
|
|
|
|
|
параметрами з підпрограми ADD В є адреса першого доданка, записана в регістрах Н, L , і число доданків, записане в регістрі В. Вихідним параметром програми MAIN є сума, старший байт якої записаний у регістрі 3, а молодший
– в акумуляторі А. Алгоритм програми додавання полягає в тому, що після
94
додатка кожного елемента масиву визначається переповнення акумулятора
(розряд С-1), і якщо це має місце, то вміст регістра С збільшується на 1. Таким чином, за рахунок підсумовування одиниць переносу виходить старший байт суми (рис. 15, а).
Мікро-ЕОМ може проводити арифметичні операції з числами з подвійною чи більшою довжиною машинного слова. Оскільки МП має 8-
розрядне АЛП, то операції з такими числами повинні проводитися за байтами,
починаючи з молодших байтів. Так, операція додавання чисел 17F 5 + 3411
проводитиметься в наступному вигляді: |
|
|
Старший байт |
Прапорець (мітка) 3 Молодший байт |
Числа |
00101111 |
11110101 |
17 F 5 |
+ |
+ |
+ |
00110100 |
00010001 |
3411 |
+1 |
1 |
|
_____________________________________________________________ |
||
01001100 |
00000110 |
4 С 06 |
Операція віднімання чисел 6F 5С - 1ЗС5 здійснюватиметься в такому |
||
вигляді: |
|
|
Старший байт |
Прапорець(мітка) 3 Молодший байт |
Числа |
01101111 |
01011100 |
6 F 5 C |
|
|
|
00010011 |
11000101 |
1З С 5 |
- 1 |
1 |
|
________________________________________________________ |
||
01011011 |
10010111 |
5 В 97 |
З наведених прикладів видно, що для підсумовування (віднімання)
молодших байтів чисел необхідно застосовувати команду ADD (SUB), а для додавання (віднімання) інших – команду ADC (SBB), що враховуватиме стан розряду регістра С ознак МП.
Програма знаходження різниці чисел, що мають однакову довжину показана в табл. 24.
95
а)
ADD B
Очистити регістр суми А і лічильник переповнення С
Додати до вмісту акумулятора число із пам’яті
Ні
С = 1
Так
Збільшити вміст регістра С на 1
Зменшити вміст лічильника кількості додатків на 1. Вказати на наступну адресу
ТакНі
Останній доданок? Так
RETURN
б)
Ні
MPL
Покажчик біта дорівнює 01, сума дорівнює 00
Вміст біта рівний 1?
Так
Сума = сума + множник
Посунути суму вправо
Вказати на наступний біт множника
Ні
Останній біт?
Так
RETURN
Рис. 15. Алгоритм підпрограми додавання (а) і множення (б).
96
Вхідні параметри: регістр С – довжина чисел (у байтах), регістри Н, L – адреса молодшого байта, що віднімається; регістри D, Е – адреса молодшого байта зменшуваного. Кожне з чисел записується в послідовних адресах пам'яті,
починаючи з молодших байтів. Результат заноситься в область пам'яті,
відведену під від'ємник. Якщо зменшуване менше від'ємника, подаватиметься звуковий сигнал.
Таблиця 24
Програма 17
Адреса |
Машинний |
Мітка |
Мнемокод |
|
Коментар |
|
||
код |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
0900 |
|
SBN |
XRA А |
очистити акумулятор і мітку 3 |
||||
AF |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
0901 |
ІА |
CNT |
LDАХ А |
записати в акумулятор |
|
|||
зменшуване |
|
|
|
|||||
|
|
|
|
|
|
|
||
0902 |
9Е |
|
SBB M |
відняти |
з |
вмісту |
акумулятора |
|
|
від'ємник |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0903 |
77 |
|
MOV M А |
записати |
різницю |
на |
місце |
|
|
від'ємника |
|
|
|
||||
|
|
|
|
|
|
|
|
|
0904 |
23 |
|
ІNX Н |
вказати |
на |
наступний |
байт |
|
|
|
|
|
від'ємника |
|
|
|
|
0905 |
13 |
|
INX D |
вказати |
на |
наступний |
байт |
|
|
|
|
|
зменшуваного |
|
|
||
|
|
|
|
|
|
|
|
|
0906 |
OD |
|
DCR С |
зменшити |
|
вміст |
лічильника |
|
|
довжини числа |
|
|
|||||
|
|
|
|
|
|
|||
|
|
|
|
|
||||
0907 |
С2 0109 |
|
JNZ СNT |
якщо не останній (старший байт |
||||
|
числа), то йти на CNT |
|
|
|||||
|
|
|
|
|
|
|||
|
|
|
|
|
||||
090А |
DO |
|
RNC |
якщо байт старший і результат без |
||||
|
позики (С - 0), то повернення |
|
||||||
|
|
|
|
|
||||
|
|
|
|
|
|
|||
090B |
CD 1200 |
|
CALL |
якщо була позика (С=1), |
|
|||
|
подати сигнал |
|
|
|||||
|
|
|
BEEP |
|
|
|||
|
|
|
|
|
|
|
|
|
090Е |
CF |
|
RSТ І |
перервати виконання програми |
||||
|
|
|
|
|
|
|
|
|
Виконання команд MOV М, A; INX D не впливає на розряд С. У програмі
SBN підпрограма звукового сигналу (BEEP) починається з адреси 0012. Перед початком виконання програми SBN необхідно здійснити початкову установку всіх вхідних параметрів.
97
Множення чисел. Існує кілька алгоритмів множення чисел. За першого алгоритму множення можна замінити багаторазовим додаванням, наприклад
14 3 = 14 + 14 + 14. Істотний недолік цього способу - значна тривалість процесу обчислення. За другого алгоритму множення здійснюється у стовпчик.
Цей алгоритм застосовуємо і для множення двійкових чисел, наприклад:
0110= 610 0011= 310 0110
0110
0000
0000_________
00010010=1810
Для обчислення результату за другим алгоритмом необхідно здійснити багаторазове підсумовування зі зсувом уліво множника за одночасної перевірки вмісту розрядів множника, починаючи з боку його молодшого розряду. При цьому, якщо в черговому розряді першого множника записана 1, то другий множник додається до суми і зсувається вліво на один розряд, а якщо в розряді записаний 0, то відбудеться тільки зсув першого множника. Зсування першого множника вліво можна замінити зсуванням суми вправо. За цим алгоритмом
(рис. 15, б) працює підпрограма множення двох однобайтних чисел з одержанням двобайтного результату (підпрограма 18, табл. 25). Початкова адреса підпрограми - 04ЕІ; вхідні параметри: регістр D – множник, регістр Е – множник. Результат перемножування записується в регістри В, С.
Ділення чисел. Ділення двійкових чисел, як і чисел, представлених у будь-якій іншій системі числення, ґрунтується на послідовному вирахуванні дільника з діленого і залишків від ділення.
Однак двійкове ділення реалізується простіше, тому що використання тільки двох цифр (0 і 1) дозволяє уникнути в кожному циклі ділення необхідності визначення кількості дільників, що містяться в поточному значенні. чи діленого залишку (досить тільки порівняти їх).
98
|
|
|
|
|
|
|
|
|
Таблиця 25 |
||
|
|
|
Підпрограма 18 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Адреса |
Машинний |
Мітка |
Мнемокод |
|
|
Коментар |
|
|
|||
код |
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
04Е4 |
ЗЕ01 |
|
MVI A 01 |
завантажити |
|
в |
акумулятор |
|
|||
|
покажчик розряду |
|
|
|
|||||||
|
|
|
|
|
|
|
|||||
04Е6 |
А7 |
|
АNА А |
очистити прапорець С |
|
|
|||||
|
|
|
|
|
|
||||||
04E7 |
F5 |
|
PUS |
зберегти покажчик розряду в |
|
||||||
MPL I |
HPSW |
стеці |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|||
04Е8 |
A3 |
|
ANA E |
перевірити |
вміст |
чергового |
|
||||
|
розряду множника |
|
|
|
|||||||
|
|
|
|
|
|
|
|||||
04Е9 |
78 |
|
MOV А В |
завантажити |
|
в |
акумулятор |
|
|||
|
старший байт суми |
|
|
|
|||||||
|
|
|
|
|
|
|
|||||
04ЕА |
СА ЕС04 |
|
JZ MPL 2 |
якщо |
в |
черговому |
розряді |
|
|||
|
записаний 0, йти на МР |
2 |
|
||||||||
|
|
|
|
|
|||||||
04ED |
82 |
|
ADD D |
додати множене до суми |
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|||||
04ЕЕ |
IF |
|
RAR |
зрушити суму вправо |
|
|
|||||
MPL 2 |
(молодший біт → С) |
|
|
|
|||||||
|
|
|
|
|
|
||||||
04EF |
47 |
|
MOV В А |
зберегти вміст акумулятора в |
|
||||||
|
регістрі В |
|
|
|
|
|
|
||||
04 F 0 |
79 |
|
MOV А С |
завантажити |
|
в |
акумулятор |
|
|||
|
молодший байт суми |
|
|
||||||||
|
|
|
|
|
|
||||||
04 FI |
IF |
|
RAR |
зсунути число |
в акумуляторі |
|
|||||
|
вправо (С → старший біт ) |
|
|||||||||
|
|
|
|
|
|||||||
04 F 2 |
47 |
|
MOV C А |
зберегти вміст акумулятора в |
|
||||||
|
регістрі С |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
||
04 F З |
FI |
|
POP PSW |
одержати |
зі |
стека покажчик |
|
||||
|
розряду |
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
||
04 F 4 |
17 |
|
RAL |
покажчик на наступний розряд |
|
||||||
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|||
04 F 5 |
D2 Е704 |
|
JNС МРL І |
якщо |
розряд |
не |
останній, |
|
|||
|
продовжувати на MPL I |
|
|
||||||||
|
|
|
|
|
|
||||||
04 F 8 |
С9 |
|
RЕТ |
якщо |
|
розряд |
останній, |
|
|||
|
повернення |
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
Схема алгоритму ділення двійкових чисел показана на рис. 16. Програма
DIVB побудована за цим алгоритмом (програма 19, табл. 26). Вхідними параметрами цієї програми є ділене (у регістрі Е) і дільник (у регістрі D ); вихідними параметрами – частка (у регістрі Н ) і останов (у регістрі С).
Обчислення спеціальних функцій.
99
|
|
|
DIV B |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Лічильник бітів дорівнює 08 |
|
|
|
|
|
|
|
|
|
Дільник дорівнює 00 |
|
|
|
|
|
|
|
|
|
Проміжний дільник дорівнює 00 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Зсунути старший біт діленого в розряд С |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Зсунути вміст розряду С в молодший біт |
|
|
|
|
||
|
|
|
проміжного діленого |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Відняти з проміжного діленого дільник |
|
|
|
|
||
|
|
|
|
|
|
|
|
Так |
|
|
|
|
|
|
|
|
|
||
|
|
|
С=0 |
|
|
||||
|
|
|
|
|
|||||
|
|
|
|
||||||
|
|
|
|
Ні |
|
||||
|
|
|
|
|
|||||
|
|
|
Відновити проміжне ділене додаванням |
|
|
|
|
||
|
|
|
дільника до залишку |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Інвертувати вміст розряду С |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Зсунути вміст розряду С в молодший |
|
|
||||
|
|
|
розряд дільника |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
Зменшити лічильник бітів на 1 |
|
|
|
|||
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
||||
|
Так |
||||||||
|
|
|
Лічильник бітів 0 |
||||||
|
|
|
|||||||
|
|
|
|
Ні |
|||||
|
|
|
|
||||||
|
|
|
|
|
|
|
|||
|
|
|
RETURN |
||||||
Рис. |
16. |
Схема алгоритму підпрограми ділення двох восьмирозрядних
чисел.
100