6.3. Програмування простих задач
Виконання команд проводиться згідно з логікою роботи процесора. Мікропроцесор може виконувати і логічні операції АБО, І, НЕ. Розглянемо різницю між традиційними логічними пристроями і “запрограмованими”. Нехай, МП повинен виконати логічну функцію “І”.
Схема “І”, основана на МП, вимагає наявності вхідного порту для виходів схеми. МП, виконуючі логічні команди, що зберігаються в пам’яті, виконує функцію “І”. Для одного виходу схеми “І” треба тільки 1 розряд у вихідному порті. Програма, що реалізує функцію “І” складається з наступних команд: по кроках: див. рис.5.1.
Крок 1. Зчитати дані з вхідного порту;
Крок 2. Перейти на крок 5, якщо всі входи мають високий рівень, якщо не мають – продовжити виконання;
Крок 3. Встановити низький рівень на виході;
Крок 4. Перейти на крок 1;
Крок 5. Встановити високий рівень на виході;
Крок 6. Перейти на крок 1.
Спочатку зчитуються дані з порту входу. Потім ці дані перевіряються на високий рівень. Якщо на всіх входах рівень високий (1), на виході встановлюється також “1”, інакше “0”, коли програма закінчується, виконується цикл з початком на кроці 1. При цьому зміни на входах постійно відображуються на виході.
Для програмування інтерфейсних схем на ввід/вивід необхідно записати в акумулятор дані, що програмують інтерфейс на відповідний режим, вказати команду вводу чи виводу, вказати номер порта інтерфейсу звідки/куди пересилаються дані.
|
6.4. Визначення модуля числа
Як відомо, знак числа, кодом якого є 0 чи 1, знаходиться в знаковому розряді, це – найстарший біт числа. Але визначити модуль числа простим відкиданням знакового розряду неможливо, бо від'ємні числа представляються доповняльним або оберненим кодом двійкового числа.
Розглянемо алгоритм і програму знаходження модуля за умови, що від'ємні числа представляються доповняльним кодом. На рис.7.3 зображена блок-схема алгоритму визначення модуля числа, яке знаходиться в регістрі Е. Алгоритм задає послідовність елементарних дій, зображених в кожній фігурі, яким відповідають окремі команди, що полегшує складання програми. Програма визначення модуля числа наведена в табл. 7.4, і складена вона як послідовність команд в блок-схемі алгоритму.
Таблиця 7.4
|
Адреса |
16-й код |
Мітка |
Мнемокод |
Пояснення |
|
|
0100
|
7В
|
|
МОV А,Е
|
Перенесення в акуму-лятор вмісту регістру Е |
|
|
0101 |
В7 |
|
ОRА А |
Логічне додавання |
|
|
0102
|
F20801
|
|
JР М2
|
Умовний перехід на М2, якщо результат додатний |
|
|
0105
|
2F
|
|
СМА |
Порозрядна інверсія вмісту акумулятора |
|
|
|
|
||||
|
0106
|
3С
|
|
INR А
|
Інкремент вмісту акумулятора |
|
|
0107 |
5F |
|
МОV Е,А |
Пересилання з А в Е |
|
|
0108 |
76 |
М2 |
НLТ |
Зупинка |
|
|
||||||
|
|
|
|
|
|
|
Оскільки логічні і арифметичні операції мікропроцесор виконує з участю акумулятора, то для визначення знака число першою командою програми із регістру Е пересилається в акумулятор і наступною командою логічно додається само із собою для заповнення знакового S-біта регістру ознак, який заповниться вмістом найстаршого (знакового) біта акумулятора. Наступна команда умовного переходу контролює знак числа і здійснює розгалуження в програмі. Якщо число від'ємне (умова S=1 виконується), то наступними двома командами утворюється модуль числа: команда СМА порозрядно інвертує число, а ІNR А додає одиницю до наймолодшого розряду. Після цього модуль числа пересилається з акумулятора в регістр Е. Якщо число додатне, то воно вже і є модулем, і цих дій робити не потрібно. Тому при S= 0 команда умовного переходу обминає команди інверсії, інкременту і пересилання, тобто вміст регістру не змінюється.
