6.5. Визначення більшого із двох додатних чисел
У системах автоматичного контролю та керування виникають потреби визначення найбільшого чи найменшого із декількох значень. Знаходження максимального із декількох чисел зводиться до послідовного визначення більшого із двох чисел. Розглянемо алгоритм, блок-схема якого показана на рис. 7.4, визначення більшого із двох додатних чисел, одне із яких знаходиться в акумуляторі, а друге – в регістрі В. Необхідно знайти більше число і помістити його в регістр В, а менше в акумулятор. Програма мовою Ассемблер і в машинних кодах наведена в табл.7.5. Порівняння двох чисел за алгоритмом і в програмі здійснюється двома командами: СМР - віднімання без реєстрації різниці (порівняння), але з фіксацією ознак результату віднімання в 2 і С бітах, і JС М1 - умовний перехід за значенням С-біта. Команда СМР встановлює С=1, якщо А<В, С=0, якщо А>В.
Тому, якщо А>В, необхідно вміст А і В взаємно поміняти; якщо навпаки, то ні, що і виконує наведена в табл.7.5 програма.
Таблиця 7.5
Адреса |
16-й код |
Мітка |
Мнемокод |
Пояснення |
8000 |
В8 |
|
СМР В |
Порівняння чисел: А - В |
8001 |
DА 0780 |
|
JC МІ1 |
Якщо А<В, то на М1 |
8004 |
4F |
|
МОV С,А |
Взаємний обмін |
8005 |
78 |
|
МОV А,В |
вмісту регістрів |
8006 |
41 |
|
МОV В,С |
А і В |
8007 |
76 |
М1 |
НLТ |
Зупинка |
6.6. Організація лічильників циклів
Серед різноманітних програм – лінійних, з розгалуженнями і циклічних найбільш уживаними є циклічні програми, в яких певна послідовність команд (цикл) виконується задану кількість разів. Розглянемо організацію лічильника циклів – ту частину програми, яка реалізує виконання заданої кількості разів певної групи команд, не вникаючи в суть цих команд.
Циклічні програми бувають, як відомо, одно- і багатоциклічними, з вкладеними циклами. У цьому прикладі розглядається одноциклічна програма, в якій лічильником циклів служить регістр В. Блок-схема алгоритму організації лічильника на N циклів показана на рис.7.5, а відповідна програма в табл.7.6. Першою командою програми в регістр В заноситься число N – кількість циклів. Частина програми, яку необхідно виконати N разів, починається командою ХRА А з адресою 1002 і закінчується командою JNZ М1. Після кожного виконання цієї групи команд вміст лічильника (регістру В) зменшується на одиницю командою DDR В – декремент регістру (адреса 10А2). Поки в регістрі В не нуль (Z=0) команда умовного переходу JNZ М1 (перехід за ненульовим результатом) скеровує виконання програми на мітку М1 – чергове виконання циклу, початком якого є адреса 1002. Ця адреса розміщена в другому і третьому байтах команди умовного переходу.
Таблиця 7.6.
Адреса |
16-й код |
Мітка |
Мнемокод |
Пояснення |
1000 |
0610 |
|
МVІ В,10 |
Встановлення лічильника |
1002
|
АF
|
М1
|
ХRА А
|
Обнулення С-біта
|
10А1 |
57 |
|
МОV D,А |
Пересилання з А в D |
10А2 |
05 |
|
DСR В |
Декремент вмісту В |
10АЗ |
С20210 |
|
JNZ М1 |
Якщо Z-біт=0, то на М1 |
10А6 |
76 |
|
НLT |
Зупинка |
Рис.7.5. Блок-схема алгоритму лічильника циклів
Якщо результат декрементування вмісту регістру В – нуль (всі цикли відпрацьовані), то програма переходить до виконання чергової команди і на закінчення.
