176
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ Національний університет кораблебудування імені адмірала Макарова А. Г. Марченко, Т. Г. Смикодуб ЕЛЕКТРОННО-ОБЧИСЛЮВАЛЬНІ МАШИНИ ТА МІКРОПРОЦЕСОРНІ СИСТЕМИ Рекомендовано Міністерством освіти та науки України як навчальний посібник для студентів вищих навчальних закладів Миколаїв 2007

А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Національний університет кораблебудування

імені адмірала Макарова

А. Г. Марченко, Т. Г. Смикодуб

ЕЛЕКТРОННО-ОБЧИСЛЮВАЛЬНІ МАШИНИ

ТА МІКРОПРОЦЕСОРНІ СИСТЕМИ

Рекомендовано Міністерством освіти та науки України

як навчальний посібник для студентів вищих навчальних закладів

Миколаїв 2007

Page 2: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

УДК 004.355 (075.8)

ББК 32.973Я7

М 25

Рецензенти:

д-р техн. наук, проф. Н.Т. Фісун;

д-р техн. наук, проф. Б.М. Політикін;

канд. техн. наук, старш. наук. співроб. В.Ф. Ажищєв

Марченко А.Г., Смикодуб Т.Г.

М 25 Електронно-обчислювальні машини та мікропроцесорні систе-

ми: Навчальний посібник. – Миколаїв: НУК, 2007. – 176 с.

ISBN 978–966–321–080–3

У посібнику подано основи побудови та роботи базових логічних

елементів цифрових схем, поняття функціювання процесорів фірми "Intel"

та основи низькорівневого програмування на мові Assembler, які дозво-

ляють більш детально зрозуміти роботу обчислювальних систем.

Призначений для студентів 1-го курсу зі спеціальностей 7.080401

"Інформаційні управляючі системи та технології" та 7.080403 "Програм-

не забезпечення автоматизованих систем", вивчаючих дисципліни "ЕОМ

та мікропроцесорні системи".

УДК 004.355 (075.8)

ББК 32.973Я7

ISBN 978–966–321–080–3

© Марченко А.Г., Смикодуб Т.Г., 2007

© Видавництво НУК, 2007

Рекомендовано Міністерством освіти

та науки України як навчальний посібник

для студентів вищих навчальних закладів,

лист № 14/18.2-636 від 10.03.06.

Page 3: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

3

ЗМІСТ

Частина перша. ОСНОВИ СХЕМОТЕХНІКИ ................................ 5

Розділ 1. ОСНОВНІ ОПЕРАЦІЙНІ ВУЗЛИ ЕЛЕКТРОННО-

ОБЧИСЛЮВАЛЬНИХ МАШИН ............................................................... 5

1.1. Подання інформації в електронно-обчислювальні машини...... 5

1.2. Подання інформації фізичними сигналами ..................................... 17

1.3. Цифрові елементи та їхні порівняльні характеристики ................. 20

1.4. Базові комбінаційні цифрові елементи ............................................ 23

1.5. Похідні логічні елементи ................................................................. 26

1.6. Перетворення логічних функцій ...................................................... 29

1.7. Реалізація основних функцій за допомогою похідних ................... 32

1.8. Складання логічної функції .............................................................. 33

1.9. Напівпровідникові прилади .............................................................. 38

1.10. Загальна характеристика інтегральних мікросхем..................... 42

1.11. Основні параметри цифрових інтегральних схем ........................ 46

Розділ 2. ТРИГЕР ................................................................................... 50

2.1. Поняття тригера та його застосування ......................................... 50

2.2. RS-тригер .......................................................................................... 52

2.3. Статичний синхронний RS-тригер .................................................. 55

2.4. Статичний синхронний D-тригер .................................................... 56

2.5. Двотактний RS-тригер..................................................................... 57

2.6. JK-тригер .......................................................................................... 60

Розділ 3. ЦИФРОВІ АВТОМАТИ ....................................................... 62

3.1. Лічильники ........................................................................................ 62

3.2. Регістри............................................................................................. 69

3.3. Дешифратори.................................................................................... 71

3.4. Мультиплексор та демультиплексори ............................................ 73

3.5. Суматор ............................................................................................ 74

Page 4: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

4

Частина друга. ОРГАНІЗАЦІЙНА МОДЕЛЬ ПРОЦЕСОРА ....... 79

Розділ 1. МІКРОПРОЦЕСОР 8086 ...................................................... 79

1.1. Історія розвитку електронно-обчислювальної машини ............... 79

1.2. Основні характеристики та склад мікропроцесора 8086 .............. 81

1.3. Пристрій обробки даних мікропроцесора 8086 .............................. 83

1.4. Пристрій сполучення з шиною ........................................................ 87

1.5. Організація пам'яті ........................................................................... 89

Розділ 2. ОРГАНІЗАЦІЯ СИСТЕМИ ПЕРЕРИВАННЯ МІКРО-

ПРОЦЕСОРА 8086 ................................................................................. 93

2.1. Моделі обробки запитів на переривання ........................................ 94

2.2. Джерела переривань мікропроцесора 8086.................................... 95

2.3. Організація переривань і їх процедури ........................................... 99

Частина третя. ОСНОВИ ПРОГРАМУВАННЯ МОВОЮ

АСЕМБЛЕР............................................................................................ 102

Розділ 1. МОВА ПРОГРАМУВАННЯ АСЕМБЛЕР ......................... 102

1.1. Мова асемблер і її різновиди ......................................................... 102

1.2. Етапи розробки програм мовою асемблер................................... 104

Розділ 2. ФОРМАТИ КОМАНД І МЕТОДИ АДРЕСАЦІЇ .............. 106

2.1. Формати команд мікропроцесора 8086 ......................................... 106

2.2. Формат двооперандної команди мікропроцесора 8086 ................ 108

2.3. Обчислення виконавчої та фізичної адрес .................................... 110

2.4. Методи адресації операндів мікропроцесора 8086....................... 112

Розділ 3. ОРГАНІЗАЦІЯ ПРОГРАМИ МОВОЮ АСЕМБЛЕР ...... 117

3.1. Елементи мови асемблер .............................................................. 117

3.2. Формат команд і псевдооператорів мови асемблер .................... 118

3.3. Структура програми ....................................................................... 119

3.4. Псевдооператори мови асемблер ................................................. 120

Розділ 4. СИСТЕМА КОМАНД МІКРОПРОЦЕСОРІВ INTEL ..... 136

4.1. Команди пересилання даних .......................................................... 136

4.2. Арифметичні команди .................................................................... 142

4.3. Логічні команди ............................................................................... 154

4.4. Команди зсуву ................................................................................. 156

4.5. Команди передачі керування ......................................................... 159

4.6. Ланцюжкові команди ...................................................................... 165

4.7. Команди керування прапорами ...................................................... 173

Page 5: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

5

Частина перша

ОСНОВИ СХЕМОТЕХНІКИ

Розділ 1. ОСНОВНІ ОПЕРАЦІЙНІ ВУЗЛИ

ЕЛЕКТРОННО-ОБЧИСЛЮВАЛЬНИХ МАШИН

1.1. Подання інформації в електронно-обчислювальні машини

Подання інформації в електронно-обчислювальні машини (ЕОМ)

базується на системах числення. Системою числення називають су-

купність прийомів і правил, які дозволяють подати будь-яке число за

допомогою деякого алфавіту символів, що називаються цифрами.

Залежно від способу зображення чисел за допомогою цифр системи

числення діляться на позиційні та непозиційні. У непозиційних системах

будь-яке число визначається як деяка функція від чисельних значень

сукупності цифр, що представляють це число. Цифри в непозиційних си-

стемах числення відповідають деяким фіксованим значенням. Прикла-

дом непозиційної системи є римська система числення. В обчислювальній

техніці непозиційні системи не застосовуються.

Систему числення називають позиційною, якщо одна й та сама циф-

ра може приймати різні чисельні значення залежно від її місця розташу-

вання в сукупності цифр, що представляють задане число. Прикладом

позиційної системи є арабська десяткова система числення.

Позиційна система числення характеризується основою та законом,

за яким значення цифри змінюється залежно від місця розташування

числа в записі. Основою позиційної системи числення може бути будь-

яке число S. Кількість символів у наборі алфавіту дорівнює основі систе-

ми числення. Місце кожної цифри в числі називається позицією. У за-

гальному вигляді позиційна система числення може бути представлена

як поліном:

KK +αα+α+α++α+α=−

2

2

1

1

0

0

1

1

1

1, SSSSSSX

m

m

m

m, (1.1)

де S – основа системи; α – кожна з цифр алфавіту даної системи; m –

позиція символу (місце розташування).

Page 6: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

6

Комою відокремлюють позиції при додатних степенях основи від

позиції при від'ємних степенях. Відлік позиції цілих чисел виконується

вліво від коми і визначається від 0 до m. Позиція дробової частини числа

відраховується вправо від коми й починається "–1". Число, описане за

допомогою даного полінома, звичайно представляється послідовністю

коефіцієнтів α:

KK

21011,

−−−αααααα=

mmX

В електронно-обчислювальних машинах застосовуються системи

числення з основою "2" – двійкова система числення. Припустимими

значеннями для даної системи числення можуть бути тільки дві цифри: 0

і 1. Окремі елементи двійкового коду називаються ще бітами. Вибір

двійкової системи числення визначається широким набором пристроїв,

що мають два стани і яким приписуються значення 0 або 1. Прикладом

такого пристрою може бути тригер, що має два стани. Набір відповідної

кількості таких пристроїв служить для подання багаторозрядного двійко-

вого числа.

Недоліком двійкової системи числення є громіздкість подання чи-

сел. Для підвищення зручності спілкування з ЕОМ застосовуються більш

компактні системи числення – вісімкова, десяткова та шістнадцяткова.

Важливим питанням є переведення значень з однієї системи чис-

лення в іншу. Розглянемо переведення у десяткову систему числення

з двійкової, вісімкової та шістнадцяткової. Візьмемо двійкове число

10110001,1012. Основа системи S = 2. Дане число можна представити як

суму степенів числа 2, помноженого на відповідні коефіцієнти:

10110001,1012 = 1 ⋅ 27 + 0 ⋅ 26 + 1 ⋅ 25 + 1 ⋅ 24 + 0 ⋅ 23 + 0 ⋅ 22 + 0 ⋅ 21 + 0 ⋅ 20,

+ 1 ⋅ 2–1 + 0 ⋅ 2–2 + 1 ⋅ 2–3 = 128 + 0 + 32 + 16 + 0 + 0 + 1, + 0,5 + 0 + 0,125 =

= 177,62510

.

У даному прикладі здійснено переведення числа з двійкової систе-

ми числення в десяткову.

Вісімкова система числення має основу системи S = 8 і коефіцієнти

позначаються цифрами від 0 до 7:

261,58 = 2 ⋅ 82 + 6 ⋅ 81 + 1 ⋅ 80, + 5 ⋅ 8–1 = 128 + 48 + 1, + 0,625 = 177,625

10.

У шістнадцятковій системі основа системи S = 16, а коефіцієнти

позначаються числами від 0 до 15. Щоб представляти всі цифри, які

перевищують 9 одним знаком, у шістнадцятковій системі числення вико-

ристовуються спеціальні позначення для цифр у вигляді латинських букв:

A = 10; B = 11; C = 12; D = 13; E = 14; F = 15.

Page 7: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

7

Подання дробового шістнадцяткового числа та переведення його

в десяткове виконується таким чином:

0В1, А16

= 0 ⋅ 162 + В ⋅ 16

1 + 1 ⋅ 16

0, + А ⋅ 16

–1 = 0 + 176 + 1, + 10/16 =

= 177,62510

.

Відповідність між різними системами числення представлено

в табл. 1.1.

Таблиця 1.1. Відповідність між системами числення

Системи числення

Десяткова Двійкова Вісімкова Шістнадцяткова

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

0

1

2

3

4

5

6

7

10

11

12

13

14

15

16

17

0

1

2

3

4

5

6

7

8

9

A

B

C

D

E

F

Переведення з двійкової системи числення у вісімкову або шістнад-

цяткову здійснюється дуже просто з тієї причини, що ці системи мають

основу у вигляді цілого степеня числа 2: 8 = 23 і 16 = 2

4.

Для переведення цілого багаторозрядного двійкового числа у вісімко-

ве необхідно розбити його на тріади, рухаючись справа наліво, доповню-

ючи при цьому останню тріаду незначущими нулями. Потім кожну групу

з трьох розрядів замінити на відповідну цифру вісімкової системи чис-

лення.

Розглянемо приклад переведення числа 101100012 у вісімкову си-

стему числення:

}} }

8

162

226100111001010110001 == .

Page 8: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

8

Для переведення двійкового числа в шістнадцяткове необхідно роз-

бити його на тетради, рухаючись справа наліво та доповнюючи при цьо-

му останню тетраду незначущими нулями. Потім кожну групу з чоти-

рьох розрядів заміняють на відповідну цифру шістнадцяткової системи

числення. Переведемо число 101100012 в шістнадцяткову систему чис-

лення:

}}

16

1

2100001101110110001 B

B

== .

Для зворотного переведення чисел з вісімкової або шістнадцятко-

вої системи у двійкові коди досить замінити кожну цифру числа три-

розрядним або чотирирозрядним двійковим числом. Зважаючи на те,

що обчислювальні машини працюють із двійковими кодами, які мають

розрядність 8, 16 або 32 біти, необхідно одержані двійкові коди подавати

з відповідною розрядністю, доповнюючи ліворуч незначущими нулями

або їх відкидаючи:

}}}}

2

570

160001010000011111010111000111000057 ==

С

C .

Переведення чисел з однієї системи числення в іншу можна вико-

нувати за допомогою алгоритмів ділення та множення: переведення ці-

лої частини виконується за допомогою ділення на основу нової систе-

ми, а дробову частину – шляхом множення на основу нової системи.

Переведення з десяткової системи числення у двійкову виконується

методом послідовного ділення числа на 2 до тих пір, поки частка від

ділення не стане рівною 1. Частка від ділення й остачі представляють

число у двійковій системі числення, які записуються послідовно, почина-

ючи з правої сторони й переміщаючись вліво. Частка буде старшим

розрядом.

Переведемо цілу частину десяткового числа (30,625)10

у двійкове

методом ділення:

0

1

11

1 5

23 03 0

2

2

1 4 7

–6 3 2

21

3010

= 111102.

Page 9: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

9

Для переведення дробової частини десяткового числа у відповідну

частину двійкового числа її необхідно помножити на 2. Отримані цілі ча-

стини від множення виключаються від подальшого множення і є цифра-

ми дробової частини, переведеними в нову систему. Значення першої

цілої частини є першою цифрою після коми. Множення здійснюється

доти, поки дробова частина не буде дорівнювати 0.

Розглянемо переведення дробової частини десяткового числа

30,62510

у двійкове подання:

0 , 6 2 5

1

2?

?2 5 0

0 05 0

0

2

?2

1 0 0

×

×

×

30,62510

= 11110,1012.

Може статися, що дріб, який у старій системі числення зображаєть-

ся скінченним числом символів, у новій системі числення буде нескінчен-

ним. У цьому випадку алгоритм множення обривають, діставши потрібну

кількість знаків.

Розглянемо переведення двійкового числа в десяткову систему чис-

лення. Для цього потрібно розділити цілу частину на десять, представле-

не у двійковій системі числення (10102). Перша остача буде представля-

ти молодший розряд. Результат ділення знову розділити на 10102. Оста-

ча буде наступним молодшим розрядом. Ділення продовжувати, поки

результат не стане менше 10102, що і буде старшим розрядом. Всі об-

числення ведуться у двійковій системі числення.

Дробову частину двійкового числа переводять шляхом множення

на 10102. Отримана при множенні ціла частина буде становити перший

розряд після коми. Ціла частина виключається з подальшого множення.

Дробова частина, яка залишилася, множиться знову на 10102, й отри-

мана ціла частина становить наступний розряд. Операцію потрібно по-

вторювати, поки в дробовій частині не будуть одні нулі. Цілі частини

добутків заміняються відповідними цифрами нової системи числення.

Розглянемо переведення двійкового числа 11010101,012 в десят-

Page 10: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

10

кове методом ділення:

1 0

1 10101 0110 01

1

1 1

00 11

00

11

10

10

0 0 1 1

00

11

1

1

0

0

1 1

00

0 0

(3)

0 11 1

00 11

0 0 0

0

1

0

0

1 0(1)

10(2)

?

?

+

+

0

0

0010,

0

11 0

0

0 1 0

1

10 0

1 00 00

10 01

01 0 0

1 0 0 0

0 00 0101

1 0(2)

10(5)

У результаті переведення одержимо десяткове число 213,2510

.

Двійкова арифметика. Правила виконання арифметичних дій

додавання, віднімання та множення над двійковими числами задаються

в табл. 1.2.

Додавання Віднімання Множення

0 + 0 = 0 0 – 0 = 0 0 · 0 = 0

0 + 1 =1 1 – 0 = 1 0 · 1 = 0

1 + 0 = 1 1 – 1 = 0 1 · 0 = 0

1 + 1 = 10 10 – 1 = 1 1 · 1 = 1

Таблиця 1.2. Правила додавання, віднімання

та множення у двійковій системі числення

Під час додаван-

ня двох одиниць ре-

зультат стає рівним

нулю і формується

перенесення одиниці

в старший розряд. При

відніманні одиниці від нуля необхідно взяти позику в старшого розряду,

тоді значення старшого розряду зменшується на одиницю, а молодший

буде рівним одиниці.

Арифметичні дії над багаторозрядними двійковими числами вико-

нуються за правилами позиційних систем числення. При додаванні підсу-

мовуються цифри відповідних розрядів. Якщо це сопроводжується пере-

несенням, то до суми в старшому розряді додається ще 1. Розглянемо

додавання двох чисел:

×

×

11 1

11 0 0

00 0

0

1

1

1

1

1

1 1

1 1

11 10

0

01 11

Перенесення

+

Page 11: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

11

У результаті порозрядного додавання в п'яти випадках виникло пе-

ренесення до старшого розряду.

При віднімання може виникнути ситуація, коли значення від'ємника

більше зменшуваного. У цьому випадку необхідно взяти позику в стар-

шого розряду. Позичена одиниця старшого розряду дорівнює двом оди-

ницям молодшого. Розглянемо віднімання двох чисел:

1

110 0

00 0

0

1

1

1

1

1 1

1 1

11 10

0

1 01

П озика

0

1 1

Операція множення багаторозрядних двійкових чисел зводиться до

операцій зсуву та додавання. Елементи зсуву формуються множенням

першого множника на відповідні розряди другого. Якщо розряд другого

множника дорівнює 0, то одержуємо нульовий частинний добуток, а при

рівності розряду 1 результат дорівнює першому множнику. Одержані

частинні добутки зсуваються вліво на таку кількість розрядів, яка відпо-

відає позиції розряду другого множника. Результат множення одержу-

ємо шляхом додаванням отриманих частинних добутків:

1

000 0

0

1

1 1

1

1

1 1

1 10

0?

011 10

011 10

011 10

0

0001

+

×

Операція ділення виконується так само, як і для десяткової ариф-

метики:

0

00 0

0

1

1 1

1

1 1 0 0

1 1

10 0

1 10

0

1 10

0

0

0000

Подання від'ємних чисел. В ЕОМ крім додатних чисел можуть

застосовуватися й від'ємні, що спрощує виконання операцій. За знак чис-

Page 12: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

12

ла відповідає старший біт, незалежно від застосовуваного типу числа

(байта, слова або подвійного слова). Трактування знакового розряду,

а значить і числа, залежить від застосовуваних команд. Якщо команда

процесора працює з числами зі знаком, то 0 у старшому розряді буде

визначати додатне число, а 1 – від'ємне. Отже, для правильного визна-

чення значення числа, розмірність його повинна бути байт, слово або

подвійне слово. Для подання чисел зі знаком застосовують прямий, зво-

ротний і доповняльний коди. Прямий код звичайно застосовується для

подання додатних чисел.

Зворотний код представляє собою від'ємне число, яке можна одер-

жати інвертуванням значень усіх розрядів двійкового числа на проти-

лежне – заміна 1 на 0 і навпаки. На жаль, дії зі зворотним кодом призво-

дять до подання 0 двома різновидами кодів: для розмірності байт це

буде 000000002 і 11111111

2.

Щоб уникнути неоднозначності одержання 0, застосовується допов-

няльний код для представлення від'ємного числа. Даний код одержуємо

зі зворотного, до якого додано 1 у молодшому розряді.

Розглянемо десяткове число – 12510

. Візьмемо модуль даного чис-

ла й представимо його у двійковому виді: 11111012. Доповнимо це значен-

ня ліворуч нулями до потрібної розмірності – байта, слова. У нашому

випадку доповнимо до байта. Перетворимо наше число спочатку у зво-

ротний код, а потім у доповняльний:

Ч исло +1250

0000

1

0

1111

11

0 1

1 0 0 0 0 0 1

0

1

Зворотний код

Ч исло –125 (доповняльний код)

Для перевірки виконаних перетворень складемо два числа з проти-

лежними знаками, які представлені в прямому й доповняльному кодах:

Число –125

Ч исло +125

(доповняльний код)

0

0000

1

0

1111

11

0 1

1

01 0 0 0 0 0 0 0

+

Усі вісім біт мають нульове значення. Перенесення одиниці зі стар-

шого знакового розряду загублено.

Суму двох двійкових чисел одержуємо додаванням їх відповідних

розрядів, включаючи й знакові розряди, як старші. Якщо знаковий розряд

результату додавання дорівнює 0, то сума представлена в прямому коді.

Page 13: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

13

Якщо знаковий розряд результату додавання дорівнює 1 – у допов-

няльному і є від'ємною величиною.

Для знаходження абсолютного значення від'ємного числа, поданого

в доповняльному коді, необхідно повторити попередні операції: інверту-

вати всі біти доповняльного коду і до отриманого двійкового числа дода-

ти одиницю:

Число від'ємне (доповняльний код)

0

00

11111

11

0 1

1 0 0 0 0 0 1

0

1

Зворотний код111

Модуль числа –125

Під час роботи з від'ємними числами важливим є питання про діапа-

зон подання чисел. Для знакових чисел розмірністю в байт діапазон

значень становить від –128 до +127.

Віднімемо 5 від 125. Двійкове подання для 5 – це 000001012, для

125 – 011111012, доповняльний код для числа 5 – 11111011

2.

–5 (доповняльний код)

0

0

0

11111

1 1

0 1

11 0 1 1 0

1

0

11 1 1

+125 (прямий код)

1 +120

+

Старший знак результату дорівнює 0. Це означає, що одержане

додатне число, яке дорівнює 120.

Віднімемо 125 з 5. Доповняльний код для числа 125 – 100000112.

–125 (доповняльний код)0

0

0

1000 1

1 1

01

1 0 0 0 0

1

0

10 1 1

+5 (прямий код)

1

+0 00000 11

Від'ємне число

Зворотний код

1 1 0 000 1 1 +120 (модуль в ід'ємного числа)

В отриманому результаті 100010002 знаковий розряд результату до-

рівнює 1, отже, число від'ємне. Абсолютне значення даного числа дорів-

нює 12010

й, отже, результат дорівнює –12010

.

У ряді розглянутих прикладів відбувалося перенесення 1 за межі

розрядної сітки, яка в подальшому зникала. Але одержаний результат

приймали як достовірний. Розглянемо умови достовірності отриманого

результату при додаванні.

Результат додавання є недостовірним у тому випадку, якщо було

Від'ємне число

Page 14: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

14

перенесення у знаковий розряд, а зі знакового розряду не було, або не

було перенесення в знаковий розряд, а зі знакового розряду було.

Якщо відбувалося одночасне перенесення і у знаковий розряд,

і з нього або перенесення не було, то в цьому випадку одержуємо досто-

вірний результат.

Розглянемо два приклади з недостовірними результатами:

+50

1

1100 001

1 0 0 0 0 0

+125

0

+0 01111 11

Від'ємне число

–125 (доповняльний код)

1

1

1011 111

0 1 1 1 1 01

+1 10000 10

Додатне число

–5 (доповняльний код)

1

У наших прикладах результат перевищує діапазон припустимих зна-

чень, який для чисел розмірністю в байт не повинен перевищувати зна-

чення –128 та +127.

Подання символів. Комп'ютери обробляють не тільки числову, але

й текстову інформацію. Для подання такої інформації застосовують набір

символів, який складається з цифр, букв, розділових знаків, математич-

них, символу повернення каретки та ін.

Для передачі цих символів у комп'ютер кожному з них приписується

номер, який називається кодом символів. Для обміну інформацією між

комп'ютерами символи повинні мати один і той же код.

Один із широко розповсюджених методів представлення символів є

стандарт ASCII-кодів (American Standard Code for Information Interchange

– американський стандартний код для обміну інформацією). Спочатку

кожен символ ASCII-коду містив 7 біт і всього могло бути 128 символів.

Коди від 00h до 1Fh та 7Fh (табл. 1.3) є керуючими символами, які не

друкуються. Наприклад, послання може складатися з символу початку

заголовка SOH (Start of Header), самого заголовка, символу початку

тексту STX (Start of Text), самого тексту, символу кінця тексту ЕТХ

(End of Text) і, нарешті, символу кінця передачі EOT (End of Transmission).

Таблиця 1.3. Керуючі символи ASCII-коду

Код

символу

Мнемонічне

позначення Призначення символу

00h NUL Порожній символ (Null)

01h SOH Початок заголовка, початок блоку даних (Start

of Heading)

Page 15: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

15

Код

символу

Мнемонічне

позначення Призначення символу

02h STX Початок тексту (Start of Text)

03h ETX Кінець тексту (End of Text)

04h EOT Кінець передачі (End of Transmission)

05h ENQ Запит підтвердження (ENQurity)

06h ACK Підтвердження прийому (ACKnoligement)

07h BEL Дзвінок, звуковий сигнал (Bell)

08h BS Повернення на одну позицію вліво (Backspace)

09h HT Горизонтальна табуляція (Horizontal Tab)

0Ah LF Переключення рядка (Line Feed)

0Bh VT Вертикальна табуляція (Vertical Tab)

0Ch FF Переключення формату, перехід до нової сто-

рінки (From Feed)

0Dh CR Повернення каретки (Carriage Return)

0Eh SO Перехід на нижній регістр (Shift Out)

0Fh SI Перехід на верхній регістр (Shift In)

10h DLE Завершення сеансу зв'язку (Data Link Escape)

11h DC1 Керування пристроєм 1 (Device Control 1)

12h DC2 Керування пристроєм 2 (Device Control 2)

13h DC3 Керування пристроєм 3 (Device Control 3)

14h DC4 Керування пристроєм 4 (Device Control 4)

15h NAK Помилка передачі (Negative AcKnolidgement)

16h SYN Холостий хід передавача (SYNcronous idle)

17h ETB Кінець передачі блоку (End of Transmission

Block)

18h CAN Скасування (CANcel)

19h EM Кінець носія даних (End of Medium)

1Ah SUB Підстановка, заміна символу (SUBstitute)

1Bh ESC Перехід, посилка складної команди (ESCape)

1Ch FS Роздільник файлів (File Separator)

1Dh GS Роздільник груп (Group Separator)

1Eh RS Роздільник записів (Record Separator)

1Fh US Роздільник елементів (Unit Separator)

7Fh DEL Видалення символу (DЕlete)

Продовж. табл. 1.3

Друковані символи ASCII з кодами від 20h до 7Eh включають в себе

великі й малі букви, цифри, знаки пунктуації та деякі математичні сим-

воли.

Щоб відобразити символи європейських алфавітів і символи псев-

дографіки, ASCII-код був розширений до 256 символів. Однак у міру

Page 16: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

16

поширення персональних комп'ютерів постійно виникала потреба в до-

даванні зображень нових символів. Зараз кожна країна світу має свою

власну кодову сторінку, а в багатомовних країнах звичайно застосовується

кілька таких сторінок. Подання символів ASCII-коду в російській кодовій

таблиці MS-DOS (кодова сторінка 866) представлено в табл. 1.4.

Таблиця 1.4. ASCII-коди в російській кодовій сторінці 866

Старша цифра Молодша

цифра 2 3 4 5 6 7 8 9 A B C D E F

0 0 @ P ' p А Р а р Ё

1 ! 1 A Q a q Б С б с ё

2 " 2 B R b r В Т в т Є

3 # 3 C S c s Г У г у є

4 $ 4 D T d t Д Ф д ф Ї

5 % 5 E U e u Е Х е х ї

6 & 6 F V f v Ж Ц ж ц Ў

7 ? 7 G W g w З Ч з ч ў

8 ( 8 H X h x И Ш и ш °

9 ) 9 I Y i y Й Щ й щ •

A * : J Z j z К Ъ к ъ ⋅

B + ; K [ k { Л Ы л ы √

C ‚ < L \ l | М Ь м ь №

D – = M ] m } Н Э н э ¤

E . > N ^ n ~ О Ю о ю

F / ? O _ o П Я п я

ASCII-код підходить для англійської мови, але не дуже зручний

для інших мов. Першою спробою розширення ASCII-кодів був стандарт

ISО 646, що додавав до системи ASCII ще 128 символів, у результаті

чого вийшов восьмибітний код за назвою Latin-1. Додані були в основно-

му латинські букви зі штрихами та діакритичними знаками. Подальший

розвиток призвів до формування кодових сторінок, що являють собою

набір із 256 символів для певної мови або групи мов. Головним недо-

ліком такого підходу є те, що програмне забезпечення ЕОМ повинне

підключити кодову сторінку, що відповідає в даний час оброблюваній

інформації.

Рішенням даної проблеми було створення нової системи з назвою

UNICODE (стандарт ISО 10646). Основна ідея UNICODE – приписува-

Page 17: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

17

ти кожному символу єдине постійне 16-бітне значення, яке називається

покажчиком коду. Такий код дозволяє одержувати 65536 кодових по-

кажчиків, у той час як у всіх мовах світу існує в цілому близько 200000

символів. Latin-1 включено до системи UNICODE з присвоєнням кодів

від 0 до 255.

Уся сукупність кодів розділена на блоки об'ємом на 16 кодів. Кожен

алфавіт в UNICODE має ряд послідовних зон. Наприклад (у дужках за-

значене число задіяних кодів): латина (336), грецький (144), російський

(256), вірменський (96), іврит (112) та ін. Кожній із цих мов призначено

більше кодів, ніж у ній є букв, що пов'язано з наявністю в букви декількох

варіантів подання.

Найбільше проблем виникло з поданням символів китайської, японсь-

кої та корейської мов. Тут, крім кодування ієрогліфів китайської та японсь-

кої мов, виконується кодування фонетичних символів і окремих складів

корейської мови.

UNICODE розв'язав багато проблем, пов'язаних з інтернаціоналіза-

цією, але на жаль не зміг вирішити всіх через нестачу кодових покаж-

чиків.

1.2. Подання інформації фізичними сигналами

У цифровій техніці, як правило, доводиться мати справу з сигнала-

ми, що набувають тільки двох значень, яким приписують значення ло-

гічної одиниці та логічного нуля (логічні "1" і "0"). Ці сигнали одержали

назву дискретних сигналів або цифрових.

Аналогами дискретних сигналів з рівнями "0" і "1" можуть бути різні

фізичні явища та процеси, здатні набирати два добре помітних значення,

наприклад: наявність або відсутність електричного струму, електрично-

го імпульсу за певний проміжок часу, напруги (потенціалу) високого та

низького рівнів, напруженості магнітного поля і т. д.

Звичайно цифровий пристрій містить спеціальний блок, що виробляє

синхронізуючі сигнали (синхроімпульси), які відзначають моменти дис-

кретного часу.

Часовий інтервал між двома сусідніми моментами дискретного часу

називається тактом або періодом подання інформації. На рис. 1.1 такий

період представлений інтервалом часу Т між двома сусідніми синхроім-

пульсами.

У цифровій техніці сигнали прийнято поділяти на два види: потен-

ційні й імпульсні.

Page 18: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

18

Значення потенційного сигналу характеризується різницею верхньо-

го U1 та нижнього U

0 рівнів напруги. Вибір позначення "1" і "0" для фізич-

них сигналів носить умовний характер. Якщо високому рівню потенціалу

приписують значення "1", а низькому – "0", то маємо справу з так званою

позитивною логікою. При протилежному виборі рівнів потенціалів мова

йде про негативну логіку. Звичайно низька напруга U0 відповідає логіч-

ному нулю, а висока напруга U1 – логічній одиниці. Для ТТЛ-логіки

логічному нулю відповідає потенціал від 0 В до +0,7 В, а логічній одиниці

– від +2 В до +4,5 В. Рівень потенціалу від +0,7 до +2 В вважається

невизначеним значенням, і цифрові елементи при таких рівнях сигналів

не працюють або формують недостовірні дані.

Імпульсний спосіб подання інформації. При даному способі (див.

рис. 1.1) одиничне або нульове значення двійкової змінної зображу-

ються наявністю або відсутністю електричного імпульсу в період

подання інформації між двома сусідніми тактовими імпульсами.

Імпульсом у цифровій та імпульсній техніці називається такий сиг-

нал, що змінює свій рівень протягом такту.

Синхроім-

пульси

Імпульсний

код

Потенційний

код

U T

U 0

t

1 1 1 00U 1

1 2 3 4

Рис. 1.1. Потенційний та імпульсний способи подання даних

При потенційному спосібі подання інформації двом значенням

двійкової змінної відповідають різні рівні потенціалу, позначувані U0

або U1, що повинні зберігатися протягом всього періоду відліку подання

інформації (такту).

Page 19: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

19

Імпульсні сигнали характеризуються швидкими, практично миттє-

вими, стрибкоподібними змінами напруги між двома рівнями. Наявність

такого перепаду напруги між двома синхроімпульсами сприймається як

логічна одиниця, що дозволяє кодувати цифрову інформацію.

Імпульси можуть мати найрізноманітнішу форму: прямокутну, тра-

пецієподібну, трикутну і т. д. Діапазон тривалості імпульсів, з якими ма-

ють справу в сучасній техніці, досить широкий і лежить у межах від

часток наносекунд (1нс = 10–9 с) до мілісекунд (1 мс = 10–3 с) і більше.

Для однакового визначення імпульсів прийнято розрізняти наступ-

ні параметри: амплітуду сигналу, тривалість імпульсу, час перемикання

між двома рівнями сигналу (тривалість фронту й зрізу) та ін.

Амплітуда імпульсу визначається за найбільшим відхиленням на-

пруги або струму Umax

(Imax

) від нульового або вихідного рівня U0 (I

0).

Тривалість імпульсу може визначатися на різних рівнях від його

амплітуди: на рівні 0,9; 0,5 й 0,1 від Umax

. Під активною тривалістю імпульсу

tімп

мається на увазі його тривалість на рівні 0,5 від амплітудного значен-

ня. Найбільша тривалість імпульсу (Uімп.осн

) визначається на рівні U0,1

.

Імпульс містить два переходи між рівнями: з нульового стану в оди-

ничний U0–1

і з одиничного в нульовий U1–0

. Ці переходи одержали на-

зву фронту й спаду імпульсу. Під тривалістю фронту імпульсу tфр

розуміється інтервал часу, протягом якого напруга змінюється від рів-

ня 0,1 до рівня 0,9 його амплітудного значення. Під тривалістю спаду

імпульсу tсп

розуміється інтервал часу, протягом якого напруга змен-

шується від рівня 0,9 до рівня 0,1 його амплітудного значення (рис. 1.2).

Дуже часто в цифровій техніці застосовується задавання числової ін-

U

U 0,1

U 0,9

U 0,5

U 0

U 1

tімп

tімп_осн

t

Umax

tфр tсп

Рис. 1.2. Параметри імпульсного сигналу

сп

tімп.осн

Page 20: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

20

формації змішаним потенційно-імпульсним способом, коли в одній схемі

обробляються два типи сигналів одночасно – імпульсні та потенційні.

1.3. Цифрові елементи та їхні порівняльні характеристики

В обчислювальній техніці двійкова інформація може бути представ-

лена послідовним або паралельним способом (кодом).

При послідовному способі подання інформації в кожен часовий такт

відображається тільки один розряд двійкової інформації. У цьому випад-

ку всі розряди даних проходять через один канал передачі або прийому

інформації. Обробка інформації відбувається послідовно розряд за роз-

рядом.

При паралельному способі подання інформації всі розряди двійко-

вої інформації з'являються й обробляються одночасно протягом одного

часового такту. У цьому випадку кожен двійковий розряд обробляється

окремим елементом.

Якщо при послідовній передачі інформації двійковий код розгортається

в часі, то при паралельній – у просторі.

Пристрої ЕОМ, залежно від застосовуваного коду, називаються по-

слідовними або паралельними. Послідовні пристрої потребують на об-

робку більше часу, чим паралельні.

У сучасній обчислювальній техніці для досягнення високої швид-

кодії передачі даних застосовуються паралельні системи, хоча вони

й вимагають більшого обсягу апаратури. Якщо є необхідність в економії

апаратної частини, то застосовують послідовну схему передачі даних.

Обробка інформації в обчислювальних системах звичайно виконуєть-

ся з паралельними кодами даних, і чим більша розрядність паралельного

коду, тим більшої ефективності обчислень можна досягти.

Поняття кінцевих автоматів. Математичним апаратом сучас-

них обчислювальних систем є булева алгебра, названа так на честь шот-

ландського математика Джона Буля. В алгебрі Буля безліч змінних скла-

дається з двох елементів: "0" і "1". Ці елементи одержали назву логічно-

го нуля та логічної одиниці. При цьому одиничне значення змінної інтер-

претується як величина у двійковій системі числення або як вказівка на

те, що на вході системи або всередині її відбулася деяка подія.

Математичний апарат булевої алгебри є основою для методів логіч-

ного проектування цифрових пристроїв функціонального призначення,

таких, як шифратор, дешифратор, мультиплексор, демультиплексор, пе-

ретворювачі кодів, суматори та ін. Основними операціями булевої алгеб-

ри є заперечення, логічне додавання (диз'юнкція) і логічне множення (ко-

н'юнкція).

Для вивчення цифрових пристроїв у цілому застосовується аб-

Page 21: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

21

страктна математична модель, називана кінцевим автоматом. Кінце-

вим автоматом називається пристрій, для якого визначено такі характе-

ристики:

дискретний час t, що приймає цілі додатні значення (t = 0, 1, 2, ...);

кінцева множина {x1, x2, …, x

n1} можливих значень вхідного сигналу

X (t), які отримали назву вхідного алфавіту автомата;

кінцева множина {y1, y

2, …, y

n1} можливих значень вихідного сигна-

лу Y (t), який називається вихідним алфавітом автомата;

кінцева множина внутрішніх станів автомата {q1, q

2, …, q

n1};

функція переходів Fп, що визначає стан, у який автомат перейде

в момент часу t + 1, якщо відомо його стан і значення вхідного сигналу

в момент часу t;

функція виходів Fвих

, що виражає залежність значення вихідного сиг-

налу автомата від його внутрішнього стану та значення вхідного сигналу

в момент часу t.

Позначаючи поточне значення стану автомата через Q(t), а дії че-

рез функції Fп і F

вих, роботу кінцевих автоматів можна записати за допо-

могою рівнянь:

Q(t + 1) = Fп(Q(t), X(t)); (1.1)

Y(t) = Fвих

(Q(t), X(t)).

Знаючи вид функцій Fп і F

вих для будь-якого початкового стану Q (0)

та вхідного сигналу X (t), можна знайти послідовність станів Q (t + 1)

і вихідний сигнал Y (t).

Використовуючи ці положення, є можливість представлення до-

вільного кінцевого автомата сукупністю взаємодіючих автоматів най-

простішого типу з одним або двома внутрішніми станами.

Автомат з одним внутрішнім станом (або найпростіший автомат)

називають комбінаційною логічною схемою. Він складається з логічних

елементів і пристроїв, стан виходів яких цілком визначається комбіна-

цією вхідних сигналів у даний момент часу й не залежать від попередніх

значень цих сигналів. Такі логічні елементи не запам'ятовують інформа-

цію. Вихідне значення комбінаційних логічних схем визначається систе-

мою перемикальних функцій вхідних двійкових змінних:

y1 = F

вих1(x1, x

2, …, x

m),

y2 = F

вих2(x1, x

2, …, x

m),

.......................................

yn = F

вих n(x1, x

2, …, x

m),

де m і n – числа вхідних і вихідних двійкових змінних відповідно.

Page 22: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

22

Елементарні автомати з двома внутрішніми станами являють со-

бою логічні схеми з пам'яттю і представлені регістрами, лічильниками

та суматорами.

Дані схеми являють собою пристрій для виконання логічних опе-

рацій, які мають здатність запам'ятовувати окремі стани змінних. Вихідні

значення змінних залежать як від вхідних значень, так і від поточного

стану пристрою й можуть бути описані за допомогою функції (1.1). Зна-

чення вектора станів запам'ятовуються за допомогою тригерів на час,

який відповідає тривалості такту роботи схеми.

Для побудови довільного автомата звичайно використовується об-

межений набір елементарних автоматів. Важливо виконати умову, щоб

функція переходів задовольняла умову повноти. Ця умова полягає в тому,

що для будь-якого стану існує вхідний сигнал, що перемикає автомат

у новий стан, і сигнал, що блокує колишній стан.

Елементи теорії алгебри логіки. Для опису функціонування

цифрових схем за допомогою апарата алгебри логіки, результат обчис-

лень може набирати значення істинності або хибності, привласнюючи

значення "1" істинним і значення "0" хибним висловлюванням.

Для роботи зробимо два припущення:

усяке висловлювання істинне або хибне (закон вилучення третього);

ніяке висловлювання не може бути істинним і хибним одночасно (за-

кон вилучення протиріч).

Основним поняттям алгебри логіки є поняття перемикальної (ло-

гічної) або булевої функції. Функція F = f (x1, x2, …, x

n) називається пере-

микальною (булевою), якщо сама функція F і її змінні x1, x

2, …, x

n мо-

жуть набирати тільки два значення – "0" (хибність) або "1" (істина).

Перемикальні функції можуть бути задані різними способами: сло-

весним описанням, таблицями істинності, аналітично та графічно.

Словесне описання логічних функцій робиться у вигляді визначень,

формулювань, умов тих або інших завдань.

Таблицею істинності перемикальної логічної функції називається

таблиця, в якій значення функції поставлене у відповідність значенням її

аргументів.

При аналітичному описанні перемикальні функції подаються у ви-

гляді формул, рівностей і виразів подібно до того, як це робиться в ал-

гебрі. Ці функції можуть бути досить складними. Для їхнього спрощення

(мінімізації) можна використовувати аксіоми та закони алгебри логіки.

При графічному описанні логічних функцій використову-

ються умовні позначки двійкових логічних елементів відповідно до

ГОСТ 2.743–91: кожна логічна функція позначається прямокутником,

що містить основне й, при необхідності, додаткові поля; двійкові змінні

Page 23: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

23

є входами, а функція – виходом; входи розташовуються в додатковому

полі ліворуч, а виходи – праворуч; допускається розміщення входів вгорі,

а виходів – внизу.

1.4. Базові комбінаційні цифрові елементи

Будь-яка арифметична дія над двійковими числами може бути вира-

жена через основні логічні функції (операції). В основі побудови обчис-

лювальних систем перебувають три базові елементи: логічне множення

(кон'юнкція); логічне додавання (диз'юнкція); логічне заперечення

(інверсія).

Логічне множення (кон'юнкція) або логічна операція "І" – це функ-

ція, яка двом або більше аргументам ставить у відповідність нове зна-

чення функції, істинне тільки тоді, коли всі вхідні аргументи істинні, тоб-

то нове значення функції буде дорівнювати логічній одиниці тільки в то-

му випадку, якщо значення всіх аргументів дорівнює логічній одиниці.

У формулах (виразах) логічних операцій логічне множення може позна-

чатися одним із наступних символів: & (амперсенд), ×, ·, ∧, або не позна-

чатися. Цифровий елемент логічного множення графічно представля-

ють прямокутником із символом логічного множення "&", розташо-

ваним у правому верхньому куті (рис. 1.3,а).

г

x1

x2

Y

t

0 2 31 4 6 75 8

б

x1 x2 Y&x1

x2

Y

a

в

Y

0

0

0

1

x2

0

1

0

1

x1

0

0

1

1

Рис. 1.3. Логічний елемент "І":

а – графічне подання; б – принцип роботи; в – таблиця істинності; г – часова діаграма

Page 24: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

24

Принцип роботи кон'юнкції можна подати двома послідовно розмі-

щеними вимикачами (рис. 1.3,б), які сформують на виході Y сигнал тільки

при одночасно включених вимикачах. На виході Y логічна "1" буде лише

у випадку, якщо на входи х1 та х

2 буде одночасно подана логічна "1".

Таблиця істинності для логічного елемента "І" і часова діаграма ро-

боти представлені на рис. 1.3,в й г відповідно. Аналітичне описання ло-

гічної функції кон'юнкція може бути представлене в наступних виглядах:

Y = х1 · х

2 = х

1 × х

2 = х

1 ∧ х

2.

Логічне додавання (диз'юнкція) або операція логічного "АБО" – це

функція, що двом або більше аргументам ставить у відповідність нове

значення функції, істинне, якщо хоча б один аргумент має значення істин-

ності. Логічною сумою вхідних змінних хі називається двійкова змінна Y,

яка набуває нульового значення тільки тоді, коли всі доданки одночасно

дорівнюють нулю. Логічне додавання позначається за допомогою знаків

+ або ∨. Схематичне подання цифрового елемента логічного додавання

й принцип його роботи представлені на рис. 1.4,а і б відповідно. На виході

Y цифрового елемента логічного додавання буде логічна "1" у випадку,

якщо хоча б на одному із входів – х1 або х

2 – присутня логічна "1".

1x 1

x 2

Y

a

в

б

x 1

x2

Y

x1

0

0

1

1

x2

0

1

0

1

Y

0

1

1

1

x2

x1

Y

г

0

t

1 2 3 4 5 6 7 8

Рис. 1.4. Логічний елемент "АБО":

а – схематичне подання; б – принцип роботи; в – таблиця істинності; г – часова діаграма

Page 25: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

25

Цифровий пристрій, що реалізує операцію логічного додавання,

позначається прямокутником, в основному полі якого ставиться символ

"1" – умовна позначка реалізованої функції логічного додавання. Кількість

входів дорівнює кількості вхідних змінних.

Таблиця істинності та часова діаграма роботи логічного елемента

"АБО" представлена на рис. 1.4,в і г відповідно. Аналітичне описання

логічної функції диз'юнкції може бути представлене в наступних вигля-

дах:

Y = х1 + х

2 = х

1 ∨ х

2.

Логічне заперечення (інверсія) або логічний елемент "НІ" – це ло-

гічна функція, яка кожному аргументу ставить у відповідність нове зна-

чення, що заперечує вхідне.

Символом логічного заперечення є мітка у вигляді кружечка, що

розміщається на перетині лінії входу або виходу та прямокутника. В опи-

саннях операцій логічне заперечення позначається рискою над аргумен-

том.

Цифровий елемент логічного заперечення представлений на

рис. 1.5,а. Таблиця істинності та часова діаграма роботи логічного еле-

мента "НІ" представлені на рис. 1.5,б й в відповідно. Аналітичне опи-

сання заперечення "НІ" може бути представлене в наступному вигляді:

xY = .

б

x Y

0

01

1

1x Y

a

0 2 31 4 6 75 8

t

в

x

Y

Рис. 1.5. Логічний елемент "НІ":

а – схематичне подання; б – таблиця істинності; в – часова діаграма

Page 26: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

26

1.5. Похідні логічні елементи

Крім трьох базових елементів, у цифровій техніці широко застосову-

ються ще чотири логічних елементи, що одержали назви похідних: "ви-

ключаюче АБО", "виключає АБО-НІ", заперечення кон'юнкції (штрих

Шеффера), заперечення диз'юнкції (стрілка Пірса).

Логічний елемент заперечення кон'юнкції (штрих Шеффера) скла-

дається з послідовно з'єднаних елемента логічного "І" та логічного еле-

мента "НІ" (логічний елемент "І-НІ"). Графічне позначення логічного

елемента "І-НІ" представлене на рис. 1.6,а та б (на рис. 1.6,а детальний

опис елемента "І-НІ"). Функція буде набирати значення логічної одиниці

в тому випадку, коли хоча б один із вхідних сигналів буде логічним ну-

лем. Алгебраїчний запис операції Шеффера може бути представлений

наступним виразом:

.2121

xxxxY ∧=⋅=

Таблиця істинності та часова діаграма роботи логічного елемента

"І-НІ" представлені на рис. 1.6,в й г відповідно.

Логічний елемент заперечення диз'юнкції (стрілка Пірса) скла-

дається з послідовно з'єднаних логічних елементів "АБО" та "НІ"

(рис. 1.7,а й б). Функція буде приймати значення логічної одиниці в тому

&x1

x2

Y

a

1

&x1

x2

б

Y

x1

0

0

1

1

x2

0

0

1

1

Y

1

1

1

0

г

x 1

x2

0 2 31 4 6 75 8

Y

t

х1

х2

х1

х2

&

&

1

Y

Y

Y

х1

х2

0 1 2 3 4 5 6 7 8

t

г

a

в

б

х1 х2 Y

0 0 1

0 1 1

1 0 1

1 1 0

Рис. 1.6. Елемент логічного заперечення "І-НІ":

а – функціональна структура елемента; б – схематичне подання; в – таблиця істинності;

г – часова діаграма

Page 27: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

27

випадку, коли всі вхідні сигнали будуть логічним нулем. Алгебраїчний

запис стрілки Пірса може бути поданий наступними виразами:

.2121

xxxxY ∨=+=

Таблиця істинності та часова діаграма роботи логічного елемента

"АБО-НІ" представлені на рис. 1.7,в та г відповідно.

Логічний елемент "виключаюче АБО" (суматор за модулем 2)

представляє функцію, що набирає значення логічної одиниці, якщо скла-

дові її аргументи мають різні значення. Алгебраїчний запис суматора за

модулем 2 може бути представлений наступними виразами:

.212121

xxxxxxY ⋅+⋅=⊕=

Графічне позначення логічного елемента "виключаюче АБО", його

часова діаграма роботи й таблиця істинності представлені на рис. 1.8.

Логічний елемент "виключаюче АБО-НІ" представлений на

рис. 1.9. Функція буде набирати значення логічної одиниці в тому випад-

ку, якщо складові її аргументи мають рівні значення. Алгебраїчний запис

даного елемента може бути представлений наступним виразом:

.212121

xxxxxxY ⋅+⋅=⊕=

&x1

x2

Y

a

1

&x1

x2

б

Y

x1

0

0

1

1

x2

0

0

1

1

Y

1

1

1

0

х1

х2

х1

х2

1

1

1

Y

Y

Y

х1

х2

0 1 2 3 4 5 6 7 8

t

г

a

б

х1 х2 Y

0 0 1

0 1 0

1 0 0

1 1 0

Рис. 1.7. Логічний елемент логічного заперечення "АБО-НІ":

а – функціональна структура елемента; б – схематичне подання; в – таблиця істинності;

г – часова діаграма

в

Page 28: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

28

б

x1

0

0

1

1

x2

0

0

1

1

Y

0

1

1

0

x 2

в

x1

Y

0 2 31 4 6 75 8

t

=1x1

x2

Y

a

Рис. 1.8. Логічний елемент " виключаюче АБО":

а – схематичне подання; б – таблиця істинності; в – часова діаграма

б

x1

0

0

1

1

x2

0

0

1

1

Y

1

0

0

1

a

=1x1

x2

Y

в

x 1

x2

Y

0 2 31 4 6 75 8

t

Рис. 1.9. Логічний елемент "виключаюче АБО-НІ":

а – схематичне подання; б – таблиця істинності; в – часова діаграма

a

б

в

a

б

в

Page 29: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

29

1.6. Перетворення логічних функцій

При всій складності цифрових пристроїв вони базуються на прин-

ципі багаторазового повторення простих базових схем. Зв'язок між схе-

мами будується на основі формальних методів. Інструментом такої по-

будови служить булева алгебра, що у цифровій техніці називається також

алгеброю логіки.

Розглянемо властивості основних логічних елементів.

Операції з "0" та "1". Якщо на один із входів логічного елемента

"І" подати логічну "1", то на виході буде повторюватися сигнал, що над-

ходить на другий вхід. Однак при подачі логічного "0" на один із вхо-

дів, на виході буде "0", незалежно від станів іншого входу. Розглянуті

властивості можна описати наступним чином: х ⋅ 1 = х і х ⋅ 0 = 0

(рис. 1.10,а та б).

Для логічної схеми "АБО" подача логічної "1" на один із входів одно-

значно визначає одиничний стан на виході, а логічний "0" на вході ви-

магає перевірки інших входів на наявність логічної "1". На виході буде

логічний "0" при наявності логічних нулів на всіх входах. Розглянуті

властивості можна подати в наступному вигляді: х + 1 = 1 і х + 0 = х

(рис. 1.10,в та г).

Правило заперечення. Якщо на вході логічного елемента "І" по-

дати протилежні сигнали, то на виході завжди буде логічний "0", тому що

один із сигналів завжди буде дорівнювати логічному нулю (рис. 1.10,ґ),

тобто 0=⋅ хx .

Для логічного елемента "АБО" у цьому випадку на виході завжди

буде присутня логічна "1", тому що один із вхідних сигналів завжди буде

дорівнювати логічній "1" (рис. 1.10,д), тобто 1хx =+ .

Правило подвійного заперечення. Якщо сигнал двічі проінвер-

тувати, то він не змінить свого значення на виході x.x =

Комутативний (переміщувальний) закон. При операціях логіч-

ного додавання або множення при зміні місць аргументів результат за-

лишається незмінним:

х1 + х

2 = х

2 + х

1;

х1 ⋅ х

2 = х

2 ⋅ х

1.

Асоціативний (сполучний) закон. В операціях логічного дода-

вання або множення групування аргументів не змінює результат опе-

рації:

( ) ( )( ) ( ) .

;

321321

321321

xxxxxx

xxxxxx

++=++

⋅⋅=⋅⋅

Page 30: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

30

x

Y

?1?

1x

Y

?1?

"1"

&

Y

х

"0"

&

Y

х ⋅ 1 = х х ⋅ 0 = 0

a б

x

Y

?1?

1x

Y

?1?

"1"

1

Y

х

"0"

1

Y

х + 1 = 1 х + 0 = х

в г

x

Y

?1?

1x

Y

?1?

1х &

Y

х 1

Y

х ⋅ х = 0 х + х = 1

ґ д

х х

x1

Yx2

x3

1

&

x1 Y

x2

x3

1

&

&

х1

1

Y

Y

Y = х1 ⋅ (х

2 + х

3)

Y = х1 ⋅ х

2 + х

1 ⋅ х

3

е

є

х2

х3

&

х1

х2

х3

&

&

1

x1

Yx2

x3

1

&

x1 Y

x2

x3

1

&

&

х1

&

Y

Y

Y = х1 + (х

2 ⋅ х

3)

Y = (х1 + х

2) ⋅ (х

1 + х

3)

ж

з

х2

х3

1

х1

х2

х3

1

1

&

Рис. 1.10. Перетворення логічних функцій

Page 31: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

31

Закон дистрибутивності (розподільний закон). Можливість

керувати проходженням сигналів описана в законі дистрибутивності:

( )( ) ( ) ( ).

;

xxxxxxx

xxxxxxx

3121321

3121321

+⋅+=⋅+

⋅+⋅=+⋅

Сигнал на вході х1 дозволяє або забороняє проходження для схеми

сигналів х2 і х

3 (рис. 1.10,е та є). Якщо на вхід подати логічний нуль, то

проходження сигналів х2 і х

3 буде заблоковано й на виході сформується

нульове значення. Наявність логічної одиниці на вході х1 дозволяє фор-

мувати сигнал на виході залежно від значень на входах х2 і х

3.

Якщо на вхід х1 (рис. 1.10,ж і з) подати логічну одиницю, то проход-

ження сигналів х2 і х

3 буде заблоковано й на виході сформується одинич-

не значення. Наявність логічного нуля на вході х1 дозволяє формувати

сигнал на виході залежно від значень на входах х2 і х

3.

Закон поглинання (правило склеювання). Якщо в схемі логіч-

ного додавання на один із входів подається сигнал х1, який входить до

складу сигналу, що надходить на другий вхід через схему логічного мно-

ження з будь-яким іншим сигналом х1, то вихідне значення буде визнача-

тися тільки сигналом х1: х

1 + х

1 ⋅ х

2 = х

1.

Даний вираз можна спростити, якщо винести за дужки значення

х1: х

1(1 + х

2). Відповідно до правила виконання операцій з логічною "1"

(1 + х2) = 1, а отже х

1(1 + х

2) = х

1. З точки зору побудови схем такого

елемента не існує і його можна вилучити (замінити просто з'єднанням).

До правила склеювання можна віднести наступні різновиди записів:

.

;

;

21211

21211

1211

xxxхx

xхxxх

x)x(xx

+=⋅+

+=⋅+

=+⋅

Справедливість даних тотожностей доводиться шляхом перетворен-

ня та застосування правила заперечення.

Правило повторення. Надходження однакових сигналів на вхід

формує на виході ідентичний сигнал: х1 ⋅ х

1 = х

1 або х

1 + х

1 = х

1.

Теорема де Моргана. Позитивна логіка подання даних може бути

замінена негативною, при цьому операція логічного додавання заміняється

логічним множенням (можлива зворотна заміна) інверсних значень:

.

;

2121

2121

xxxx

xxxx

+=⋅

⋅=+

Page 32: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

32

1.7. Реалізація основних функцій за допомогою похідних

Одним із основних завдань при побудові складних логічних схем

є можливість подання їх за допомогою більш простих елементів. Одна

з проблем побудови складних систем полягає у виборі типів логічних

елементів, з яких повинні складатися логічні схеми будь-якого ступеня

складності. Набір цих елементів повинен являти собою функціонально

повну систему операцій. Логічні елементи, що виконують операції "І",

"АБО", "НІ", відповідають функціональній повноті операцій.

Практично, поряд із цими логічними елементами для побудови циф-

рових схем широко застосовуються два функціонально повних елемен-

ти: "І-НІ" й "АБО-НІ", які дозволяють одержати будь-які основні логічні

функції (табл. 1.5).

Таблиця 1.5. Подання основних логічних елементів за допомогою логічних

елементів "І-НІ" й "АБО-НІ"

x Y1

x2

x1 & &Y 1

1

Y

1

x1

x2

&

&

Y

&

x1

x2

x2

x1 1 1Y

x&

Y

Логічна

функція І-НІ АБО-НІ

НІ

хY =

І

2xxY

1⋅=

АБО

21xxY +=

Page 33: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

33

&

&

&

x1

x2

&Y

1

1

1

x1

x2

Y1

Логічна

функція І-НІ АБО-НІ

АБО-НІ

21xxY +=

І-НІ

21xxY ⋅=

Продовж. табл. 1.5

Використовуючи інвертори на вході та виході, можна взаємно пере-

творити один в одного логічні елементи "І-НІ" й "АБО-НІ".

1.8. Складання логічної функції

Складання логічної функції за таблицею істинності. У циф-

ровій техніці завдання формуються найчастіше у вигляді таблиці пе-

ремикань (або таблиці істинності), коли відомі вхідні сигнали й відповідні

їм вихідні. Для вирішення завдання необхідно знайти таку логічну функ-

цію, щоб вона відповідала таблиці істинності. Після знаходження відпо-

відної логічної функції проводиться спрощення отриманої функції та про-

ектується схема.

Логічна функція записується, як правило, у диз'юнктивній нормальній

формі (ДНФ), отриманій за наступним алгоритмом:

1) у таблиці істинності виділяють рядки (Kі), в яких вихідна змінна

дорівнює "1";

2) для кожного такого виділеного рядка складають добуток усіх

вхідних змінних, записуючи xi, якщо змінна набирає значення "1", й

iх ,

якщо змінна набирає значення "0";

3) записують логічну суму всіх отриманих добутків, що буде пред-

ставляти шукану логічну функцію;

Page 34: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

34

4) проводять спрощення отриманої логічної функції;

5) проектують схему.

Розглянемо приклад проектування схеми на підставі таблиці істин-

ності (табл. 1.6).

Таблиця 1.6. Таблиця істинності перетворення коду

Рядок х1 х2 х3 Y Рядок х1 х2 х3 Y

1 0 0 0 0 5 1 0 0 1

2 0 0 1 0 6 1 0 1 0

3 0 1 0 1 7 1 1 0 1

4 0 1 1 0 8 1 1 1 0

Вибираємо рядки, у яких значення вихідного сигналу дорівнює оди-

ниці, й складаємо кон'юнкцію всіх вхідних змінних:

.

;

;

3217

3215

3213

xxx

xxx

xxx

⋅⋅=

⋅⋅=

⋅⋅=

K

K

K

Шукана функція записується у вигляді диз'юнктивної нормальної

форми, що буде представляти шукану логічну функцію:

.753 321321321

xxxxxxxxxY ⋅⋅+⋅⋅+⋅⋅=++= KKK

Проведемо спрощення даного логічного запису:

)].xx(xxx[x)xxxxxx(x

xxxxxxxxx

2212132121213

321321321

++⋅=⋅+⋅+⋅=

=⋅⋅+⋅⋅+⋅⋅=Y

Значення в круглих дужках дорівнює 1, тому одержимо

).xxx(x1213

+⋅=Y

Відповідно до закону поглинання, значення в дужках набере наступ-

ного вигляду:

x1 + x

2.

Логічна функція, яку шукали, набуде такого значення:

).x(xx213

+=Y

Page 35: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

35

x1

Y&

1

1

x2

x3Рис. 1.11. Реалізація логічної схеми

за таблицею істинності

Реалізація схеми за заданою

логічною функцією буде такою, як

на рис 1.11.

Таблиці Карно. Найважливішим допоміжним засобом для визна-

чення найбільш простої логічної функції є таблиця Карно, що являє со-

бою змінений запис таблиці перемикань. Для таблиці Карно значення

вхідних змінних розміщаються по горизонталі й вертикалі таблиці, діля-

чи її на окремі квадрати. При парній кількості вхідних змінних вони ділять-

ся навпіл і записуються одні по горизонталі, а інші – по вертикалі. При

непарній кількості змінних по горизонталі або вертикалі розміщається на

одну змінну більше.

Порядок розміщення різних комбінацій значень вхідних змінних вар-

то вибрати таким, щоб при переході від одного осередку до сусіднього

змінювалася лише одна змінна. В поля, які утворилися, заносяться ті

значення вихідних змінної Y, які відповідають значенням вхідних змінних.

x1 x 2 Y

00 0

0

0

0

0

1

1

1

11

1

11 0

0 0 0

0x1

x2

Для функції логічного

"І" таблиця істинності

та відповідна їй табли-

ця Карно наведені на

рис. 1.12.

Таблиця Карно є

спрощеною формою

запису таблиці істин-

ності, й на її підставі

можна скласти диз'-

юнктивну нормальну

Рис. 1.12. Таблиця істинності (а) й таблиця

Карно (б) для функції "І"

форму шуканої логічної функції. Перевагою таблиць Карно є простота

виявлення можливих спрощень логічної функції. Таблиця Карно для

n-двійкових змінних являє собою прямокутну таблицю з кількістю клітин

у ній, рівній N = 2n. Таким чином, для трьох змінних таблиця Карно вклю-

чає вісім клітин, для чотирьох – шістнадцять і т. д.

Загальне правило спрощення логічних функцій для таблиць Карно

полягає в наступному: якщо у двох, чотирьох, восьми і т. д. осередках,

а б

Page 36: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

36

обмежених прямокутним або квадратним контуром, перебувають тільки

одиниці, можна записати безпосередньо логічний добуток для всієї цієї

групи. У цей добуток повинні входити лише ті вхідні змінні, які залиша-

ються незмінними для всіх осередків даної групи.

В одну групу зв'язуються також ті осередки, які перебувають на

лівому та правому краях одного рядка або у верхній і нижній частинах

одного стовпчика.

Розглянемо таблицю істинності (табл. 1.7).

Таблиця 1.7. Таблиця істинності для схеми з чотирма входами

x1 x2 x3 x4 Y x1 x2 x3 x4 Y

0 0 0 0 1 1 0 0 0 1

0 0 0 1 1 1 0 0 1 0

0 0 1 0 1 1 0 1 0 1

0 0 1 1 1 1 0 1 1 1

0 1 0 0 1 1 1 0 0 0

0 1 0 1 0 1 1 0 1 0

0 1 1 0 0 1 1 1 0 1

0 1 1 1 0 1 1 1 1 1

Для одержання диз'юнктивної нормальної форми складемо логічний

добуток усіх вхідних змінних для кожного рядка, на виході якого сформо-

вана одиниця:

;1 4321

xxxx ⋅⋅⋅=K ;9 4321

xxxx ⋅⋅⋅=K

;2 4321

xxxx ⋅⋅⋅=K ;11 4321

xxxx ⋅⋅⋅=K

;3 4321

xxxx ⋅⋅⋅=K ;12 4321

xxxx ⋅⋅⋅=K

;4 4321

xxxx ⋅⋅⋅=K ;15 4321

xxxx ⋅⋅⋅=K

;5 4321

xxxx ⋅⋅⋅=K .16 4321

xxxx ⋅⋅⋅=K

Складемо окремо логічну суму добутків для елементів, у яких

х1 = 0. З огляду на правило заперечення, одержимо доданок S

1 та S

2 за

допомогою наступних перетворень:

.

;

;

;

43152

212132143211

3212142143

321321432121

xxxx

xxxxxxxx

xxxxxxxxxxx

xxxxxxxxxxx

2

3

433

4

⋅⋅⋅==

⋅=⋅⋅+⋅⋅=+++=

⋅⋅=⋅⋅⋅+⋅⋅⋅=+

⋅⋅=⋅⋅⋅+⋅⋅⋅=+

KS

KKKKS

KK

KK

Page 37: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

37

При виконанні логічного додавання S1 й S

2 з урахуванням прави-

ла склеювання одержимо наступний розв'язок для першої частини

осередків:

.)(

)]([21

431214321

43221432121

xxxxxxxxx

xxxxxxxxxxx

⋅⋅+⋅=⋅+⋅=

=⋅+⋅=⋅⋅⋅+⋅=+ SS

Тепер складемо логічну суму добутків елементів, для яких значення

x1 = 1, з використанням тих же правил, що й у попередньому випадку:

.

;

;

;

16151211

1615

1211

93

313213214

32143214321

32143214321

4321

xxxxxxxx

xxxxxxxxxxx

xxxxxxxxxxx

xxxx

⋅=⋅⋅+⋅⋅=+++=

⋅⋅=⋅⋅⋅+⋅⋅⋅=+

⋅⋅=⋅⋅⋅+⋅⋅⋅=+

⋅⋅⋅==

KKKKS

KK

KK

KS

Виконаємо логічне додавання S3 й S

4 з урахуванням правила склею-

вання:

.)]([43 4213142331432131

xxxxxxxxxxxxxxxx ⋅⋅+⋅=⋅+⋅=⋅⋅⋅+⋅=+ SS

Описання таблиці істинності може бути подане в наступному ви-

гляді:

.4321 4213143121

xxxxxxxxxxY ⋅⋅+⋅+⋅⋅+⋅=+++= SSSS

Спробуємо спростити вираз, застосувавши правило склеювання

для першого та четвертого доданків:

( ) ( ) .4221412411242121

xxxxxxxxxxxxxxxx ⋅+⋅=+⋅=⋅+⋅=⋅⋅+⋅

Після всіх перетворень одержимо максимально спрощений ре-

зультат:

.423143121

xxxxxxxxxY ⋅+⋅+⋅⋅+⋅=

Побудуємо таблицю Карно для розглянутого прикладу. Для чоти-

рьох вхідних змінних одержимо квадрат із шістнадцятьма клітинами,

у які запишемо значення з таблиці істинності для відповідних вхідних

сигналів (рис. 1.13).

У таблиці Карно виділимо осередки, в яких результат дорівнює

одиниці та об'єднаємо в наступні групи: A, B, C, D.

Для стовпчика A, що складається з чотирьох осередків, незмін-

ними є тільки вхідні дані х1 та х

2. Логічний добуток можна записати

Page 38: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

38

наступним чином:

.21

xx ⋅=A

K

Для групи B незмінними

будуть вхідні дані х1, х

3 та х

4.

Логічний добуток запишемо

так:

.431

xxx ⋅⋅=В

K

Для контуру C, що має

квадратну форму й скла-

дається з чотирьох елементів,

одержимо наступний логіч-

ний добуток:

.31

xx ⋅=C

K

A

B

C

D

D

x3 x4

x1 x2

00

01

11

10

00 111001

0

0

0

000

111

111

1

11 1

11 10

11

10

Рис. 1.13. Таблиця Карно для схеми

з чотирма входами

Одиницю, що перебуває в правому верхньому куті, зв'яжемо з оди-

ницею в нижній частині даного стовпчика (можна об'єднати з одиницею,

що перебуває в лівому верхньому куті). Однак якщо взяти до уваги, що

в кожному куті таблиці Карно перебуває одиниця, то можна знайти най-

простіше рішення, зв'язавши ці одиниці в одну чотириелементну групу.

Незмінними вхідними даними будуть значення х2 й х

4. Логічний добуток

буде представлено наступним чином:

.42

xx ⋅=D

K

Таким чином, диз'юнктивна нормальна форма буде

.423143121

xxxxxxxxxY ⋅+⋅+⋅⋅+⋅=+++=DCBA

KKKK

За допомогою таблиці Карно отримали спрощений результат для

диз'юнктивної нормальної форми значно простіше, ніж при додаванні

логічної функції по рядках.

1.9. Напівпровідникові прилади

Електронно-дірковий перехід. Напівпровідникові матеріали зай-

мають середнє значення за провідністю струму між провідниками

й ізоляторами, однак такий поділ є формальним. Клас напівпровіднико-

вих елементів дуже широкий, а основними в ньому є кремній, германій,

арсенід галію. Одержати абсолютно чистий напівпровідниковий мате-

ріал без дефектів у кристалічних решітках практично неможливо. Навіть

Page 39: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

39

незначна частка домішок впливає на характеристики напівпровідників.

Розрізняють домішки, які містять більше або менше електронів у ва-

лентній оболонці, ніж основний напівпровідник. Домішки з більшою

кількістю електронів у валентній зоні одержали назву донорів й основним

носієм зарядів у них є електрони. Домішки з меншою кількістю елек-

тронів у валентній зоні одержали назву акцепторів й основним носієм

зарядів служать вакансії (дірки) для розміщення електронів. Залежно від

домішок розрізняють напівпровідники з електронною (n-типу) або дір-

ковою (p-типу) типами провідності.

Якщо розглядати питання електропровідності матеріалів у рамках

квантової механіки, то електрони в металах не взаємодіють з іонами

кристалічних решіток і можуть вільно переміщатися. Електрони не мо-

жуть набирати довільних значень енергії, а розподілені по дискретних

енергетичних рівнях. Для напівпровідникових елементів іони кристаліч-

них решіток формують потенційні рівні, розділені заборонними зонами.

У напівпровіднику з домішками можна виділити наступні енергетичні

зони: валентна зона елементів кристалічних решіток, заборонна зона та

вільна зона. Електрони, що покинули валентну зону й перейшли у вільну,

стають носіями заряду. Ширина заборонної зони для германію стано-

вить 0,72 еВ, а для кремнію – 1,1 еВ (1 еВ – це кількість енергії, що

отримує або втрачає вільний електрон при переміщенні між двома точ-

ками електричного поля з різницею потенціалу в 1В; для ізоляторів

заборонна зона перевищує 10 еВ).

Основою напівпровідникових приладів є електронно-дірковий перехід,

який одержують введенням у різні області єдиної кристалічної структу-

ри акцепторні й донорні домішки. На межі розділення областей p- і n-

типів утвориться потенційний бар'єр, який називають p-n-переходом. Якщо

на p-n-переходи подати зовнішнє електричне поле таким чином, щоб

"плюс" підключався до p-області, а "мінус" – до n-області, то в цьому

випадку висота потенційного бар'єра буде зменшуватися. Таке підклю-

чення називається прямим і струм, обумовлений перенесенням заряду

основними носіями, буде швидко збільшуватися зі збільшенням поданої

напруги. При зворотній полярності підключення зовнішнього джерела

збільшується висота потенційного бар'єра, що перешкоджає проходжен-

ню основних носіїв заряду, й струм створюється за рахунок руху не-

основних носіїв. Такий струм називається зворотним і вплив зовнішнього

джерела на нього незначний.

Діод і його робота. Найпростішим напівпровідниковим елементом

є діод, що служить для пропускання струму в одному напрямку (випрям-

Page 40: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

40

ний діод). Діод виготовляється з двох напівпровідникових елементів

з різним типом провідності. Залежність струму від прикладеної напруги

в діоді є нелінійною характеристикою. Умовне позначення діода та його

вольт-амперна характеристика роботи представлені на рис. 1.14. Діод

А К

I

U зв

UакUd

Imax

Id

Рис. 1.14. Умовне позначення діода та його

вольт-амперна характеристика

має два виводи: анод

(А), який підключено до

р-області, і катод (К) –

до n-області. На вольт-

амперній характеристиці

представлено: значення

прямої напруги (Ud) при

струмі Id = 0,1I

max; мак-

симально допустимий

струм Imax

і максималь-

но допустима зворотна

Id

Ud

UАК

напруга (Uзв). Перевищення U

зв приводить до виходу діода з ладу через

перегрів.

Крім випрямних діодів широко поширені діоди Шоттки, стабілітро-

ни, варикапи.

Діоди Шоттки мають перехід метал–напівпровідник. Нагрома-

дження заряду на такому переході незначне, що дозволяє зменшити час

перемикання до 100 пс (1пс = 0,1 нс).

Стабілітрон забезпечує підтримку незмінної напруги (стабілізацію)

джерела для деякого діапазону зміни струму споживання. Зворотна час-

тина вольт-амперної характеристики стабілітрона має крутий злам, який

використовується для стабілізації. Ефект стабілізації базується на тому,

що великому діапазону зміни струму відповідає мала зміна напруги. Ста-

білізація тим вища, чим менший диференціальний внутрішній опір діода:

rz = dU/dI.

Варикапи являють собою напівпровідниковий прилад, ємність якого

залежить від підведеної напруги. Зі збільшенням зворотної напруги

ємність p-n-переходу зменшується. Варикап може змінювати ємність

в 5 разів у межах 5…300 пФ.

Біполярні транзистори. Транзистор – це напівпровідниковий еле-

мент, який складається з трьох елементів і слугує для посилення або

перемикання сигналу. Він був винайдений у 1948 році й становить основу

побудови цифрових логічних елементів.

Транзистор складається з двох груп p-n-переходів, які мають один

Page 41: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

41

спільний p- або n-шар і називаються p-n-p- або n-p-n-типами. Основ-

ним елементом для побудови транзисторів є кремній або германій. Вивід

від загального шару називається базою (B), два інших виводи одержали

назву колектор (C) й емітер (E). Графічне зображення p-n-p-транзисто-

ра представлено на рис. 1.15,а. Звичайно напруга зміщення на перехід

емітер–база подається в прямому напрямку, а на перехід база–колектор

– у зворотному. Основна особливість транзистора в тому, що струм ко-

лектора в кілька разів більший від струму бази. Відношення цих струмів

називається коефіцієнтом підсилення по струму: B = IC

/IB.

Залежно від того, який вивід транзистора приєднують до загальної

точки подачі живлення, розрізняють три схеми вмикання транзистора: із

загальним емітером, колектором або базою. Основна схема включення,

при якій реалізується посилення по струму, називається схемою із за-

гальним емітером і представлена на рис 1.15,б.

B

C

E

a

UG

RC

UBE

UCE

Uвих Uж

+

б

Рис. 1.15. Основна схема включення транзистора:

а – схема p-n-p-транзистора; б – схема включення p-n-p-транзистора з загальним

емітером

При поданні на вхід база–емітер кремнієвих транзисторів напруги

UВЕ

= 0,6 B в колі колектора протікає струм приблизно 1 мА. При підви-

щенні напруги UВЕ

струм колектора IС буде збільшуватися, що призведе

до збільшення падіння напруги на резисторі навантаження RC та змен-

шення вихідної напруги Uвих

на транзисторі. Зміна амплітуди вхідного

сигналу спричиняє зміну вихідного, але він буде інвертований по відно-

шенню до вхідного і мати більшу амплітуду.

Схема з загальним емітером підсилює вхідний сигнал по напрузі, і ці

Page 42: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

42

властивості описуються виразом Uвих

= –S ⋅ RC. Мінус означає, що сиг-

нал на виході схеми змінюється в протифазі із вхідним сигналом, S –

коефіцієнт підсилення транзистора по напрузі, RC – опір резистора на-

вантаження в колі колектора, а Uвих

– амплітуда вихідного сигналу.

При значних збільшеннях вхідного сигналу вихідний Uвих

починає

спотворюватися й практично набирати два значення: близьке до нуля

та джерела живлення. Значення близьке до нуля визначаться спаданням

напруги на відкритому переході колектор–емітер. При закритому пере-

ході амплітуда вихідного сигналу буде наближатися до значення джере-

ла, зменшеного на спад напруги на резисторі RC в ланцюзі колектора.

Струм через транзистор при закритому переході колектор–емітер ста-

новить одиниці мікроамперів, а спад напруги на колекторному рези-

сторі – менше вольта.

Такий режим роботи транзистора називається режимом ключа. Фор-

мовані на виході транзистора два стани в цифровій техніці умовно позна-

чають логічними нулем і одиницею.

Польові транзистори. Окрему групу становлять польові транзис-

тори, дія яких пов'язана з рухом зарядів тільки одного знака. В основі

роботи польового транзистора лежить залежність опору струмопровід-

ного шару (каналу) від прикладеної напруги, тобто від величини елект-

ричного поля. Струмопровідний шар утворений напівпровідником p-

або n-типу, до якого підключено два омічних контакти (виводи), що одер-

жали назву сток і витік. Між стоком і витоком розташовується p-n-пе-

рехід із омічним контактом, який отримав назву затвора. Подаючи

на затвор деяку напругу відносно витоку, можна керувати величиною

опору каналу.

Крім звичайних польових транзисторів широке поширення одер-

жали польові транзистори з ізольованим затвором або МОП-транзисто-

ри (метал–окисел–провідник), затвор яких відділений від каналу сток–

витік тонким шаром окису SiО2.

МОП-транзистори діляться на дві групи: нормально закриті й нор-

мально відкриті. У нормально відкритих n-канальних транзисторів про-

тікає найбільший струм стоку при напрузі на затворі, рівній нулю, а для

нормально закритих транзисторів струм у цьому випадку протікає

мінімальний.

1.10. Загальна характеристика інтегральних мікросхем

Класифікація серій інтегральних схем. Звичайно інтегральні

мікросхеми (ІС) випускаються серіями. Серія являє собою єдине схем-

не й конструктивно-технологічне виконання ІС і може містити, крім ло-

Page 43: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

43

гічних елементів, також більш складні схемні рішення: тригер, лічильник,

регістри та ін.

Залежно від застосовуваного електронного ключа розрізняють на-

ступні типи серій: резисторно-транзисторна логіка (РТЛ), діодно-транзи-

сторна логіка (ДТЛ), транзисторно-транзисторна логіка (ТТЛ), емітерно-

зв'язана логіка (ЕЗЛ).

Широко відомі ІС на біполярних транзисторах, на МОП-структу-

рах (на транзисторах p-типу зі збагаченим каналом) та КМОП-схеми

(комплементарні, доповнюючі) на транзисторах з n- і p-провідністю.

У табл. 1.8 наведені приклади серій ІС.

Таблиця 1.8. Серії інтегральних схем

Тип

логіки Серія ІС Призначення

155, 133 Побудова вузлів ЕОМ і пристроїв дискретної

автоматики середньої швидкодії

130, 131, 599 Побудова швидкодіючих вузлів ЕОМ і при-

строїв дискретної автоматики

134, 158, 533,

555, 734

Побудова вузлів ЕОМ і пристроїв дискретної

автоматики з малим споживанням потужності

ТТЛ

530, 531, 1531,

1533

Побудова вузлів ЕОМ і пристроїв дискретної

автоматики з високою швидкодією та малою

споживаною потужністю

ЕЗЛ 100, 500, 700,

1500

Побудова високошвидкісних ЕОМ й обчислю-

вальних комплексів

КМОП 164, 764, 564,

765, 176, 561

Побудова пристроїв цифрової автоматики

й обчислювальної техніки з дуже малим спо-

живанням потужності та високою перешкодо-

стійкістю

Варта уваги надшвидка серія 531 малого ступеня інтеграції, яка

побудована на елементах ТТЛ-логіки з діодами Шоттки на вхідних еле-

ментах логіки. Середній час затримки перемикання на вентилі стано-

вить 3 нс. Ця серія наближається за швидкодією до емітерно-зв'язаної

логіки, виконаної з використанням надшвидкодійних елементів із часом

затримки перемикання на вентилі 0,75…2,00 нс. Але емітерно-зв'язана

логіка є складною в застосуванні через нетипову напругу джерел жив-

лення та велике споживання струму.

Поряд з ІС малого ступеня інтеграції існує велика кількість ІС се-

реднього ступеня інтеграції. В ІС малого ступеня інтеграції кількість вен-

Page 44: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

44

тилів не перевищує 100, а в ІС середнього ступеня інтеграції воно може

досягати 1000.

Особливу групу серед схем, виконаних на базі технології ТТЛ, ста-

новлять логічні елементи з підвищеною перешкодостійкістю серії 511,

що забезпечується збільшенням живлячих напруг до 12…18 В та змен-

шенням швидкості перемикання логічних елементів в 20…–40 разів.

Інтегральні мікросхеми великого ступеня інтеграції виконують на

основі технології МОП. Ця технологія дозволяє одержати ІС меншої

швидкодії, але набагато вищого ступеня інтеграції, що дає можливість

конструювати логічні ІС, які містять декілька тисяч елементів. На ос-

нові технології МОП виконуються запам'ятовувальні пристрої, регістри

та різні спеціальні пристрої.

Сучасні технології дозволяють випускати надвеликі інтегральні схе-

ми, які нараховують десятки мільйонів елементів на кристалі.

Транзисторно-транзисторні логічні схеми. Основою побудови

ТТЛ-логіки служить транзистор. Базовим елементом є схема "І-НІ", пред-

ставлена на рис. 1.16. Головною особливістю елементів ТТЛ є викорис-

тання в них багатоемітерних транзисторів (БЕТ) на вході, що дозволяє

реалізувати схему логічного множення. Якщо на всі входи БЕТ VT1 по-

дано напругу з рівнем логічної "1", то транзистор VT1 закривається, відкри-

ваючи транзистор VT2.

Струм, що протікає через коло R2, емітер-колектор VT2 і R4, закри-

ває транзистор VT3 і відкриває VT4. Напруга на виході VT4 буде відпо-

відати рівню логічного "0". Якщо хоча б на одному вході БЕТ з'явиться

рівень логічного "0", то відкриється відповідний перехід база–емітер

і БЕТ перейде в стан насичення. Це призведе до закриття транзисто-

ра VT2, що відкриє транзистор VT3 й закриє VT4. Потенціал колекто-

ра VT4 стане близьким до напруги живлення +E. На виході Y схеми

встановиться напруга, що відповідає рівню логічної одиниці.

Базові інтегральні ТТЛ-схеми мають два види виходів: з резисто-

ром у колекторі вихідного транзистора й з відкритим колектором. У схемі

з відкритим колектором навантажувальний резистор вихідного транзис-

тора в інтегральній мікросхемі відсутній. Зовнішнє підключення резисто-

ра дозволяє підібрати його значення для погодження по навантаження

з іншими схемами. Такі схеми використовуються як підсилювачі для

елементів індикації або для формування нестандартних рівнів сигналів.

Крім розглянутих ТТЛ-схем, випускаються схеми з трьома стана-

ми. У третьому стані логічних схем на виході формується "обрив". Схе-

ми з трьома станами мають окремий вхід, за допомогою якого вони

Page 45: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

45

можуть установлюватися в третій стан незалежно від того, які сигнали

діють на логічних входах. Третій стан схем дозволяє підключати ІС на

загальну шину без впливу один на одного.

a

x1

x2

x3

R1 R2 R3

+ E

VT3

VT1

VT2

Y

R4

VD

VT4

в

R3

R1

VT1

VT2Y

VT3

R2

+E

&

Y

б г

x1

x2

x3

x1

x2

x3

&

Yx1

x2

x3

Рис. 1.16. Базові інтегральні ТТЛ-схеми з резистором у колекторі

вихідного транзистора (а), з відкритим колектором (в) і відповідно їхні

умовні позначення (б, г)

а в

б г

Логічні схеми на МОП-транзисторах. Існує декілька різновидів

логічних схем на МОП-транзисторах. Найпоширенішими є схеми, ви-

готовлені за n-МОП- і p-МОП-технологіям. Третій різновид схем на

МОП-структурах становлять схеми, виготовлені за КМОП-технологією

(комплементарні МОП-схеми), де в одній схемі застосовуються як n-

канальні, так і p-канальні транзистори.

Схеми на МОП-транзисторах мають меншу швидкодію, ніж схеми

на біполярних транзисторах, завдяки досить значним ємностям, що утво-

рюються між затвором, витоком, стоком і підкладкою МОП-транзисто-

ра, на перезарядження яких потрібен певний час. Крім того, струм, що

перезаряджає ці ємності, повинен надходити від керуючого вентиля, що

збільшує розсіювану потужність при високій частоті перемикання тран-

зистора. Схеми на МОП-транзисторах споживають незначну потужність,

мають високу навантажувальну здатність і перешкодостійкість, а також

Page 46: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

46

займають мало площі на поверхні кристала. Дані схеми застосовують

у тому випадку, коли швидкодія не потрібна, а необхідний високий ступінь

інтеграції. МОП-транзистори за принципом роботи є аналогами елект-

ронних ламп, тому що керуються напругою, а не струмом.

Перевагами схем на КМОП-транзисторах є мала споживана по-

тужність, висока швидкодія та підвищена перешкодостійкість. Коефіцієнт

розгалуження виходу в КМОП-схем високий, оскільки вони мають дуже

високий вхідний опір. КМОП-схеми можуть працювати в широкому діа-

пазоні напруг живлення, що зручно при їхньому об'єднанні з ТТЛ-схема-

ми. Однак ТТЛ-схеми не можуть керувати КМОП-схемами, тому що

рівень напруги логічної одиниці ТТЛ-схем недостатній для перемикання

КМОП-схем. Узгодження рівнів ТТЛ- і КМОП-схем досягається вклю-

ченням допоміжного резистора між виходами ТТЛ-схем і джерелом

живлення. Але КМОП-технології дозволяють розмістити меншу кількість

елементів на кристалі, порівняно з МОП-технологіями. Для КМОП-схем

споживана потужність у статичному режимі незначна, але в динамічно-

му режимі вона росте з підвищенням частоти перемикання через пере-

зарядження міжелектродних ємностей транзисторів у момент їхнього

перемикання.

1.11. Основні параметри цифрових інтегральних схем

Основними параметрами цифрових інтегральних схем є швидкодія,

споживана потужність, коефіцієнт об'єднання по входу, коефіцієнт розга-

луження по виходу, стійкість проти зовнішніх впливів, ступінь інтеграції,

надійність.

Швидкодія або час затримки ІС, як правило, визначається величи-

ною середньої затримки сигналу tcp

при проходженні через елемент

мікросхеми, яка дорівнює середньому арифметичному затримок вми-

кання (затримки фронту tз.фр

) та вимикання (затримки спаду фронту tз.сп

)

одного інвертора:

).(2

1з.спз.фpср ttt +=

На рис. 1.17 представлена часова діаграма, що пояснює зміну ха-

рактеристик імпульсу при проходженні через інвертор залежно від па-

раметрів вхідного імпульсу та властивостей елемента.

Перехідний процес зміни стану елемента складається з формування

фронту та спаду імпульсу й затримки його проходження через інерційність

Page 47: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

47

спрацьовування, обумовленої наявністю реактивної складового опору

елемента.

Uвх

1

0,5U

t

U вих

1

0,5U

t

tфр tсп

Рис. 1.17. Визначення середнього часу затримки інвертора

tз.фр

tз.сп

При визначенні середньої затримки як границі часових інтервалів

звичайно беруть точки на фронтах, що відповідають половині перепаду

напруги, або ті, які відповідають рівням 0,1 і 0,9 цього перепаду.

За середньою затримкою визначається час перемикання, а логічні

ІС діляться на надшвидкодійні з tпер

< 5 нс, швидкодійні – tпер

< 5…10 нс,

середньої швидкодії – tпер

< 10…100 нс та низької – tпер

> 100 нс.

Схеми ТТЛ-логіки відносяться до схем середньої швидкодії. Для

них типова середня затримка 10…50 нс.

Найбільшу швидкодію мають транзисторні логічні схеми з емітер-

ними зв'язками. Для них середня затримка становить 1…10 нс.

Гранична робоча частота цифрових елементів задає діапазон час-

тот сигналів, переданих елементом без спотворення, щоб за час одного

такту в схемі встигали завершитися перехідні процеси.

Споживана потужність логічних ІС звичайно залежить від того,

які сигнали подані на її входи. Тому споживану потужність прийнято оці-

нювати як середню потужність Qср

, споживану типовим логічним еле-

ментом у вімкненому й вимкненому станах.

вих

Page 48: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

48

Чим вища швидкодія схем, тим більша середня споживана ними

потужність. Для схем ЕЗЛ вона становить 20…80 МВт, для схем ТТЛ –

це 2…40 МВт, для КМОП – 1…100 мкВт.

У процесі перемикання логічних ІС середня споживана потужність

вища від середньої статичної потужності внаслідок сплесків струму

в перехідних режимах. Тому для них звичайно вказується споживана

потужність у динамічному режимі при певній тактовій частоті.

Дуже часто застосовується параметр, який називається роботою

перемикання (або добротністю). Добротність дорівнює добутку серед-

ньої потужності, споживаної ІС, і середньої затримки. Для перших по-

колінь ІС цей показник лежав у діапазоні 50…100 пДж. На сьогодні цей

параметр становить 0,5…5,0 пДж.

Перешкодостійкість логічних ІС прийнято характеризувати пара-

метром, який називається статичною перешкодостійкістю. Статична пе-

решкодостійкість – це найменша постійна напруга, що, будучи доданою

(при найнесприятливішому збігу обставин) до корисного вхідного сигна-

лу, викликає помилку логічних схем. Статична перешкода спостерігається

в тих випадках, коли одержуємо відносно великий опір провідників, що

підводять до ІС живлення. В цьому випадку струм, який проходить по

"земляній" шині викликає падіння напруги, яка, накладаючись на вхідні

сигналами, може призвести до збоїв у роботі схеми.

Що стосується імпульсної перешкодостійкості, то, для того щоб ви-

ник збій, імпульсна перешкода повинна бути більшою за статичні. Тому

при однаковій статичній перешкодостійкості схеми з меншою середньою

затримкою сильніше піддані дії імпульсних перешкод.

Найменшу перешкодостійкість мають схеми ЕЗЛ, для них статична

перешкодостійкість становить 0,1…0,3 В. У схемах ТТЛ-логіки пере-

шкодостійкість вища завдяки наявності зміщення у p-n-переходів на вхо-

дах інверторів. Припустима статична перешкода для цих схем дорів-

нює 0,4…1,1 В. Для логічних схем на КМОП-транзисторах ця величина

може досягати 2–3 В, що пояснюється більшими логічними перепада-

ми напруги у цих схемах.

Коефіцієнт об'єднання по входу – це максимальна кількість логіч-

них елементів, що підключають до входу елемента без зміни сигналу

на його виході. Найчастіше коефіцієнт об'єднання по входу не перевищує

восьми.

Коефіцієнт розгалуження по виходу, або навантажувальна здат-

ність, визначається кількістю схем цієї ж серії, входи яких можуть бути

приєднані до виходу даної схеми без порушення її працездатності. На-

Page 49: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

49

вантажувальна здатність ІС у значній мірі визначається типом застосо-

вуваного в них інвертора. Для найпростішого інвертора, що складається

з одного транзистора, коефіцієнт розгалуження по виходу дорівнює най-

частіше 2…4. Для складних інверторів навантажувальна здатність до-

сягає 10…20 і більше.

Значення коефіцієнта розгалуження інтегральної схеми залежить від

максимально можливого вихідного навантаження її та мінімально мож-

ливого вхідного струму. Для ТТЛ-логіки вихідний струм для логічного

нуля становить 16 мA, а для логічної одиниці – 0,4 мA. Вхідні елементи

споживають 1,6 та 0,04 мA відповідно.

У схемах на основі КМОП-транзисторів входи наступних схем

у статичному режимі практично не навантажують виходи попередніх.

Це дає можливість мати дуже великий коефіцієнт розгалуження по ви-

ходу. Однак треба мати на увазі, що в динамічному режимі ємності

приєднаних входів затягують перехідний процес і збільшують струм,

споживаний від даної схеми.

Стійкість проти зовнішніх впливів характеризує можливість засто-

сування ІС при зміні температури, вологості, радіації і т. д. У значній мірі

цей параметр логічних ІС визначається типом використовуваного корпу-

са. Що стосується електричних ланцюгів ІС, то найменш стійкі до впли-

ву температури інтегральні схеми ЕЗЛ. Більш стійкі схеми КМОП і ТТЛ.

Найширший температурний діапазон для серійних ІС від –60 до

+125 °С. Для схем загальнопромислового застосування цей діапазон

звичайно визначається межами –10 і +70 °С.

Ступінь інтеграції елементів ІС характеризує технологічний рівень

виробництва, чисельно визначається кількістю елементів в одному кри-

сталі, яка округляється до більшого цілого числа десяткового логариф-

ма. Застосовується поняття ступеня інтеграції не елементів, а логічних

функцій, що показує, яка кількість ІС (корпусів) буде потрібна для побу-

дови того або іншого логічного пристрою. Виходячи з цього, логічні схе-

ми на ІС можуть бути малого ступеня інтеграції (в одному корпусі кілька

інверторів), середнього, великого й надвеликого.

Надійність ІС малого ступеня інтеграції визначається значною мірою

відмовами з'єднань між контактними площадками на кристалі й вивода-

ми корпуса. Для схем великого ступеня інтеграції визначальними мо-

жуть виявитися відмови елементів і з'єднань усередині самого кри-

стала.

Page 50: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

50

Розділ 2. ТРИГЕР

2.1. Поняття тригера та його застосування

Тригером називають логічний елемент (елементарний автомат), що

може перебувати в одному з двох стійких станів і переходити з одного

стану в інший під впливом зовнішніх сигналів. В обчислювальній техніці

тригери широко застосовуються як елементи пам'яті, а також для побу-

дови різних вузлів: регістрів, лічильників і т. д.

Перехід тригера в новий стан залежить не тільки від поточних зна-

чень вхідних сигналів, але й від попереднього його стану. Інформація про

попередній стан, що надходить із виходів тригера, разом із зовнішніми

сигналами керує його роботою. Тому тригери є пристроями зі зворотни-

ми логічними зв'язками.

У тригера може бути два виходи, що містять протилежні значення:

прямий Q та інверсний Q . Одному з цих виходів приписується значення

"1", а іншому – "0". Прийнято вважати, що тригер перебуває в одинично-

му стані, якщо на його виході Q з'явився потенційний сигнал високого

рівня. Відповідно за перехід у нульовий стан тригера прийнята поява на

цьому виході сигналу низького рівня.

Вхід, з якого тригер установлюється в одиничний стан, одержав на-

зву одиничного входу й позначається буквою S. Установка тригера

в нульовий стан відбувається сигналом через вхід R.

Тригери можна класифікувати за наступними параметрами:

за способом записування інформації: несинхронізовані (асинхронні)

та синхронізовані (синхронні). В несинхронізованих тригерах перемикан-

ня відбувається в момент появи сигналів на інформаційних входах. Син-

хронізовані тригери мають чітко виділені моменти часу здійснення їхнього

перемикання синхронізуючими (тактовими) імпульсами;

за способом синхронізації тригери бувають синхронні зі статич-

ним керуванням записуванням, синхронні двоступінчасті та синхронні

тригери з динамічним керуванням записуванням;

за способом організації логічних зв'язків: RS-тригери з розділь-

ною установкою станів "0" і "1" (Set – установка, Reset – скидання); T-

тригери з лічильним входом (Toggle – релаксатор); JK – універсальні

тригери з роздільною установкою станів "0" і "1" (Jerk – різко увімкнути,

Kill – різко вимкнути); D-тригери з прийманням інформації з одного вхо-

ду та затримкою появи сигналу на виході (Delau – затримка).

Page 51: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

51

Крім того, залежно від способу керування інформацією тригери мо-

жуть бути поділені на статичні, динамічні, однотактні (одноступінчасті),

двотактні (ведучий ведений – master-slave).

Статичні тригери перемикаються рівнями сигналів, що надходять

на інформаційні входи; динамічні – зміною рівнів сигналів на керуючих

входах (фронтом керуючого сигналу); однотактні (одноступінчасті) – це

тригери, у яких приймання інформації та передача її на виходи відбувається

одночасно (за один такт); двотактні (двоступінчасті) – це тригери, у які

інформація заноситься у два етапи: спочатку до вхідної схеми, а потім

передається до вихідної.

Умовні позначення тригерів показано на рис. 1.18.

Q

Q

R

S

C

TT

x1

x2

x1

R

S

C

T

Q

Qx2

Рис. 1.18. Умовні позначення тригерів

В основному полі ставиться символ "Т" або "ТТ" для позначення

однотактного або двотактного тригерів відповідно. Додаткове поле може

бути розділене на дві частини: асинхронну та синхронну. В асинхронній

частині проставляються символи R і S входів несинхронізованої уста-

новки тригера в стан "0" або "1". У синхронній частині на місцях х1 і х

2

проставляються символи відповідно до типу тригера. При цьому викори-

стовуються наступні позначення входів: S – вхід роздільної установки

тригера в "1"; R – вхід роздільної установки тригера в "0"; T – лічильний

вхід тригера; D – вхід D-тригера; K – вхід для синхронізованої установ-

ки стану "0" в універсальному JK-тригері; J – вхід для синхронізованої

установки стану "1" в універсальному JK-тригері; C – вхід синхронізації.

Динамічні входи, тобто такі входи, які впливають на тригер тільки

в момент перепаду на них потенціалу, позначаються додатковою косою

рискою в місці з'єднання лінії входу з позначенням тригера. При цьо-

му риска йде знизу вгору, якщо останній спрацьовує від перепаду 0/1,

і зверху вниз, якщо робочим є перепад 1/0. Статичні входи можуть

Page 52: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

52

вплинути на стан тригера тоді, коли на цих входах присутній потенціал

"одиниця". Якщо для установки по якомусь вході використовується

сигнал "нуль", то цей вхід додатково позначається кружечком.

Виходи тригера показуються з правої сторони, причому інверсний

вихід також позначається кружечком. Звичайно вгорі показаний прямий

вихід тригера Q, а внизу – інверсний вихід Q .

2.2. RS-тригер

RS-тригер являє собою логічний елемент, що має окремі входи R і S

для встановки його в "0" або"1". Тригер може бути побудований на еле-

ментах "АБО-НІ" чи "І-НІ" із застосуванням зворотних зв'язків. При-

клад реалізації однотактного асинхронного RS-тригера за допомогою

двох логічних елементів "АБО-НІ" і його умовне позначення подані

на рис. 1.19. Стійкий стан тригера, коли вихід одного елементу одинич-

ний, а іншого – нульовий, досягається наявністю позитивних зворотних

зв'язків із виходів одних елементів на один із входів іншого елемента.

в

S

R

Q

0 2 864t

Q

a

R

S

Q1

1 Q

б

R

S T Q

Q

Рис. 1.19. Асинхронний RS-тригер:

а – структура на елементах "АБО-НІ"; б – умовне позначення;

в – часова діаграма

а

в

б

Page 53: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

53

Для установки RS-тригера в один зі стійких станів на його RS-входи

одночасно повинні бути подані протилежні сигнали. При подачі на S = 0

та R = 1 тригер установлюється в нульовий стан, що відповідає значен-

ням виходів Q = 0 та 1=Q . При зміні сигналів на RS-входах (S = 1 та

R = 0), значення сигналів на виходах Q і Q зміняться на протилежні.

Для розуміння роботи схеми тригера, побудованого на логічних еле-

ментах "АБО-НІ", необхідно згадати правило: якщо на одному зі входів

логічного елемента "АБО-НІ", присутня логічна одиниця, то незалежно

від сигналу на іншому вході на виході буде сформовано логічний нуль.

Попередньо невідомо, у якому стані перебуває наш тригер. Подамо

на верхній вхід тригера логічну одиницю, а на нижній – логічний нуль.

Дану схему почнемо розглядати з того елемента, на вхід якого подано

логічну одиницю. У такий спосіб на виході Q буде сформовано сигнал

нульового рівня внаслідок розглянутої вище властивості елемента "АБО-

НІ". На входи нижнього елемента "АБО-НІ" надійдуть два сигнали

з рівнями логічного нуля та сформують на виході Q рівень логічної оди-

ниці (один нуль надійде як вхідний сигнал, інший сформується завдяки

зворотному зв'язку з виходом Q). Тригер буде встановлено в нульовий

стан. Унаслідок того, що керуючий сигнал на верхньому вході не вста-

новив тригер в одиничний стан, він визначається як R-вхід, а нижній,

отже, буде S-входом.

При R = S = 0 тригер зберігає свій стан, у якому перебував до над-

ходження на його входи нульових сигналів, тому що надходження нуля на

один зі входів елемента "АБО-НІ" не зможе змінити його вихідний сиг-

нал.

За умови R = S = 1 на обох виходах тригера встановлюється нульо-

вий сигнал, тригер розпадається на два незалежних інвертори й при пе-

реході до режиму зберігання (R = 0, S = 0) тригер може встановлювати-

ся в будь-який стан. Це пов'язане з тим, що на входах логічних еле-

ментів установляться нульові сигнали, а на виходах почнуть формувати-

ся одиничні стани. Але виходячи з того, що час спрацьовування логічних

елементів не однаковий і може залежати від різних факторів, які зміню-

ються з часом (температура, старіння елементів та інше), один з них

буде перемикатися швидше й заблокує перемикання іншого елемента.

Тому така комбінація вхідних сигналів (R = S = 1) є забороненою. Після

її можливої появи тригер потрібно перевести в один зі стабільних станів.

Таким чином, стан тригера залежить від сигналу, що прийшов на

Page 54: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

54

S-вхід, або від попереднього стану тригера й сигналу на R-вході. Функ-

цію переходів тригера можна описати наступним виразом:

).()()()1( tttt RQSQ +=+

Стани переходів тригера подано у табл. 1.9.

R(t) S(t) Q(t+1) Примітка

0 0 Q(t) Зберігання

0 1 1 Установка в "1"

1 0 0 Установка в "0"

1 1 ? Заборонено

Таблиця 1.9. Стани переходів

RS-тригера на елементах "АБО-НІ"

Реалізація однотакт-

ного асинхронного RS-

тригера за допомогою ло-

гічних елементів "І-НІ",

його умовне позначення

й часова діаграма пред-

ставлені на рис. 1.20.

в

S

R

Q

t

0 2 864

Q

a

S

R

Q&

& Q

б

R

S T Q

Q

Рис. 1.20. RS-тригер:

а – структура на елементах "І-НІ"; б – умовне позначення; в – часова діаграма

а

в

б

Характерною рисою даного тригера є те, що перемикаючим сигна-

лом служить логічний "0". Ця властивість на схемі відображається

у вигляді інверсних вхідних сигналів. Заборонним для RS-тригера на еле-

ментах "І-НІ" буде стан входів R = S = 0, а режим зберігання встанов-

Page 55: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

55

люється при R = S = 1.

Стани переходів RS-три-

гера на елементах "І-НІ"

представлено в табл.

1.10.

S R Q(t+1) Примітка

0 0 ? Заборонено

0 1 1 Установка в "1"

1 0 0 Установка в "0"

1 1 Q(t) Зберігання

Таблиця 1.10. Стани переходів RS-три-

гера на елементах "І-НІ"

2.3. Статичний синхронний RS-тригер

Розглядуваний RS-тригер буде перемикатися щоразу при зміні сиг-

налів на входах. Дуже часто необхідно, щоб тригер працював тільки

в певні моменти часу. Ці моменти часу задаються за допомогою додат-

кового вхідного сигналу синхронізації С. Синхронний статичний RS-три-

гер представлено на рис. 1.21.

S

C

Q

в

t0 2 864

Q

а

Q

R

S

C

& &

&&

б

R

S T Q

Q

C

S

R

.

а

в

б

Рис. 1.21. Статичний синхронний RS-тригер:

а – структура на елементах "І-НІ"; б – умовне позначення; в – часова діаграма

Він складається з RS-тригера та схеми синхронізації. При С = 0 вхо-

ди RS блоковані, а безпосередньо RS-тригер перебуває в режимі збері-

гання попередньої інформації, тому що 1== SR . При С = 1 схема пра-

Page 56: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

56

цює як звичайний RS-тригер. При цьому керуючі сигнали, які надходять

на R- та S-входи, представлені логічною "1". На часовій діаграмі не по-

C(t) S(t) R(t) Q(t+1)

1 0 0 Q(t)

1 0 1 0

1 1 0 1

1 1 1 ?

0 х х Q(t)

казано R-вхід, тому що роз-

глядаються режими роботи,

коли сигнал на вході R інвер-

тований стосовно сигналу S.

Стани переходів роботи ста-

тичного RS-тригера представ-

лено в табл. 1.11.

Таблиця 1.11. Стани переходів

статичного синхронного RS-тригера

2.4. Статичний синхронний D-тригер

Працюючи з RS-тригером, необхідно формувати два інверсних сиг-

нали для його перемикання. Враховуючи, що кількість виводів в ІС об-

межена, й відмовившись від дублюючих входів, можна збільшити

кількість елементів логіки в корпусі мікросхеми. З цією ж метою дуже

часто відмовляються від дублюючого виходу Q . При необхідності цьо-

го сигналу він формується шляхом інвертування сигналу Q за допомо-

гою додаткової мікросхеми.

Статичний синхронний D-тригер (рис. 1.22) можна отримати зі ста-

тичного синхронного RS-тригера, якщо R-вхід підключити до S-входу

через інвертор. У такий спосіб одержано тригер з одним інформаційним

входом.

a

1DR

S T Q

Q

C

б

C

D T Q

Q

б

Рис. 1.22. Статичний синхронний D-тригер:

а – схема; б – умовне позначення

а

На відміну від RS-тригера, що має режими установки "1", "0"

і зберігання попереднього стану, D-тригер має тільки режими установки

в "1" і "0".

Page 57: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

57

2.5. Двотактний RS-тригер

Розглянуті RS-тригери реагують на вхідний сигнал протягом всього

часу й будь-які зміни цього сигналу призводять до зміни стану тригера.

Дуже часто виникає ситуація, коли необхідно зафіксувати стани вхідних

сигналів у дуже короткий відрізок часу, а подальша зміна вхідної інфор-

мації не повинна впливати на тригер. При цьому зміна стану тригера

повинна відбуватися після закриття на запис входів тригера.

Подібне завдання можуть вирішити пристрої, що містять незалежні

схеми прийому вхідної інформації та формування вихідних сигналів. Та-

кий тригер працює у два етапи (за два такти): на першому етапі відбу-

вається запис інформації зі входів; на другому – запирання входів на за-

пис і виконується передача записаної інформації зі вхідного вузла на вихід

тригера. Такі схеми працюють за принципом "ведучий-ведений" і нази-

ваються двотактними тригерами або тригерами типу MS (master-slave).

Двотактний MS-тригер. Найпростіша схема такого MS-тригера

складається з двох статичних синхронних тригерів, включених послідов-

но. Обидва тригери синхронізуються одним сигналом С, але подаються

в протифазі через інвертор (рис. 1.23).

Тому в кожен даний момент часу тільки один тригер може прийма-

ти інформацію зі входів, а інший буде перебувати в режимі зберігання

інформації. Робота тригера відбувається у два етапи. На першому етапі

роботи MS-тригера інформація з RS-входів записується в перший три-

гер. Потім він відключається від входів і переходить у режим зберігання

інформації. На наступному етапі відбувається перезапис інформації з пер-

шого тригера в другий.

Для розуміння роботи даної схеми розглянемо вплив окремих діля-

нок тактового імпульсу на роботу схеми (рис. 1.24). На тактовому імпульсі

виділимо чотири точки, що визначають основні області роботи MS-три-

гера: a, b, c, d. Більш зручно почати розгляд роботи схеми з точки b,

у якій починається записування інформації з RS-входів у перший тригер,

а другий тригер переходить у режим зберігання інформації. На відрізку

часу b–c інформація записується в перший тригер і його стан може зміню-

ватися. У точці с в першому тригері відбувається фіксація інформації,

що перебувала на RS-входах у цей момент часу. Для другого тригера

в даній точці завершується режим зберігання.

Відрізок часу c–d є перемиканням роботи тригерів: перший тригер

перемикає свої входи із режиму записування в режим зберігання інфор-

мації, а другий – з режиму зберігання переходить у режим прийому інфор-

Page 58: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

58

б

R

S TT Q

Q

C

в

S

C

Q

t

0 2 864 141210

Q

S '

R'

Q& &

&&

a

S

R

C

Q'

Q'& &

&&

1

б

Рис. 1.23. Двотактний RS-тригер:

а – структурна схема; б – умовне позначення; в – часова діаграма

а

в

1

d

cb

a0

U

t

Рис. 1.24. Області управління

MS-тригером

Q

. .

Page 59: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

59

мації з першого тригера. Точка d визначає момент появи записаної

інформації на виході нашого MS-тригера, що залишиться незмінною до

даної точки на наступному імпульсі. У точці a завершується режим

зберігання для першого тригера й на відрізку a–b він переходить в ак-

тивний режим роботи. У такий спосіб на MS-тригері фіксується тільки

та інформація, що була в момент часу відповідно до точки c. Вважаєть-

ся, що такі системи записують вхідні дані за негативним фронтом син-

хроімпульсу, фіксуючи при цьому значення інформації, що передує цьому

фронту. Для надійної роботи схем з MS-тригерами необхідно будувати

часову діаграму роботи таким чином, щоб у момент негативного фрон-

ту не було змін інформації на RS-входах.

Розглянуті RS-тригери становлять основу для побудови інших типів

тригерів.

T-тригер. У розглянутому MS-тригері необхідність дублювання

вхідних сигналів та наявність синхронізуючого сигналу ускладнює за-

стосування даної схеми, що не завжди виправдано. Запропонована схе-

ма лічильного T-тригера має всього один вхід, і тригер змінює свій стан

щоразу при надходженні сигналу на вхід.

T-тригер з об'єднаним (рахунковим) входом можна одержати з MS-

тригера, якщо на RS-входи завести зворотні зв'язки з виходів таким чи-

ном, щоб інверсний сигнал з виходу Q надходив на вхід S, а прямий

сигнал з виходу Q – на R (рис 1.25). Такі зворотні зв'язки дозволяють

формувати на входах сигнали, протилежні поточному стану тригера.

Щоразу з приходом негативного фронту сигналу на вхід тригера він буде

переходити в протилежний стан завдяки наявності зворотніх зв'язків (див.

рис. 1.25,а), тобто буде організований підрахунок імпульсів, що надхо-

дять на його T-вхід.

б

T

&

&

R

S TT Q

Q

C

a

T

R

S TT Q

Q

C

Рис. 1.25. Схеми Т-тригера:

а – несинхронізованого; б – синхронізованого

а б

.

Page 60: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

60

Задачею T-тригера є реалізація функції переходу виду

)()()1( ttt TQQ =+ або ).()()1( ttt TQQ =+

Стани Т-тригера представлено в табл. 1.12.

Таблиця 1.12. Стани переходів

Т-тригера

T(t) Q(t+1) Примітка

0 Q(t) Зберігання

1 Q(t) Зберігання

1/0 )(tQ Зміна стану

Часова діаграма роботи

несинхронізованого Т-тригера

подана на рис. 1.26.

Частота зміни сигналу на

виході Т-тригера в два рази

менша, ніж частота надход-

ження сигналів на Т-вхід.

T

Q

0 2 864 141210 1816 t

Рис. 1.26. Часова діаграма несинхронізованого Т-тригера

2.6. JK-тригер

Для побудови цифрових схем часто застосовується універсальний

JK-тригер. Універсальність JK-тригера зумовлюється тим, що при різних

варіантах підключення його входів можна одержати схеми, що функціо-

нують як RS-, D- і T-тригери.

JK-тригер можна одержати з Т-тригера, якщо додамо ще два входи

(рис. 1.27), які одержали назви JK-входи. Якщо на ці входи подавати

інверсні сигнали відносно один одного, то схема буде працювати як дво-

тактний RS-тригер. Вхід J відповідає входу установки тригера в одини-

цю, а K-вхід – скиданню.

Якщо на входи J й K одночасно подати логічну одиницю, то вони не

змінять режим роботи вхідних елементів "І-НЕ" і стан тригера зміниться

на протилежний при кожному негативному фронті синхроімпульсу. Тобто

при J = K = 1 він працює як Т-тригер. Стани JK-тригера представлені

в табл. 1.13.

Page 61: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

61

Таблиця 1.13. Стани переходів JK-тригера

J(t) K(t) Q(t+1) Примітка

0 0 Q(t) Вихідний сигнал не змінюється

0 1 0

1 0 1 Вихідний сигнал стає рівним J

1 1 )(tQ Зміна вихідного сигналу при кожному

такті

J

C

Q '

Q

K

t0 2 864 141210 1816

б

J TT Q

Q

C

K

a

C

Q'

Q'

K

J

Q

S'

R '

Q&

&

&

&

S

R

& &

&&

1

Рис. 1.27. JK-тригер:

а – структурна схема; б – умовне позначення; в – часова діаграма

S

J

C

K

R

&

&

& & &

& & &

1

S'Q'

R'

Q

Q

Q'

J

C

K

Q

Q

C

J

K

Q'

Q

0 2 4 6 8 10 12 14 16 18t

б

a

в

Page 62: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

62

Однак необхідно враховувати дії зворотного зв'язку: JK-тригер пра-

цює правильно, якщо стани JK-входів не змінюються при одиничному

стані тактового імпульсу. Існують схеми, які записують інформацію тільки

з появою позитивного фронту синхроімпульсу з подальшим блокуванням

входів на записування.

Крім стандартного JK-тригера широко застосовуються тригери

з багатьма JK-входами, які об'єднанні у схеми логічного множення:

J = J1 ⋅ J2 … і K = K1 ⋅ K2 … .

Розглянутий ефект відсутності наскрізної передачі сигналу із входу

на вихід можна одержати за допомогою динамічних тригерів, у яких бло-

куються входи в момент зчитування інформації на вихід. Динамічні три-

гери розрізняються фронтами, при яких відбувається передача інфор-

мації на вихід: по позитивному й негативному фронтах.

Розділ 3. ЦИФРОВІ АВТОМАТИ

Існує велика кількість схем, що мають здатність запам'ятовувати

окремі стани вхідних змінних, які одержали назву цифрових автоматів.

Вихідні значення змінних залежать як від вхідних змінних, так і від

поточного стану пристрою й можуть бути описані за допомогою функції

Y = f (X, Z), де X – вхідний вектор змінних, Z – вектор стану, а Y – вихід-

ний вектор. Значення вектора стану запам'ятовуються за допомогою

тригерів на тривалість такту роботи схеми. До цих схем відносяться

регістри, дешифратори, лічильники, суматори.

3.1. Лічильники

Багато складних цифрових схем містять лічильники. Лічильником

називається типовий цифровий вузол, призначений для підрахунку кількості

деяких подій (кількості імпульсів або часових інтервалів). Крім того,

лічильники можна використовувати як дільники частоти.

Лічильники класифікуються:

за типом використовуваних тригерів: синхронні, асинхронні;

за призначенням: підсумовувальні, у яких із надходженням чергово-

го лічильного імпульсу значення коду збільшується на одиницю;

віднімальні, у яких кожен вхідний імпульс зменшує вміст лічильника на

одиницю; реверсивні – лічильники, які за рахунок впливу керуючих сиг-

налів можуть працювати як підсумовувальні або як віднімальні;

за способом зберігання коду: статичні; динамічні.

Page 63: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

63

Одним із найпростіших лічильників є двійковий асинхронний,

реалізований декількома тригерами з послідовним підключенням входів

і виходів.

Асинхронний двійковий лічильник побудований на універсальних JK-

тригерах. JK-входи тригерів підключені до "логічної одиниці", що забез-

печує їхню роботу в лічильному режимі. Зміна стану тригерів на проти-

лежний відбувається по синхроімпульсах у момент їхнього негативного

фронту, тобто під час переходу зі стану логічної "1" в "0". Кожен тригер

ділить частоту вхідного сигналу на 2.

Асинхронний двійковий лічильник, поданий на рис. 1.28, складається

з чотирьох тригерів і може рахувати від стану 00002 до 1111

2. Результати

лічильника надходять на виходи Q1–Q

4. Такий лічильник називається

лічильником по модулю 16. Модуль лічильника – це кількість різних станів,

через які проходить лічильник у процесі одного повного циклу рахунку.

Часова діаграма роботи асинхронного двійкового лічильника представ-

лена на рис. 1.29.

J

C

K

Q

Q

TT

"1" Q 4

J

C

K

Q

Q

TT

"1" Q 3

J

C

K

Q

Q

TT

"1" Q2

J

C

K

Q

Q

TT

"1" Q1

C

T1 T3 T4T2

Q1

Q2

Q3

Q4

C

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Рис. 1.28. Функціональна схема двійкового асинхронного лічильника

Рис. 1.29. Часова діаграма роботи асинхронного двійкового лічильника

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

С

Q1

Q2

Q3

Q4

Page 64: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

64

Нехай у початковий момент часу стан виходів лічильника відпові-

дає двійковому числу 0000 (лічильник скинутий у нульовий стан). При

надходженні першого тактового імпульсу на синхронізуючий вхід С три-

гера Т1 він перемикається (при проходженні спаду імпульсу) і на лічиль-

нику буде встановлений код 0001. Синхроімпульс 2 повертає тригер Т1

у вихідний стан "0" (Q1 = 0), що, у свою чергу, призводить до переми-

кання тригера Т2 в стан "1" (Q

2 = 1). На лічильнику буде встановлено код

0010. При надходженні синхроімпульсів спад сигналу на виході кожного

тригера запускає наступний тригер. Молодший розряд лічильника

змінюється на кожному етапі рахунку з надходженням кожного нового

синхроімпульсу. При цьому наступні розряди перемикаються в 2 рази

рідше від попередніх.

Характерною рисою асинхронного лічильника є те, що тактові імпуль-

си надходять тільки на перший тригер Q1, а кожен наступний тригер

управляється вихідними сигналами попереднього тригера. Тому останній

тригер зможе перемкнутися лише тоді, коли всі попередні тригери пе-

ремкнулися. Зміна стану кожного розряду відбувається з затримкою.

Величина затримки накопичується в міру збільшення порядкового номе-

ра тригера в ланцюжку. У багаторозрядних послідовних лічильниках ос-

танній тригер спрацює з затримкою, рівній сумі затримок попередніх роз-

рядів, і при високих частотах проходження синхроімпульсів останні три-

гери можуть не встигнути перемкнутися до приходу наступного імпуль-

су. Тому період проходження синхроімпульсів для асинхронних лічиль-

ників повинен бути більшим від часу поширення сигналу в такому лічиль-

нику.

Для багатьох пристроїв дуже важливо, щоб всі ступені лічильника

спрацьовували одночасно. Така можливість реалізується в синхронно-

му лічильнику. На відміну від асинхронного лічильника, тактові синхро-

імпульси подаються паралельно на входи всіх розрядів синхронного лічиль-

ника. Для керування вибором перемикаючого розряду використовують-

ся виходи попередніх розрядів, підключені на JK-входи, дозволяючи або

забороняючи спрацьовування даного розряду. Для побудови багатороз-

рядних паралельних лічильників застосовуються тригер з багатьма JK-

входами відповідно до кількості керуючих сигналів. Тригер зможе пе-

ремкнутися під керуванням синхроімпульсів тільки в тому випадку, коли

в нього на всіх керуючих JK-входах будуть присутні сигнали логічної

одиниці.

На рис. 1.30 представлено схему чотирирозрядного двійкового

синхронного лічильника. У синхронному лічильнику всі синхронізуючі

Page 65: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

65

входи С-тригерів з'єднані паралельно й тактові імпульси надходять пара-

лельно на всі тригери.

Q 1 Q 2Q3

J1

C

K1

Q

Q

TT

Q4

J2

J3

K2

K3T4

J1

C

K 2

Q

Q

TTJ2

K 1

T3

J

C

K

Q

Q

TT

T2

J

C

K

Q

Q

TT

"1"

C

T1

Рис. 1.30. Функціональна схема двійкового синхронного лічильника

При надходженні першого синхроімпульсу перемикається тільки три-

гер Т1, у якого на входах J і K постійно діє рівень логічної одиниці, тобто

тригер Т1 буде перемикатися при надходженні кожного синхроімпульсу.

Тригер Т2 буде перемикатися під керуванням синхроімпульсів тільки

тоді, коли до надходження синхроімпульсу попередній тригер Т1 буде

перебувати в одиничному стані, тобто з надходженням кожного другого

синхроімпульсу.

Роботою третього тригера Т3 управляють одночасно два попередні

тригери – Т1 і Т

2. Тригер Т

3 буде перемикатися тільки в тому випадку,

коли до надходження синхроімпульсу будуть установлені в одиничні ста-

ни одночасно два попередні тригери – Т1 й Т

2. Тригер Т

3 буде перемика-

тися з надходженням кожного четвертого синхроімпульсу.

Тригер Т4 буде перемикатися тільки при одиничному стані попередніх

тригерів Т1–Т

3, що відповідає надходженню восьмого синхроімпульсу.

Час перемикання синхронного лічильника визначається часом спра-

цьовування одного тригера, тому що на них паралельно надходить син-

хроімпульс і вони спрацьовують паралельно.

Для обмеження кількості JK-входів і спрощення схеми керування

використовуються тригери з трьома парами JK-входів, що дозволяє по-

будувати чотирирозрядний синхронний лічильник. Для одержання лічиль-

ників з більшою розрядністю можна з'єднати послідовно стандартні гру-

пи з чотирьох тригерів, використовуючи спеціальну схему формування

переносів.

Розглянуті лічильники виконують рахунок у прямому напрямку й є

лічильниками прямої дії, які називаються додавальними або нако-

пичувальними.

Однак часто виникає необхідність рахунку в зворотному напрямку,

які реалізуються лічильниками з дією віднімання або лічильниками

Page 66: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

66

зворотної дії. Для побудови лічильника зворотної дії, керування триге-

рами замість Q-виходів застосовуються їхні інверсні виходи. Схема асин-

хронного віднімального лічильника представлена на рис. 1.31.

J

C

K

Q

Q

TT

"1" Q4

Т4

J

C

K

Q

Q

TT

"1" Q 3

Т3

J

C

K

Q

Q

TT

"1" Q 2

Т2

J

C

K

Q

Q

TT

"1" Q1

C

Т1

Рис. 1.31. Функціональна схема двійкового асинхронного

лічильника зворотної дії

Q1

Q2

Q3

Q4

C

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Рис. 1.32. Часова діаграма роботи двійкового асинхронного

лічильника зворотної дії

Часова діаграма роботи двійкового асинхронного піднімального

лічильника представлена на рис. 1.32.

Використання інверсних виходів тригерів для організації передачі

сигналу призвело до перемикання їх при позитивному фронті на виходах

Q попередніх тригерів. Для правильної роботи віднімального лічильника

його тригери потрібно попередньо встановити в одиничний стан.

Широке застосування знаходять реверсивні лічильники, які можуть

міняти напрямок лічби. Такі лічильники можна одержати із синхронних

або асинхронних лічильників за допомогою додаткових ключів, які до-

зволяють підключити до керуючих входів прямі або інверсні виходи

тригерів.

Page 67: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

67

Двійково-десяткові лічильники в коді 8-4-2-1. Досить часто не-

обхідно результат рахунку представляти не у двійковій, а в десятковій

формі. Десяткове число може бути представлено чотирирозрядним

двійковим числом з кодами 23, 22, 21, 20, що дозволяє одержати значення

від 0 до 9. Таке двійково-десяткове подання позначається як код 8-4-2-1

і може бути реалізоване на чотирирозрядному лічильнику з обмеженням

лічби від 00002 до 1001

2 (від 0 до 9 у десятковій системі). При надход-

женні десятого імпульсу лічильник повинен обнулитися й подальша лічба

починається з нуля. Схема обмеження лічби може бути побудована на

логічному елементі "І–НІ", що формує обнуляючий імпульс лічильника

з надходженням десятого імпульсу (при стані лічильника 1010). Двійко-

во-десяткові лічильники можуть бути побудовані як на синхронній, так

і на асинхронній схемах. Функціональна схема дійково-десяткового лі-

чильника та його часова діаграма роботи подані на рис. 1.33 і 1.34.

&Q2

J

C

K

Q

Q

TT

"1" Q 1

C

R

J

C

K

Q

Q

TT

"1" Q4

R

J

C

K

Q

Q

TT

"1" Q3

R

J

C

K

Q

Q

TT

"1"

RT1T2 T3 T4

Рис. 1.33. Функціональна схема двійково-десяткового асинхронного лічильника

1 2 3 4 5 6 7 8 9 10

Q 1

Q 2

Q 3

Q4

C

Рис. 1.34. Часова діаграма роботи двійково-десяткового

асинхронного лічильника

Page 68: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

68

Використовуючи запропонований метод формування обнуляючого

імпульсу можна забезпечити скидання лічильника в стан 0000 при інших

значеннях стану лічильника, тобто побудувати лічильник з довільним

коефіцієнтом відліку.

Лічильники з попередньою установкою дозволяють задати по-

чатковий його стан, з якого починається відлік. У такий спосіб також

можна попередньо задати необхідну кількість імпульсів для контролю.

На рис. 1.35 подано умовне позначення двійкового й двійково-десятково-

го реверсивних лічильників з попередньою установкою їх станів.

?

Q0

Q1

Q2

Q3

15

? 0

CT2D0

D 1

D 2

D 3

PE

R

+1

–1

?

Q0

Q1

Q2

Q3

9

? 0

CT10D 0

D1

D2

D3

PE

R

+1

–1

а б

Рис. 1.35. Реверсивні лічильники з попередньою установкою:

а – двійково-десятковий лічильник 133ИЕ6; б – двійковий лічильник 133ИЕ7

≥ ≥

≤ ≤

Лічильники мають по два входи для тактових синхроімпульсів, що

дозволяє організовувати лічбу на збільшення або зменшення вмісту

лічильників на позитивному перепаді цих імпульсів. Якщо вміст лічиль-

ників досягне дев'яти для мікросхеми 133ИЕ6 (15 для мікросхеми

133ИЕ7) або 0, то на відповідних виходах закінчення лічби на збільшення

або зменшення з приходом наступного імпульсу сформуються сигнали

логічного нуля. Імпульсні перепади на цих виходах можуть служити так-

товими синхроімпульсами при підключенні таких схем послідовно для

нарощування розрядності лічильника. При нульовому значенні сигналу

на вході паралельного завантження РЕ у лічильник записується інформа-

ція зі входів D0–D

3 і передається на виходи Q

0–Q

3. Надходження сигна-

лу високого рівня на вхід R скидає в нуль вміст лічильника.

Page 69: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

69

3.2. Регістри

Регістри – це цифрові пристрої, що складаються із запам'ятовуваль-

них елементів із системою керування. Вони призначені для зберігання

інформації та виконання логічних перетворень. У регістрі можуть вико-

нуватися наступні основні операції над двійковими кодами (числами):

скидання регістру (установка всіх розрядів регістру в нульовий стан);

прийом (запис) інформації в паралельному або в послідовному коді;

зберігання інформації;

зсув збереженої в регістрі інформації на задану кількість розрядів

уліво або вправо;

перетворення паралельно поданої інформації в послідовний код і на-

впаки;

видача інформації в паралельному або в послідовному коді.

Частину регістру, призначену для обробки або зберігання одного

розряду інформації, називають розрядом регістру. За способом запису-

вання та видачі інформації регістри розділяють на паралельні та послідовні.

У паралельних регістрах введення та вивід інформації виконується

в паралельному коді. У послідовних регістрах, які називаються також

регістрами зсуву, числа вводяться та виводяться в послідовному коді

розряд за розрядом, шляхом послідовного зсуву коду числа тактовими

імпульсами.

Поряд із послідовними та паралельними регістрами широко викори-

стовуються послідовно-паралельні, що дозволяють здійснювати послідов-

не записування та паралельне зчитування або паралельне записування

та послідовне зчитування числа.

Для побудови регістрів застосовують двоступінчасті тригери, з'єднані

послідовно з одночасною подачею синхроімпульсів на синхронізуючі входи

всіх розрядів. На рис. 1.36 подано функціональну схему регістру зсуву.

J

C

K

Q

Q

Q3

TT

T 3

J

C

K

Q

Q

Q 2

TT

T 2

J

C

K

Q

Q

Q 1

TT

T1

1

D

C

J

C

K

Q

Q

Q4

TT

T 4

Рис. 1.36. Функціональна схема чотирирозрядного регістра зсуву

Page 70: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

70

Якщо на вхід D подавати послідовність інформації D1, D

2, D

3, D

4, то

з першим синхроімпульсом на виході Q1 з'явиться значення D

1. З другим

синхроімпульсом D1 перепишеться в другий розряд і з'явиться на Q

2,

а на виході Q1 з'явиться значення D

2 і т. д. Зі схеми видно, що вхідна

інформація під дією синхроімпульсів зсувається праворуч. Тому такий

регістр називається зсувним. Принцип побудови регістрів не залежить

від їхньої розрядності.

Після записування послідовного коду в регістр його можна буде про-

читати в паралельному коді з виходів Q1, Q

2, Q

3, Q

4, тобто послідовний

код буде перетворений у паралельний.

Послідовно-паралельний регістр – це регістр, що дозволяє здійсню-

вати записування та зчитування числа як послідовно, так і паралельно.

Крім того, він може зберігати інформацію, зсувати її вліво або вправо.

Різні режими роботи регістрів установлюються за допомогою схе-

ми керування.

Прикладом багатоцільового регістру зсуву може бути мікросхема

133ІР1, що має здатність зсувати інформацію вправо й уліво, допускає як

послідовне, так і паралельне завантаження даних. Шляхом каскадного

з'єднання декількох мікросхем 133ІР1 можна одержувати регістри зсуву

восьмирозрядні і більше, які здійснюють переміщення інформації по колу.

Регістри часто застосовуються як буферні запам'ятовувальні при-

строї для тимчасового зберігання даних, для перетворення даних з пара-

лельної форми в послідовну й навпаки, а також для затримки інформацій-

них сигналів (як лінії затримки). Розглянуті регістри входять до складу

RG Q0

Q1

Q2

Q3

D 0

D1

D2

D3

PE

S 1

C1

C2

Рис. 1.37. Функціональна схема

чотирирозрядного універсально-

го регістра зсуву 133ІР1

схем, що реалізують деякі ариф-

метичні операції, і дуже широко

використовуються в мікропроцесо-

рах і мікропроцесорних системах.

На рис. 1.37 представлено

схему чотирирозрядного універ-

сального регістра 133ІР1. Регістр

містить вхід послідовних даних S1,

чотири паралельних входи даних

(D0...D

3), чотири виходи (Q

0…Q

3)

й два синхровходи (С1, С

2). При

подачі на вхід PE напруги низько-

го рівня дозволяється робота зі

входу С1 й вмикається режим зсу-

ву від послідовного входу S1 на

вихід Q0, потім на Q

1, Q

2, Q

3. Зсув

Page 71: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

71

відбувається вправо за надходженням негативного фронту на вхід С1.

При подачі на вхід PE напруги високого рівня дозволяється робота так-

товому вході С2 й регістр переводиться в режим паралельного запису-

вання інформації в Q0…Q

3 із входів D

0...D

3. Якщо з'єднати вихід Q

3 зі

входом D2, Q

2 і D

1, Q

1 і D

0, то організуємо зсув даних уліво.

3.3. Дешифратори

Дешифратором називається комбінаційна логічна схема без еле-

ментів пам'яті, призначена для перетворення комбінації вхідних сигналів

в інший набір вихідних кодів. Широко розповсюджений дешифратор, що

перетворює двійкову комбінацію вхідних сигналів у позиційний код, який

викликає появу сигналу в певний момент часу тільки на одній відповідній

вихідній шині. Повний дешифратор перетворить n-розрядний двійковий

код у позиційний код з 2n виходами. Інформація на виході дешифратора

представлена наступними функціями:

DC 0

1

2

2n

–1

0

1

n–1

DC 0

1

2

2n

–1

0

1

n–1

а б

....

;...

;...

;...

012112

01212

01211

01210

XXXXF

XXXXF

XXXXF

XXXXF

nn

nn

nn

nn

n⋅⋅⋅⋅=

⋅⋅⋅⋅=

⋅⋅⋅⋅=

⋅⋅⋅⋅=

−−−

−−

−−

−−

Умовне позначення дешифраторів на функціональних схемах наве-

дено на рис. 1.38.

Рис. 1.38. Умовне позначення дешифратора з парофазними входами (а)

і з однофазними входами (б)

.......................................

Page 72: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

72

Одноступінчастий n-розрядний дешифратор будується на 2n логіч-

них елементах, кожен з яких реалізує логічну функцію "І" на п входів. На

входи логічних елементів подаються прямі й інверсні значення розрядів

дешифрованого двійкового коду.

На рис. 1.39 представлено функціональну схему повного лінійного

дешифратора на три входи. Коди X0, X

1 та X

2 надходять на інвертори, які

формують прямі та інверсні їх значення. Одержані набори вхідних сиг-

налів надходять на три-входові елементи "І" таким чином, щоб у кожен

момент часу було сформовано одиничний сигнал тільки на одному із

виходів відповідно до табл. 1.14.

x01

2

1 1

x1 3

4

1 1

x25

6

1 1 &Y33

5

2

&Y23

6

2

&Y1

4

5

2

&Y0

2

4

6

&Y73

5

1

&Y6

3

6

1

&Y54

5

1

&Y44

6

1

Рис. 1.39. Лінійний трирозрядний дешифратор

Вхідні сигнали Вихідні сигнали

x0 x1 x2 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7

0 0 0 1 0 0 0 0 0 0 0

0 0 1 0 1 0 0 0 0 0 0

0 1 0 0 0 1 0 0 0 0 0

0 1 1 0 0 0 1 0 0 0 0

1 0 0 0 0 0 0 1 0 0 0

1 0 1 0 0 0 0 0 1 0 0

1 1 0 0 0 0 0 0 0 1 0

1 1 1 0 0 0 0 0 0 0 1

Таблиця 1.14. Логіка роботи дешифратора

Page 73: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

73

3.4. Мультиплексор та демультиплексори

Дуже часто виникає ситуація, коли з набору сигналів, що надійшли

від різних джерел, необхідно вибрати для подальшої обробки тільки один

із них. Розв'язком цього завдання є схема мультиплексора, який дозво-

ляє пропустити на вихід тільки той сигнал, що надійшов на єдиний вибра-

ний вхід.

Вибір потрібного входу здійснюється відповідно до роботи наступ-

ної функції:

.............1201110110011

−−−−

+++=n

DXXXDXXXDXXXYnnn

Схема восьмивходового мультиплексора, яка представлена на

рис. 1.40, містить вісім входів для даних (D0…D

7); трирозрядний де-

A09

10

1 1

A111

12

1 1

A213

14

1 1

1

2

3

4

5

6

D0

D1

D2

D7

D6

D5

D4

D3

7

8

&Y1

1

1012

14

&Y2

2

9

12

14

&Y3

3

10

11

14

&Y4

4

9

11

14

K0

K1

K2

K3

&Y 5

5

10

1213 K4

&Y6

69

12

13 K5

&Y 7

710

13

11K6

&Y 8

8

9

11

13 K7

1

Y

Y 1

Y 2

Y 3

Y 4

Y 5

Y 6

Y 7

Y 8

MX

D 7

D 6

D 5

D 4

A0

A1

A2

D 3

D 2

D 1

D 0

б

Y

Рис. 1.40. Восьмивходовий мультиплексор:

а – схема восьмивходового мультиплексора; б – умовне зображення

а

б

Page 74: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

74

шифратор (входи А0…А

2), який керує роботою восьми ключів (K

0…K

7)

для комутації вхідних сигналів, а також восьмивходового елементу

"АБО" для передачі вибраного вхідного сигналу на вихід Y.

Демультиплексор – це схема з одним вхідним сигналом і безліччю

виходів, яка виконує завдання, протилежне роботі мультиплексора: кому-

тацію вхідного сигналу на один з виходів, обраного за допомогою адрес-

ної шини.

3.5. Суматор

Для виконання арифметичного додавання двох чисел у цифровій

техніці застосовуються суматори. Основу суматора становлять схеми

для додавання двох однорозрядних двійкових чисел, які мають два рішен-

ня: напівсуматори й повні суматори.

Напівсуматор дозволяє скласти два однорозрядних двійкових числа

без урахування переносу з попереднього розряду. Додавання двох одно-

розрядних чисел можна представити системою рівнянь, у якій перше

рівняння описує одержання суми двох чисел S, а друге – формування

переносу C при додаванні:

Входи Виходи

A В S С

0 0 0 0

0 1 1 0

1 0 1 0

1 1 0 1

Результат роботи напівсу-

матора може бути представле-

ний табл. 1.15, яка містить вхідні

значення А та В, а також зна-

ченнями суми S й перенесення

в старший розряд C.

З таблиці та логічних рівнянь

видно, що функція одержання

суми може бути представлена

логічною схемою "виключаю-

чого АБО" (додавання за моду-

лем 2), а перенесення – логічним

"І". Логічна схема напівсума-

тора представлена на рис. 1.41.

На практиці звичайно необ-

хідно складати багаторозрядні

числа. Напівсуматор застосо-

вується для формування молод-

шого розряду двійкових чисел

Таблиця 1.15. Таблиця істинності

напівсуматора

=1A

S

C&

B

Рис. 1.41. Логічна схема

напівсуматора

⋅=

⋅+⋅=

B.AC

B;ABAS

Page 75: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

75

і здійснює додавання двох однорозрядних чисел без урахування перене-

сення з молодших розрядів. Для побудови суматора, що враховує пере-

несення із молодших розрядів, застосовується повний суматор. Пов-

ний суматор містить додатково вхід перенесення й може бути побудова-

ний із двох напівсуматорів.

Результат роботи повного суматора представлений в табл. 1.16, де

Сі – сигнал перенесення від складання попереднього розряду; А

і, В

і –

значення окремих розрядів багаторозрядних чисел; Si та C

i+1 одержані

сума та значення перенесення в наступний розряд.

Наступні рівняння задають ло-

гічне визначення суми для повного су-

матора й формування перенесення:

.

;

iiiiii

iiii

C)B(ABAC

C)B(AS

1⋅⊕+⋅=

⊕⊕=

+

Увівши проміжні позначення сиг-

налів iii

BAP ⊕= та iii

BAQ ⋅= , пе-

ретворимо друге рівняння з (1.2) до

наступного вигляду: ,1 iiii

CPQC ⋅+=+

де Qi – функція перенесення, яка

формується тоді, коли перенесення

(1.2)

1C i+ 1

Pi=1

Ai

Q i&

Bi

C i

=1 Si

R i&

SM S

C i+1

б

Ci

A i

B i

S i

C i+ 1

Входи Виходи

Сі Аi Вi Si Ci+1

0 0 0 0 0

0 0 1 1 0

0 1 0 1 0

0 1 1 0 1

1 0 0 1 0

1 0 1 0 1

1 1 0 0 1

1 1 1 1 1

Таблиця 1.16. Таблиця

істинності роботи повного

суматора

відбувається через комбінацію вхідних сигналів Ai і B

i; Р

i – функція роз-

поділу перенесення, яка показує, чи передається отриманий у молодшо-

му розряді перенесення Сi далі.

Використовуючи логічне визначення формування повної суми (1.2),

побудуємо логічну схему суматора (рис. 1.42).

a

б

Рис. 1.42. Повний су-

матор:

а – логічна схема;

б – умовне зображення

і+1

і+1

і+1

Page 76: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

76

Чотирирозрядний суматор. Для виконання додавання багатороз-

рядних чисел декілька суматорів з'єднують у лінійку. Багаторозрядний

суматор може бути представлений послідовністю однорозрядних сума-

торів через з'єднання виходу перенесення молодшого розряду зі входом

перенесення сусіднього старшого розряду. В послідовному суматорі зна-

чення перенесення передається послідовно від молодшого розряду до

старшого, що значно сповільнює роботу суматора. Час поширення пере-

несення визначається виразом

,nT τ=пер

де τ – час поширення перенесення в одному розряді сумматора; n –

кількість розрядів суматора.

Такий суматор має низьку швидкодію і може використовуватися

в тих арифметичних пристроях, де швидкість виконання операцій не

є вирішальним чинником. Перевагою послідовного суматора є мала

кількість електронних схем, з яких він складається. На рис. 1.43 пред-

ставлено чотирирозрядний суматор з послідовним перенесенням для

додавання двох чотирирозрядних чисел – a та b.

(1.3)

С 0

SM 0

S0

A 0

С 1

B0

SM 1

S1

A 1

С2

B1

SM 2

S2

A 2

С3

B 2

SM 3

S3

A 3

С4

B3

Рис. 1.43. Чотирирозрядний суматор з послідовним перенесенням

Одно-, дво- та чотирирозрядні

двійкові суматори випускаються

у вигляді окремих інтегральних

мікросхем (К155ІМ1, К155ІМ2 та

К155ІМ3).

На рис. 1.44 показано умовне

позначення комбінаційного чотири-

розрядного двійкового суматора

(ІМС типу К155ІМ3). Входи Ai й B

i

служать для подачі розрядів чисел,

Si – виходи розрядів суми чисел,

i – номер розряду, Ρ0 – вхід пере-

несення, Ρ3 – вихід перенесення.

Для зменшення часу на операцію

додавання багаторозрядних чисел

SM

P3

S3

S2

S1

S0

B3

A3

B2

A 2

B1

A1

B0

A0

P0

Рис. 1.44. Умовне позначення

чотирирозрядного двійкового

суматора К155ІМ3

Page 77: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

77

використовують схему паралельного перенесення, причому значення їх

будуть визначатися тільки значеннями попередніх розрядів доданків. При

цьому всі сигнали перенесення обчислюються за значеннями вхідних

даних. Розглянемо принцип формування перенесень.

Розглядаючи рівняння (1.3), для вираження перенесення можна ви-

вести слідуючі формули залежності утворення перенесення будь-якого

розряду від значення нульового перенесення С0, функції розподілу пере-

несення Pi та функції перенесення Q

i:

.

;

;

00120121222223

0010111112

0001

CPPPQPPQPQCPQC

CPPQPQCPQC

CPQC

+++=+=

+⋅+=⋅+=

⋅+=

Як видно з наведених рівнянь, для виконання додавання багатороз-

рядних чисел не потрібно чекати на результати роботи від попередніх

розрядів, а достатньо мати інформацію про зовнішнє перенесення С0 та

допоміжні значення Pi, Q

i від попередніх розрядів. Ці дані формуються

паралельно та значно швидше, ніж одержання результату по окремим

розрядам, а отже, дозволяють значно прискорити знаходження суми двох

багаторозрядних чисел. На практиці використовуються суматори зі схе-

мою прискореного перенесення (рис. 1.45), яка реалізує вираз (1.4).

(1.4)

С 0

SM0

S0

A0

С1

B0

SM1

S1

A 1

С2

B1

SM2

S2

A 2

С3

B2

SM3

S3

A 3

С4

B3

P0Q0P1P2P3 Q 1Q2Q 3

Q P

Схема прискореного перенесення

Рис. 1.45. Схема чотирирозрядного суматора з прискореним перенесенням

Контрольні питання для самоперевірки

1. Подання інформації в ЕОМ фізичними сигналами.

2. Головні логічні схеми "І", "АБО", "НІ" та їхні характеристики.

Page 78: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

78

3. Похідні логічні схеми "АБО-НІ", "І-НІ", "виключаюче АБО",

"виключаюче АБО-НІ" та їхні характеристики.

4. Таблиці істинності логічних схем.

5. Побудова логічних функцій для елементів логіки.

6. Принцип роботи тригера.

7. Побудувати RS-тригер на елементах "АБО-НІ" та "І-НІ".

8. Пояснити принцип роботи D-тригера.

9. Пояснити принцип роботи T-тригера.

10. Пояснити принцип роботи JK-тригера.

11. Пояснити принцип роботи МS-тригера.

12. Навести приклади використання тригерів.

13. Робота та побудова лічильників імпульсів.

14. Двійкові лічильники.

15. Двійково-десяткові лічильники.

16. Реверсивні лічильники.

17. Регістри зсуву та їхні основні можливості.

18. Загальна будова перетворювачів кодів.

19. Загальна схема шифраторів та дешифраторів.

20. Призначення та будова мультиплексора.

21. Напівсуматор і повний суматор.

22. Суматор з паралельним перенесенням.

Список рекомендованої літератури

1. Аналоговые и цифровые интегральные микросхемы / С.В. Яку-

бовский, Н.А. Барканов и др.; Под ред. С.В. Якубовского. – М.: Радио

и связь, 1984. – 432 с.

2. Капцов Л.Н. Физика элементов ЭВМ. – М.: МГУ, 1983. – 240 с.

3. Кучумов А.И. Электроника и схемотехника: Учебное пособие. –

М.: Гелиос АРВ, 2002. – 304 с.

4. Справочное пособие по микропроцессорам и микроЭВМ

/ В.Л. Горбунов, Д.И. Панфилов и др. – М.: Высшая шк., 1988. – 272 с.

5. Титце У., Шёнк К. Полупроводниковая схемотехника. – М.: Мир,

1982. – 512 с.

6. Шило В.Л. Популярные цифровые микросхемы. – М.: Радио

и связь, 1987. – 352 с.

Page 79: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

79

Частина друга

ОРГАНІЗАЦІЙНА МОДЕЛЬ ПРОЦЕСОРА

Розділ 1. МІКРОПРОЦЕСОР 8086

1.1. Історія розвитку електронно-обчислювальної машини

Ідея автоматичного виконання арифметичних обчислювань і вико-

ристання для цього програмного керування вперше була висловлена ан-

глійським математиком Ч. Беббіджем у 1833 році. Спроба побудувати

механічну обчислювальну машину не завершилася успіхом, і тільки че-

рез сторіччя почалася реалізація його ідеї.

Для розвитку атомної фізики, ракетної та космічної техніки в 40-і

роки XX сторіччя потрібно було виконувати великий обсяг обчислень,

з яким не могли впоратися наявні рахункові машини. Ця потреба при-

звела до створення цифрових ЕОМ, які повинні виконувати обчислен-

ня під управлінням програм.

У 1936 році англійський математик і логік Алан Тюрінг висунув кон-

цепцію автоматичного пристрою, здатного виконувати обчислення. Його

гіпотетичний обчислювальний пристрій, який одержав назву "машина

Тюрінга", здатен зберігати команди та реагувати на них, складається

з довгої стрічки, головки для зчитування та записування, керуючого го-

ловкою механізму. Обчислення виконуються відповідно до інформації на

стрічці та команд керуючого механізму. Результат обчислень зчитуєть-

ся зі стрічки, коли машина зупиняється.

Машина Тюрінга є ідеалізованою моделлю логічної структури будь-

якого обчислювального пристрою й містить у собі принципову схему всіх

електронно-цифрових обчислювальних машин: пристрій вводу/виводу –

стрічка й головка зчитування/записування; пам'ять – команди, які збе-

рігаються керуючим пристроєм; центральний процесор – керуючий

механізм.

У 1938 році німецький інженер Конрад Цузе створив електромеха-

нічну машину Z1 з клавіатурою для введення завдань і панелі з лампоч-

ками, на якій відображувався результат. У 1941 році К. Цузе вдалося

створити обчислювальну машину Z3 з керуванням від перфострічки,

в основі якої були застосовані електромеханічні реле. Вона працювала

у двійковій системі числення. Перша машина Z3 містила 600 реле лічиль-

ного пристрою й 2000 реле пристрою пам'яті. Числа можна було "записа-

ти" у пам'ять і "зчитувати" за допомогою електричних сигналів, які прохо-

Page 80: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

80

дили через реле. Реле або пропускали сигнал, або не пропускали. Маши-

на зчитувала програму механічно крок за кроком (лінійно) і виконува-

ла від 15 до 20 обчислювальних операцій за секунду. В своїх роботах

К. Цузе випередив на два роки Ейкена зі США, який потім створив ана-

логічну машину.

Сучасні обчислювальні системи основані на теоретичних роботах

з обчислювальної техніки теорії американського математика Джона фон

Неймана, пов'язаної з логічною організацією обчислювальних машин, про-

блемами функціонування машинної пам'яті, роботою над обчислюваль-

ною машиною моделі EDVAC. Описана фон Нейманом архітектура об-

числювальної машини "Попередня доповідь про машину EDVAC" була

покладена в основу всіх наступних моделей комп'ютерів й одержала на-

зву "фон Неймановська". Відповідно до концепції фон Неймана обчислю-

вальна машина повинна містити:

арифметико-логічний пристрій для виконання обчислень;

пристрій керування, що забезпечує послідовності виконання операцій

(програми);

пристрій запам'ятовування, що зберігає програми, вихідні дані та

результати;

пристрій вводу/виводу для введення завдань і можливості зчиту-

вання результатів обчислювань.

За короткий термін відбулися великі зміни в розвитку обчислюваль-

ної техніки. Можна виділити кілька поколінь розвитку ЕОМ.

Перші електронно-обчислювальні машини були створені на основі

дискретних радіодеталей та електронних вакуумних ламп. Вони працю-

вали з тактовою частотою сотні кілогерц і мали низьку надійність. До

машин першого покоління відносяться "Урал" і "Дніпро".

Друге покоління ЕОМ пов'язане з напівпровідниковими елементами

та мініатюрними дискретними радіодеталями. Були розроблені базові

функціональні вузли, які виконувалися на окремих друкованих платах.

У якості оперативного запам'ятовувального пристрою (ОЗП) застосову-

валися магнітні феритові кільцеві сердечники. Застосування напівпровід-

никових елементів дозволило знизити амплітуди інформаційних сигналів

до десятків вольтів, що значно зменшувало потужність енергоспоживан-

ня системи. Для підвищення надійності ЕОМ створювалися системи кон-

тролю їх працездатності та діагностики. Машини цього покоління знай-

шли широке застосування в наукових роботах і в автоматизації виробни-

чих процесів різних галузей промисловості. Прикладами можуть бути

ЕОМ серії "Мінськ" ("Мінськ 2", "Мінськ 22", "Мінськ 222", "Мінськ 32").

Причиною бурхливого розвитку ЕОМ в 60-х роках було впрова-

дження технології інтегральних схем (ІС), що замінили дискретні радіо-

Page 81: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

81

елементи на конструктивно завершені функціональні вузли, які були вико-

нані на кремнієвому кристалі. Даний розвиток технології одержав назву

інтегральної (від integer – нерозривно зв'язаний), а отримані радіоеле-

менти були названі інтегральними мікросхемами. Префікс "мікро" підкрес-

лює високий рівень мініатюризації. Це дозволило значно зменшити габа-

ритні розміри та потужність енергоспоживання ЕОМ наступних поколінь.

На початку 70-х років на основі процесора Intel 8008 випущено мікро-

комп'ютер першого покоління. До 1974 року з'явилося друге покоління

мікропроцесорів загального призначення Intel 8080. Такий успіх спонукав

інші фірми до виробництва цих або аналогічних процесорів.

У 1978 році фірма "Intel" випустила процесор третього покоління –

Intel 8086, який забезпечував деяку сумісність із 8080 і був значним про-

суванням вперед у даній галузі. Для підтримки більш простих пристроїв

фірма "Intel" розробила різновид процесора 8086 – процесор 8088, який

у 1981 році був обраний фірмою IВМ для її персональних комп'юте-

рів. Подальшим розвитком процесора 8086 стали процесори 80186,

80286, 80386, 80486, Pentium, які забезпечили додаткові можливості

та підвищили потужність обчислювань.

Збільшення ефективності ЕОМ та їх широке використання потребує

прискорити написання програм. Для цього ведуться розробки на мовах

високого рівня. Але найбільш ефективним є програмне забезпечення

повністю або частково написане мовою асемблер. Це пов'язано з тим,

що програми на даній мові вимагають значно менше пам'яті, часу вико-

нання та дозволяють більш ефективно використовувати можливості

архітектури процесорів.

1.2. Основні характеристики та склад мікропроцесора 8086

У 1978 році фірмою "Intel" було представлено мікропроцесор (МП)

8086, який мав 16-бітову архітектуру. Цей МП виготовлений на основі

технології n-МОП і містив 29000 елементів (транзисторів).

Основні характеристики МП 8086:

16-розрядний арифметико-логічний пристрій (АЛП);

14 регістрів загального призначення (РЗП) (16-розрядні);

16-розрядна шина даних;

20-розрядна адресна шина;

робоча частота 4 МГц;

середній час виконання команди – 12 машинних тактів;

пам'ять, організована за сегментним принципом з можливістю од-

ночасної роботи чотирьох сегментів. Максимальний обсяг сегмента ста-

новить 64 Кбайта.

Page 82: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

82

Склад МП 8086

Архітектура МП 8086, яка представлена на рис. 2.1, містить два

основних блоки: пристрій обробки даних (ПОД) і пристрій сполучення

з шиною (ПСШ). Ці пристрої призначені для роботи в асинхронному

режимі, працюють паралельно та можуть несинхронно виконувати

свою роботу – обробку даних й обмін інформацією із зовнішніми при-

строями (ЗП).

1

6

Черга

команд

7 0

Пр

истрій

сп

олу

чен

ня

з ш

ин

ою

При

стрій

об

ро

бк

и

дан

их

Буф ер

адреса/дані

Буфер

адреса/стан

A19–A16

ST6–ST9

AD15–AD0

CS

IP

ESSSDS

Суматор

15 0

AH AL

CH

DH

BH

CL

DL

BL

SP

BP

SI

DI

15 0

АЛП

Регістр

прапорів

15 0

AX

CX

DX

BX

Рис. 2.1. Структурна схема МП 8086

Page 83: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

83

У ході виконання програми пристрій сполучення з шиною зчитує

з пам'яті послідовність команд і розміщує їх у регістр черги обсягом до

6 байт. При вилученні цих команд у пристрій обробки даних відбувається

поповнення регістру черги з загальної пам'яті системи. Паралельно по-

чинає роботу пристрій обробки даних, який завантажує з регістру черги

чергову команду та обробляє її. Якщо пристрою обробки даних потрібно

прочитати код даних з пам'яті або записати його у пам'ять, процес вибір-

ки команд переривається і пристрій сполучення з шиною виконує цикл

читання (або записування) даних. Після цього знову починається вибір-

ка команд, що триває до заповнення черги. Таке перекриття етапів ви-

бірки та виконання практично повністю виключає час читання команд із

сумарного часу виконання програми, підвищуючи таким чином продук-

тивність МП.

1.3. Пристрій обробки даних мікропроцесора 8086

Пристрій обробки даних служить для виконання логічних й арифме-

тичних обчислень. До його складу входять арифметико-логічний блок та

надшвидка пам'ять, яка доступна користувачам. Арифметико-логічний

блок виконує логічні й арифметичні операції над 8- та 16-розрядними опе-

рандами, операції зсуву та корекцію даних.

Для збільшення ефективності роботи процесора вхідні дані та ре-

зультати обчислення тимчасово зберігаються в надшвидкій пам'яті (ре-

гістрах), яка побудована на регістрах даних AX, BX, CX, DX. Для при-

скорення виконання часто вживаних операцій доступу до пам'яті й об-

робки послідовності даних використовуються спеціальні регістри, які за-

безпечують прискорення формування адреси оброблюваних даних і роз-

міщення результатів (індексні регістри SI, DI та вказівні – SP, BP).

Для можливості контролю за станом процесора та ходом виконання

обчислень служить спеціальний регістр прапорів (RF), окремі біти якого

є індикаторами даних процесів. Виконавши аналіз складу цього регістру,

можна отримати уявлення про стан процесора та хід виконання обчис-

лень, збереження ознак стану процесора, які були отримані при виконанні

операцій.

Регістри загального призначення (регістри користувача) знаходяться

у пристрої обробки даних, вони доступні програмістові при написанні про-

грам. Для зберігання операндів і результатів роботи операцій використо-

вуються регістри даних AX, CX, DX і BX. Для роботи зі словами засто-

совуються повні регістри, а для роботи з байтами можна застосовувати

незалежно як молодші (AL, CL, DL, BL), так і старші (AH, CH, DH, BН)

частини регістрів даних. При програмуванні більшість із них можуть ви-

користовуватися для зберігання операндів довільно. Але застосування

Page 84: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

84

фіксованих регістрів для виконання деяких команд дозволяє одержати

компактні коди. Принципи їх роботи впроваджені в алгоритмі виконання.

Це потрібно обов'язково враховувати при написанні програм. Знання да-

них особливостей дозволить при необхідності заощадити пам'ять, яку

займає код програми. Дані регістри крім загального призначення можуть

виконувати й спеціальні функції:

AX/AH/AL (Accumulator register) – акумулятор. Застосовується для

зберігання даних і тимчасових результатів при написанні програм. Цей

регістр має більшу швидкість обміну, ніж інші. В окремих випадках їхнє

використання визначене однозначно: для операцій множення та ділення,

вводу/виводу, роботи з рядками;

BX/BH/BL (Base register) – базовий регістр. Застосовується для збе-

рігання базової адреси об'єктів у пам'яті;

CX/CH/CL (Count register) – регістр-лічильник. Застосовується

в командах, що виконують повторювані дії. Його використання най-

частіше задається неявно та приховано в алгоритмі роботи програми;

DX/DH/DL (Data register) – регістр даних. Регістр призначений для

зберігання проміжних даних. У деяких командах його використання є

обов'язковим, для деяких команд це відбувається неявно: множення,

ділення.

Одним із методів подання даних може бути послідовність елементів

довільної довжини, які складають ланцюжки. Для обробки ланцюжків

даних використовуються ланцюжкові операції з використанням індекс-

них регістрів SI, DI. Індексні регістри забезпечують послідовну оброб-

ку елементів, кожен з яких може мати довжину 8, 16 або 32 біти.

SI (Source Index register) – індекс джерела. Цей регістр у ланцюжко-

вих операціях містить поточну адресу елемента в ланцюжку-джерелі,

над яким потрібно виконати певну дію.

DI (Destination Index register) – індекс приймача (одержувача). Цей

регістр у ланцюжкових операціях містить поточну адресу в ланцюжку-

приймачі, яка вказує на точку розміщення елементів.

Застосування індексних регістрів у ланцюжкових командах має на-

ступні особливості: вміст регістрів SI та DI завжди вказує на наступний

елемент ланцюжка; вміст регістрів SI та DI змінюється автоматично

при виконанні ланцюжкових команд із кроком 1, 2 або 4 відповідно до

оброблюваних даних – байта, слова або подвійного слова; залежно від

стану прапора DF, вміст регістрів може збільшуватися або зменшувати-

ся: якщо DF = 0, то значення регістрів збільшуються, при DF = 1 відбу-

вається зменшення. Тобто, прапор DF дозволяє змінювати напрямок

вибору елементів для обробки.

В архітектурі мікропроцесора для зберігання даних може викорис-

Page 85: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

85

товуватися спеціальна структура типу стек. Для роботи зі стеком існу-

ють спеціальні регістри SP та BP.

SP (Stack Pointer register) – регістр покажчика стека, який містить

указівку на вершину області даних у поточному сегменті стека.

BP (Base Pointer register) – регістр покажчика бази стека, який при-

значений для організації довільного доступу до даних усередині стека.

Початкова адреса масиву даних у сегменті стека визначається ре-

гістром покажчика бази стека BP, а адреса інформації в масиві визна-

чається покажчиком стека SP. У стек інформацію можна записувати

тільки словами. При стековій організації пам'яті остання записана інфор-

мація зчитується першою. Вміст покажчика вершини стека при запису-

ванні буде автоматично зменшуватися на 2, при читанні – збільшувати-

ся. Для роботи зі стеком у системі команд мікропроцесора є спеціальні

команди: PUSH для записування та POP для читання.

Прапори для операційної системи представляють деякі ознаки, що

характеризують стан мікропроцесора або процесів, які відбуваються.

Звичайно стани можуть характеризуватися наявністю або відсутністю

деякого результату й для подання його досить мати один біт інформації.

Прапори групуються та записуються в спеціальний регістр, який назива-

ють регістром прапорів RF (flag register). Аналізуючи стан прапорів, можна

отримати інформацію про стан процесора та про результати виконання

команд. За допомогою окремих прапорів можна також впливати на стан

самого мікропроцесора. Ця інформація дозволяє оцінювати робото-

здатність процесора, контролювати хід виконання обчислень, виявляти

можливі причини збоїв, правильно вибирати рішення щодо подальшого

виконання програми.

Регістр прапорів МП 8086 містить дев'ять ознак (прапорів). Їх мож-

на розділити на три групи: шість прапорів стану, два системних і пра-

пор керування. Для однозначного розуміння розташування інформації

в регістрах (номера розрядів даних в регістрах) будемо вважати, що

n-розрядні дані мають нумерацію зправа вліво від 0 до n–1. Структура

регістра прапорів МП 8086, розташування та їхнє призначення подані

на рис. 2.2.

01 0003 0205 0407 0609 0811 1013 1215 14

CFPFAFSF ZFIF TFOF DF

Розряди рег істра прапорівРозряди регістра прапорів

Рис. 2.2. Структура регістра прапорів процесора 8086

Page 86: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

86

Прапори стану можуть змінюватися після виконання машинних

команд і відображають особливості результату виконання арифметич-

них або логічних операцій. Це дає можливість аналізувати стан обчис-

лювального процесу та реагувати на нього за допомогою команд умов-

них переходів і викликів підпрограм.

Розглянемо докладніше призначення та вміст цих прапорів:

прапор перенесення CF (Carry Flag) (0-й розряд) встановлюється

в 1, якщо в результаті виконання операції відбулося перенесення

з (n–1)-го розряду результату в неіснуючий старший n-й розряд або по-

трібна була позика з неіснуючого n-го розряду. Старшими вважають

7-й або 15-й біт залежно від розмірності операнда;

прапор паритету PF (Parity Flag) (2-й розряд) доповнює код резуль-

тату до непарного значення, тобто встановлюється в 1, якщо кількість

одиниць у молодшому байті результату (цей прапор використовується

тільки для восьми молодших розрядів операнда будь-якого розміру)

містить парне число одиниць, а в 0 – якщо вісім молодших розрядів ре-

зультату містять непарну кількість одиниць;

прапор допоміжного перенесення AF (Auxiliary carry Flag) (4-й роз-

ряд) встановлюється в 1, якщо при виконанні операції додавання відбуло-

ся перенесення з 3-го в 4-й розряд результату (з молодшої тетради

в старшу) або зробилася позика з 4-го в 3-й розряд. Прапор AF може

застосовуватися для десяткової корекції результату;

прапор нульового результату ZF (Zero Flag) (6-й розряд) набирає

одиничного значення, якщо всі розряди результату нульові. Коли хоча

б один розряд результату відмінний від нуля, прапор ZF скидається

в нуль. Аналіз цього прапора може використовуватися, наприклад, для

контролю за одержанням нульового значення дільника при операції

ділення, а також дозволяє ефективно знаходити подібні елементи;

прапор знака SF (Sign Flag) (7-й розряд) встановлюється рівним стар-

шому (n–1)-у біту результату (біти 7 або 15 для 8- або 16-розрядних

операндів відповідно). При виконанні операцій над числами зі знаком пра-

пор SF відповідає знаку результату. Якщо результат від'ємний, SF буде

встановлено в 1;

прапор переповнення OF (Overflow Flag ) (11-й розряд) застосо-

вується для фіксування факту втрати значущого біта при арифметич-

них операціях і встановлюється в 1, якщо в результаті виконання опе-

рації відбувається переповнення розрядної сітки. Відповідно до табл. 2.1

переповнення розрядної сітки формується, коли перенесення з (n–2)-го

розряду в (n–1)-й не збігається з перенесенням з (n–1)-го розряду

в неіснуючий n-й.

Page 87: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

87

Перенесення з (n–2)-го

розряду в (n–1)-й

Перенесення з (n–1)-го

розряду в неіснуючий n-й

Переповнення

розрядної сітки

+ + Немає переповнення

– – Немає переповнення

+ – Переповнення

– + Переповнення

Таблиця 2.1. Визначення стану переповнення розрядної сітки

Примітка. "+" – перенесення відбулося; "–" – перенесення не відбулося.

Прапор керування DF (Directory Flag) (10-й розряд) зумовлює на-

прямок обробки елементів у ланцюжкових операціях: від початку рядка

до кінця (DF = 0) або навпаки, від кінця рядка до його початку (DF = 1).

Вибір самих елементів ланцюжка забезпечується індексними регістра-

ми SI та DI, значення яких автоматично збільшується або зменшується:

якщо DF = 0, то значення адреси збільшується (автоінкрементна адре-

сація), якщо DF = 1 – адреси зменшуються (автодекрементна адреса-

ція). Для роботи із прапором DF існують спеціальні команди: CLD (зняти

прапор DF) і STD (установити прапор DF).

Системні прапори (IF та TF) можуть забороняти виконання пере-

ривань та використовуються в режимі налагодження програми.

Прапор переривання IF (Interrupt enable Flag) (9-й розряд) призначе-

ний для дозволу або заборони (маскування) апаратних переривань по

входу INTR. При нульовому значенні прапора IF забороняється обробку

апаратних запитів на переривання, а при одиничному значенні – дозво-

ляється.

Прапор покрокового режиму (трасування) TF (Trace Flag) (8-й роз-

ряд) призначений для покрокової організації роботи процесора. При уста-

новці в одиничний стан прапора TF після виконання кожної машинної ко-

манди в мікропроцесорі генерується внутрішнє переривання за номером

1, забезпечуючи після обробки кожної команди зупинку системи. Даний

прапор може використовуватися при налагодженні програм.

1.4. Пристрій сполучення з шиною

Пристрій сполучення з шиною служить для організації безперервної

роботи пристрою обробки даних. Для цього необхідно забезпечити без-

перервний потік команд і даних. Крім забезпечення обміну інформацією

між МП і зовнішніми відносно МП пристроями, даний пристрій керує

Page 88: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

88

роботою пам'яті (сегментна організація роботи пам'яті), формує внутріш-

ню чергу команд для роботи МП (черга формується в шести регістрах

розрядністю 8 біт).

Складність організації роботи з пам'яттю полягає у невідповідності

між адресним простором системи пам'яті та архітектурою процесора.

16-розрядна архітектура процесора дозволяє звертатися до пам'яті об'-

ємом лише в 64 Кбайти. Щоб звертатися до всієї системи пам'яті ЕОМ,

яка має об'єм 1 Мбайт, потрібна 20-розрядна адресна шина. За допомо-

гою суматора фізичної адреси формується за спеціальним алгоритмом

20-розрядна фізична адреса, яка складається з адреси блоку пам'яті (сег-

мента) та розміщення інформації в цьому сегменті. Сегмент може зна-

ходитися в будь-якій точці фізичного простору в 1 Мбайт, друга компо-

нента дозволяє вибирати дані з блоку пам'яті лише в 64 Кбайта.

Пристрій сполучення з шиною складається з наступних вузлів:

буфера обміну по шинах адреса/дані;

суматора фізичної адреси;

шести регістрів черги команд для організації роботи АЛП;

чотирьох сегментних регістрів (CS, DS, SS, ES);

покажчика адреси команд (IP).

Вся інформація надходить у МП через буфер адреса/дані та потрап-

ляє по внутрішній 16-розрядній шині у пристрій сполучення. Інформація

з внутрішньої шини може бути прийнята у будь-який регістр пристрою

сполучення або передана через регістр обміну на шину в пристрій

обробки даних. Аналогічно інформація з вузлів ПСШ й АЛП може бути

видана з МП у зовнішні пристрої (ЗП) обчислювальної системи.

Зв'язок між МП і ЗП здійснюється по 16-розрядній буферній шині

адреса/дані, з розподілом у часі передачі адресної інформації і даних.

Буферні шини побудовані на основі формувачів, які здатні передавати

сигнали у двох напрямках, тобто шина побудована за принципом мульти-

плексування даних зі зміною напрямку передачі.

Суматор фізичної адреси, призначений для формування повної

20-розрядної фізичної адреси пам'яті, включає в себе чотири додаткові

шини, що дозволяє одержати доступ до 1 Мбайта даних (220

= 1024 Кбайт).

Фізична адреса формується з адреси, що знаходиться в одному із сег-

ментних регістрів, і зміщення, яке знаходиться в регістрі-покажчику

команд.

Логіка обробки машинної команди побудована так, що при вибо-

рі команди або даних відбувається звертання до окремих областей

пам'яті. Вибір сегментів пам'яті здійснюється за допомогою сегмент-

Page 89: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

89

них регістрів процесора. Мікропроцесор 8086 має чотири сегментні ре-

гістри: CS, SS, DS, ES. При роботі з оперативною пам'яттю мікропроце-

сор Intel апаратно підтримує структурну організацію програми у вигля-

ді чотирьох частин, які розташовуються у різних сегментах пам'яті.

Призначення сегментних регістрів – вказувати на сегменти, до яких

програма має доступ у певний момент часу. Сегментні регістри зберіга-

ють початкові (базові) адреси сегментів пам'яті:

регістр сегмента команд CS (Code Segment) визначає сегмент па-

м'яті, у якому зберігається адреса сегмента з машинними кодами ко-

манд виконуваної програми;

регістр сегмента даних DS (Data Segment) задає сегмент пам'яті,

що містить дані, які обробляє програма, й результати операцій;

регістр сегмента стека SS (Stack Segment) визначає сегмент пам'я-

ті, доступ до елементів якого можливий за спеціальним алгоритмом, що

одержав назву стекової адресації;

регістр екстра сегмента ES (Extra Segment) задає додатковий сег-

мент даних, у якому може додатково зберігатися оброблювана інформа-

ція.

Регістр-покажчик команд IP (Instraction Pointer register) містить 16-

бітне зміщення наступної команди, яка підлягає виконанню, відносно

вмісту сегментного регістра CS у поточному сегменті команд. Цей

регістр безпосередньо недоступний програмістові, але завантаження та

зміна його значення виконуються різними командами управління, до яких

відносяться команди умовних і безумовних переходів, виклику процедур

і повернення з процедур. Виникнення переривань також призводить до

модифікації регістра IP.

Шість 8-розрядних регістрів черги команд утворюють внутрішню

послідовність команд програми для забезпечення безперебійного їхньо-

го постачання в блок АЛП.

1.5. Організація пам'яті

Пам'ять є одним з основних компонентів обчислювальних систем,

який значно впливає на їхню ефективність роботи. Можливий об'єм па-

м'яті визначається адресним простором звертання до неї. Шістнадцят-

кова архітектура процесора 8086 дозволяє звертатися тільки до 64 Кбайт

пам'яті, що значно обмежує можливості написання програм та їх вико-

нання. Піти шляхом простого збільшення адресного простору пам'яті не

дозволяє шістнадцяткова архітектура процесора. Існують процесорні

розробки, які мають незалежні шини передачі даних та адреси з різною

Page 90: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

90

розрядністю. В цих процесорах розрядність адресної шини може бути

встановлена залежно від проектованого об'єму пам'яті.

В процесорі 8086 використовується спільна шина для передачі даних

та адреси. Передача інформації рознесена в часі і для її ідентифікації

використовуються спеціальні супроводжуючі сигнали.

Щоб така система працювала з пам'яттю більшого об'єму, було за-

пропоновано метод сегментації пам'яті. Цей метод використовує не пря-

му адресацію елементів пам'яті, а більш складний механізм. Сегмента-

ція пам'яті – це виділення окремих областей пам'яті з єдиного адресного

простору та надання їх у користування. Адреса складається з двох час-

тин: адреси сегмента пам'яті та адреси розміщення даних в середині

даного сегмента. Ці адресні складові мають по 16 розрядів, що дозволяє

організувати до 65536 сегментів з об'ємом до 64 Кбайт.

Весь адресний простір пам'яті логічно поділяється на взаємонеза-

лежні сегменти, які можуть накладатися один на одного, стикатися, мати

спільні області, бути вкладеними або ізольованими. Крім виділення ок-

ремих ділянок пам'яті, сегментація пам'яті дозволяє здійснювати дина-

мічне переміщення програм шляхом задавання нових початкових зна-

чень місця розташування сегмента.

Адреса подається за допомогою двох 16-розрядних складових, роз-

ділених між собою двокрапкою. Наприклад, запис 10FF:0010 означає, що

перше значення є адресою сегмента, а друге – розміщенням даних все-

редині сегмента.

Максимальна пам'ять, з якою працює процесор 8086, становить

1 Мбайт, що потребує розміру адресної шини 20 розрядів (220

= 1048576).

При цьому фізична адреса може змінюватися від 00000h до FFFFFh

(h означає шістнадцяткову систему числення).

Повна 20-розрядна фізична адреса формується в суматорі фізичної

адреси. Вона утворюється як сума вмісту одного із сегментних регістрів,

зсунутого вліво на чотири двійкових розряди (тобто помноженого на 16)

і доповненого праворуч кодом 00002, і адреси розміщення даних всере-

дині сегмента.

Робота суматора може бути представлена схемою, відображеною

на рис. 2.3.

Фізична адреса обчислюватиметься за наступною формулою:

,)(101616 з16

А(xS)ФА +⋅=

де ФА – фізична адреса; (хS)16

– вміст одного з сегментних регістрів;

(Aз)16

– адреса зміщення даних у поточному сегменті.

Page 91: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

91

0

15 0

19

15

0

19 0

0 0 0 0

Вміст сегментного регістра

Адреса сегмента

Адреса зміщення

Фізична адреса даних у пам’яті

Базова адреса сегмента має вигляд XXXX0h, де Х – будь-яка

шістнадцкова цифра. Їхні адреси завжди кратні 24 = 16.

Рис. 2.3. Схема одержання 20-розрядної фізичної адреси

Інформація в сегменті знаходиться за адресою зміщення. Існує пев-

ний зв'язок між сегментними регістрами та регістрами, які містять ад-

реси зміщення. Наприклад, для сегментного регістра команд CS адреса

зміщення перебуває в регістрі адреси команд IP.

Розглянемо обчислення фізичної адреси команди при наступних

вмістах сегмента кодів та регістра адреси команд: (CS) = 0F10h;

(IP) = 0010h.

Визначаємо адресу сегмента: ( ) 0F100h.10hCSАсегм

=⋅=

Визначаємо фізичну адресу: ( ) 0010h0F100h А АФА зсегм

=+=+=

= 0F110h.

У певний момент часу для МП 8086 доступні тільки чотири сегмен-

ти пам'яті відповідно до чотирьох сегментних регістрів, які зберігають

базові адреси сегментів пам'яті (вірніше 16 старших значущих розрядів

ХХХХh). Ці сегменти називаються поточними сегментами команд, да-

них, стека й екстраданих.

До різновидів сегментної організації пам'яті можна віднести стек.

Стек – це ділянка пам'яті, що спеціально виділяється для тимчасового

зберігання інформації про точки зупинки роботи процесора й дозволяє

відновити виконання програми з даних точок. Для програм з простою

структурою наявність стека не є обов'язковою. Стек забезпечує вико-

Вміст сегментного регістра

Адреса сегмента

Адреса зміщення

Фізична адреса даних у пам'яті

Page 92: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

92

нання програм зі складною структурою, таких, що містять звертання до

окремих підпрограм, і забезпечує повернення в основну програму після

їх виконання. Тому відсутність стека не є помилкою, але програма

TLINK.EXE, що компонує окремі підпрограми, видасть попереджуюче

повідомлення про його відсутність на той випадок, якщо програміст за-

був описати сегмент стека у своїй програмі. Найчастіше стек організо-

вується так, як показано на рис. 2.4.

0000:0000

Дно стека

Вершина стекаSS:SP

SS:FFFF

FFFF :000F

Рис. 2.4. Концептуальна схема організації стека

Для організації роботи зі стеком призначено три регістри: SS – сег-

ментний регістр стека; SP – регістр покажчика вершини стека; BP –

регістр покажчика бази області стека.

Початок стека міститься в старших адресах пам'яті й визначає мак-

симально можливу адресу стека – SS:FFFF.

Операція записування або зчитування виконується з вершиною сте-

ка, яка визначається величиною зміщення, записаною в регістрі SP. Пов-

на адреса вершини стека визначається парою регістрів – SS:SP, де регістр

SS містить адресу сегмента стека, а SP – значення зміщення.

Якщо необхідно одержати доступ до елементів, розташованих не на

вершині, а всередині стека, застосовується регістр BP – регістр покаж-

чика бази області стека. У регістрі BP можна записати адресу знахо-

дження потрібної інформації у стеці й утворити нову вершину стека.

Особливістю регістра SS є автоматичне використання його про-

Оперативна пам'ять

Вершина стека

Дно стека

Сегм

ен

т стека

Page 93: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

93

цесором для виконання всіх команд, що працюють зі стеком. Розмір

стека залежить від режиму роботи мікропроцесора й обмежується

64 Кбайтами.

Робота зі стеком виконується за наступними правилами:

записування та читання даних у стеці здійснюється відповідно до

принципу LIFO (Last In First Out – "останнім прийшов, першим пішов");

команди роботи зі стеком автоматично змінюють регістр SP таким

чином, щоб він завжди вказував на останній записаний у стек елемент.

Якщо стек порожній, то значення SP дорівнює адресі останнього байта

сегмента, відведеного під стек;

інформація в стек записується тільки по два байти;

вміст регістра SP змінюється автоматично при роботі зі стеком (при

записуванні автоматично зменшується на 2, при читанні – збільшується

на 2). Ця особливість закладена в алгоритм команд роботи зі стеком;

при занесенні елемента в стек процесор зменшує значення регістра

SP, а потім записує елемент за адресою нової вершини. При вилученні

даних зі стека процесор копіює елемент, що знаходиться за адресою вер-

шини, а потім збільшує значення регістра покажчика стека SP;

при використанні регістрів SP і BP для адресації пам'яті асемблер

автоматично вважає, що в них утримуються значення, які являють со-

бою зміщення адреси щодо сегментного регістра SS.

Розділ 2. ОРГАНІЗАЦІЯ СИСТЕМИ ПЕРЕРИВАННЯ

МІКРОПРОЦЕСОРА 8086

Роботу обчислювальної системи можна представити як послідов-

ність деяких подій. При цьому події можуть відбуватися як усередині

процесора, так і поза ним.

Під час роботи процесора послідовність операцій визначається про-

грамою, але можуть виникати особливі ситуації (переповнення, спроба

ділення на нуль і т. п.), які залежать від взаємодії операндів, і передба-

чити цю взаємодію під час програмування не завжди можливо.

Події, що запускаються поза процесором, як правило, не залежать

від роботи програми й відбуваються асинхронно. Так само працюють

і периферійні пристрої, хоча початок їхньої роботи може задавати проце-

сор. Однак час закінчення та послідовність операцій при цьому невідомі.

Через те, що момент виникнення події, яка вимагає переривання

Page 94: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

94

працюючої програми, заздалегідь невідомий, обчислювальні засоби по-

винні мати механізм, що дозволяє реагувати в подібних ситуаціях. Пере-

ривання програми – це можливість тимчасово припинити виконання по-

точної програми при виникненні особливих подій і передати керування

спеціальній програмі для їх обробки.

При виникненні особливих подій виробляється спеціальний сигнал,

який має назву запит переривання.

Обробка переривань повинна надавати право доступу до системи

іншим пристроям і процесам, не "захоплюючи" системні ресурси на три-

валий час.

2.1. Моделі обробки запитів на переривання

У процесі розвитку обчислювальної техніки застосовувалися різні

моделі організації спільної роботи пристроїв, що мають різний час реакції

на події залежно від вимог до обчислювальної системи та відповідно до

задумів розроблювача.

Можна виділити наступні основні напрямки організації переривання

виконуваних завдань:

циклічне опитування всіх пристроїв, що полягає в послідовному опи-

туванні ліній запиту переривань на апаратному рівні. Даний метод гаран-

тує доступ до системи всіх пристроїв, але має досить великий час ре-

акції системи на такий запит. Час використовується неефективно, бо за-

трачується на контроль пристроїв, які не активізують систему перери-

вання в цей момент. У той же час активний пристрій повинен чекати

своєї черги опитування;

створення черги пристроїв або завдань на обслуговування з зада-

ним пріоритетом. Час реакції системи на запит буде залежати від пріори-

тету пристроїв;

"географічний" або ланцюговий принцип обслуговування полягає

в об'єднанні всіх джерел переривань у кільце зі схемою безперервного

контролю. Апаратні засоби в кільці можуть перервати циркуляцію кон-

трольного сигналу про необхідність обробки запиту від пристрою. У цьо-

му випадку пріоритет пристроїв залежить від близькості підключення

до джерела сигналу опитування;

векторний принцип організації переривання полягає у формуванні при-

строями спеціального сигналу – запиту на дозвіл переривання – й надан-

ня необхідних системних ресурсів.

У сучасних обчислювальних системах широке застосування знай-

Page 95: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

95

шов векторний принцип організації спільної роботи пристроїв. Перери-

вання можуть ініціюватися як пристроями, так і програмно. У деяких

випадках переривання генерує сам мікропроцесор.

Комплект апаратних і програмних засобів, що дозволяє перервати

виконання поточної програми й обробити виниклу ситуацію, називається

системою переривання програми або системою обробки переривань. При

векторній схемі організації переривань пристрої посилають код запиту

переривання. Кожному коду запиту переривання відповідає своя програ-

ма його обробки. Адреси розташування програм зібрано в спеціальну

таблицю покажчиків векторів переривань. Для кожного коду векторів

переривання виділяється чотири байти, тому що повна (фізична) адреса

складається з адреси сегмента пам'яті, у якому розташована програма,

і адреси зміщення, що визначає місцезнаходження програми. Молодші

два байти визначають адресу сегмента, старші – зміщення. Таблиця

покажчиків векторів переривання розташована на початку оперативної

пам'яті обчислювальної системи, займає 1 Кбайт і дозволяє обробляти

256 переривань.

2.2. Джерела переривань МП 8086

Запити на переривання мікропроцесора 8086 можуть формуватися

внутрішніми та зовнішніми джерелами відповідно процесора.

Це можуть бути збої апаратур, ділення на нуль, запит пристрою вво-

ду/виводу на дозвіл обміну, необхідність просто перервати виконання

програми і т. д. Джерела переривань представлені на рис. 2.5.

Внутрішні

переривання

Апаратні

Апаратно -

програмні

Програмні

Зовнішні

переривання

Немаскуючі

( вхід NMI)

Маскуючі

( вхід INTR)

Джерела переривань

Рис. 2.5. Джерела переривань

Джерела переривань

Зовнішні

переривання

Внутрішні

переривання

Немаскуючі

(вхід NMI)

Маскуючі

(вхід INTR)

Апаратні

Апаратно-

програмні

Програмні

Page 96: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

96

Зовнішні запити переривань поділяються на маскуючі та немаску-

ючі, які надходять у процесор по двох входах NMI (Non Maskable Inter-

rupt) – немаскуючі й INTR (Interrupt Request) – маскуючі.

Маскуючі переривання. Запити переривань, надходження яких на

вхід INTR процесора можна блокувати, називаються маскуючими. Для

маскування запитів використовується прапор переривань IF. Маскуючі

переривання можуть потрапити на вхід процесора тільки при одиничном

значенні прапора IF. Сигнали запитів переривань від периферійних при-

строїв потрапляють до контролера переривань і з його виходу подаються

на вхід процесора INTR. Задачею контролера переривань є прийняття

сигналів від периферійних пристроїв, визначення запиту з максимальним

пріоритетом і генерування сигналу INTR, якщо запит має більший пріо-

ритет, ніж виконувана мікропроцесором програма.

Якщо запит по входу INTR прийнятий, МП переходить до виконання

двох спеціальних циклів "підтвердження переривання": попередження

зовнішніх пристроїв про прийняття запиту на переривання і прийому бай-

та ідентифікації переривання.

Апаратно система маскуючих переривань реалізована на мікро-

схемі i8259, в якій знаходяться блоки обробки запитів переривань, арбітр

переривань і маскування окремих переривань. В процесі роботи можна

програмним шляхом змінити пріоритет запитів. Для маскування окре-

мих переривань служить спеціальний восьмирозрядний регістр маску-

вання переривань, який дозволяє заборонити обробку запитів. Доступ до

внутрішніх регістрів мікросхеми переривань можна здійснити через пор-

ти 20h та 21h. У системі може бути дві мікросхеми i8259, які з'єднані

послідовно. Переривання пристроїв позначаються IRQN, де N набирає

значення від 0 до 15. Ряд пристроїв мають закріплені за ними постійні

номери (табл. 2.2).

Таблиця 2.2. Апаратні переривання

Номер

переривання

Номер

вектора

Адреса

вектора Призначення

IRQ0 08h 0000:0020h Таймер

IRQ1 09h 0000:0024h Клавіатура

IRQ2 0Ah 0000:0028h Підключення IRQ8–IRQ15

IRQ3 0Bh 0000:002Ch Послідовний порт СОМ2

IRQ4 0Ch 0000:0030h Послідовний порт СОМ1

IRQ5 0Dh 0000:0034h Паралельний порт LPT2 (резерв

для звукового контролера)

Page 97: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

97

Номер

переривання

Номер

вектора

Адреса

вектора Призначення

IRQ6 0Eh 0000:0038h Контролер НГМД*

IRQ7 0Fh 0000:003Ch Паралельний порт LPT1 – принтер

IRQ8 70h 0000:01C0h Пам’ять CMOS

IRQ9 71h 0000:01C4h Резерв (Microsoft ACPI сумісна

система)

IRQ10 72h 0000:01C8h Резерв (звуковий контролер,

модем)

IRQ11 73h 0000:01CCh Резерв (відео контролер, USB)

IRQ12 74h 0000:01D0h Резерв (PS/2 – маніпулятор

"мишка")

IRQ13 75h 0000:01D4h Математичний співпроцесор

IRQ14 76h 0000:01D8h Контролер НЖМД**

IRQ15 77h 0000:01DCh Резерв (Контролер НЖМД)

Продовж. табл. 2.2

* Накопичувач на гнучких магнітних дисках.

** Накопичувач на жорстких магнітних дисках.

Немаскуючі переривання. Для забезпечення життєдіяльності об-

числювальної системи та надійності її функціювання потрібна система,

яка незалежно від обставин зможе сповістити про критичні ситуації. Та-

кими подіями може бути порушення системи живлення, помилки роботи

пам'яті, збої в каналах передачі даних. Для приймання сигналів про фа-

тальні помилки в процесора є спеціальний вхід немаскуючого перериван-

ня NMI. Немасковані переривання мають фіксований код 2, який вико-

нується швидше, ніж маскуючі, і їх не можна заблокувати. Наявність

запитів немаскуючих переривань перевіряється процесором після завер-

шення виконання кожної команди. Найбільший час запізнювання реакції

на зовнішні переривання трапляється при виконанні команд множення,

ділення та багатобітного зсуву.

Внутрішні джерела переривань можуть формуватися апаратно,

апаратно-програмно, чисто програмно. Вони характеризуються наступ-

ними властивостями:

тип переривання визначений або знаходиться в коді команди;

підтвердження переривання не видається;

внутрішні переривання не можна заборонити, крім переривань по-

крокової роботи.

Будь-яке внутрішнє переривання (за винятком переривання покроко-

Page 98: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

98

вої роботи) має більш високий пріоритет, ніж зовнішні переривання. Якщо

запити NMI або INTR з'являються при виконанні команди, що сама ге-

нерує внутрішнє переривання (наприклад, помилка ділення), то вони не

можуть перервати обробку внутрішнього переривання.

Апаратні переривання. МП 8086 має два апаратних переривання:

ділення на нуль (тип 0) та покроковий режим (тип 1).

Переривання ділення на нуль генерується в тому випадку, якщо при

виконанні команд ділення DIV, IDIV дільник дорівнює нулю або коли ре-

зультат операції ділення перевищує максимально припустиме значення

розрядної сітки.

Переривання покроковий режим виникає після виконання будь-якої

команди при встановленому прапорі TF і переводить процессор в режим

роботи по крокам. Покроковий режим роботи використовується при на-

лагоджуванні програмами для перевірки вмісту внутрішніх регістрів про-

цесора та пам'яті після кожної команди.

Апаратно-програмні переривання. Під час виконання команди

INTO і зі встановленим прапором переповнення (OF) виникає апаратно-

програмне переривання INT4, яке свідчить про виникнення переповнен-

ня розрядної сітки при розрахунках. Команда INTO звичайно застосо-

вується після арифметичних команд.

Програмні переривання. Програмні переривання складають ши-

рокий клас переривань, що формуються за допомогою команди INT: од-

нобайтної команди INT3 або двобайтної команди INT type.

Переривання типу INT3 – це переривання контрольної точки. Конт-

рольною точкою називається будь-яке місце в програмі, де її виконан-

ня припиняється та викликається спеціальна програма обробки. Конт-

рольні точки використовуються при наладці програм для відображення

вмісту регістрів, елементів пам'яті та портів вводу/виводу в критичних

місцях програми. Команда INT3 має довжину 1 байт, що фізично дозво-

ляє замінити будь-яку команду програми. Процедура контрольної точки

після виконання своїх основних функцій відновлює виконання заміненої

команди.

Двобайтна команда INT type формує запит на переривання з номе-

ром вектора від 0 до 255. Переривання з номерами від INT 00h до INT

1Fh відносяться до базової системи програм вводу/виводу (BIOS) і до-

зволяють одержувати доступ безпосередньо до всіх функцій системи

вводу/виводу. Переривання DOS від INT 20h до INT FFh дозволяють

звертатися до ПК, використовуючи можливості операційної системи.

Кожне з переривань може містити безліч функцій.

Page 99: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

99

2.3. Організація переривань та їх процедури

Основні властивості системи переривань. Система переривань

повинна не тільки забезпечити обробку переривань, але й мати мож-

ливість продовжити виконання основної програми.

Під час роботи обчислювальної системи може виникнути ситуація,

коли надходить одночасно кілька запитів і система повинна мати ме-

ханізм, що дозволив би вирішити виниклий конфлікт. При одночасному

надходженні декількох запитів на переривання у дію вступає система

пріоритетів, яка має наступні рівні:

переривання при діленні на нуль (вищий рівень МП 8086);

переривання за командами INT 3, INT type, INTO;

переривання за входом NMI;

переривання за входом INTR;

переривання покрокового режиму.

Але будь-яке виконуване переривання не може бути припинено іншим

запитом на переривання навіть із більш високим пріоритетом.

Для організації роботи системи переривань розроблено наступний

механізм функціонування системи:

процесор приймає запит на переривання, проводить аналіз і перехо-

дить в режим обробки його;

прапори IF й TF скидаються в нуль, забороняючи тим самим на-

ступні переривання;

забезпечується збереження в стеці стану перерваної програми для

поновлення її виконання: адреси розташування наступної команди (базо-

вої адреси сегмента та зміщення), регістра прапорів;

забезпечується перехід на програму обробку переривань за адре-

сою з таблиці покажчиків векторів переривань;

відновлюються дані перерваної програми. Програма обробки зав-

жди завершується командою IRET (повернення з переривання), яка за-

вантажує зі стека регістри IP, CS й RF, передаючи цим керування в пере-

рвану програму;

відновлюються прапори переривань IF і прапор трасування TF, стає

можливим отримання нового запиту на переривання. Якщо в процесі об-

робки сигнал на вході INTR зовнішніми схемами не був переведений

у низький рівень, то відбувається повторна обробка того самого запиту.

Часові характеристики організації переривань. Розглядаючи

організацію переривань, можна виділити наступні часові етапи:

обробка запиту на переривання (час реакції системи);

запам'ятовування поточного стану системи;

Page 100: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

100

обробка переривання;

відновлення перерваного стану системи.

Часова характеристика організації переривання подана на рис. 2.6,

де tреакц

– час реакції системи на запит переривання; tзапам

– час запам'я-

товування поточного стану системи; tвик.пр

– час виконання програми пе-

реривання; tвідн

– час відновлення роботи перерваної програми. Час ре-

акції системи на запит переривання визначається часом між формуван-

ням запиту на переривання й призупиненням виконання працюючої на

даний момент програми.������������������������������������������������������������������������

������������������������������������������������������

������������������������������������������������������

���������������������������������������������������������

���������������������������������������������������������������������������������������������������������

tреакц tзапам tвик_пр tвідн

Поточна програма

Обслуговування запиту пристрою

Переривання/відновлення

роботи поточно ї програми

Рис. 2.6. Організація роботи системи переривання

tвик.пр

Крім часових характеристик системи переривання, можна виділити

ще поняття глибини переривань і насиченості системи.

Глибина переривань визначає максимальну кількість програм, які

можуть перервати одна одну. Природно, що пріоритети нових перери-

вань повинні бути вищими від попередніх переривань. Максимальна

кількість переривань програм звичайно визначається можливостями си-

стеми зберігання даних про перервані програми.

Насиченість системи переривань полягає в тому, що система не

встигає обслуговувати два сусідніх запити на переривання від одного

і того самого пристрою.

Припустимі моменти переривання програми визначаються систе-

мою та поділяються на два види:

переривання виконується після завершення команди й час реакції

визначається тривалістю виконуваної команди;

допускається переривання програми після будь-якого такту її вико-

нання, що дозволяє зменшити час реакції системи, однак при цьому зро-

стає кількість інформації, яку необхідно запам'ятовувати для перерваної

програми.

Переривання/відновлення

роботи поточної програми

Page 101: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

101

Питання для самоперевірки

1. Структура МП 8086.

2. Призначення складових частин МП 8086.

3. Регістри загального призначення МП 8086.

4. Регістр прапорів.

5. Призначення та використання прапорів.

6. Призначення та використання регістрів даних.

7. Призначення та використання вказівних та індексних регістрів.

8. Використання сегментних регістрів.

9. Сегментація пам'яті.

10. Організація роботи стека.

11. Принципи використання сегментної пам'яті.

12. Обчислення фізичної адреси пам'яті.

13. Моделі обробки запитів на переривання.

14. Система переривань мікропроцесора.

15. Таблиця векторів переривань.

16. Джерела переривань МП 8086.

17. Апаратні переривання.

18. Апаратно-програмні переривання.

19. Програмні переривання.

20. Часові характеристики організації переривань.

Список рекомендованої літератури

1. Абель П. Язык Ассемблера для IBM PC и программирования. –

М.: Высшая школа, 1992. – 447 с.

2. Каган Б.М. Электронные вычислительные машины и системы. –

М.: Энергоиздат, 1985. – 552 с.

3. Микропроцессорный комплект К1810. Структура, программиро-

вание, применение / Ю.М. Казаринов, В.Н. Номоконов, Г.С. Подкле-

тов и др. – М.: Высшая школа, 1990. – 269 с.

4. Новиков Ю.В., Скоробогатов П.К. Основы микропроцессорной

техники. – М.: ИНТУИТ.РУ ''Интернет-Университет Информационных

Технологий'', 2003. – 440 с.

5. Ровдо А.А. Микропроцессоры от 8086 до Pentium III Xeon и

AMD-K6-3. – М.: ДМК, 2000. – 592 с.

Page 102: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

102

Частина третя

ОСНОВИ ПРОГРАМУВАННЯ НА МОВІ АСЕМБЛЕР

Розділ 1. МОВА ПРОГРАМУВАННЯ АСЕМБЛЕР

1.1. Мова асемблер і її різновиди

Усі процеси в обчислювальної машини на найнижчому рівні (апа-

ратному) приводяться в дію тільки командами (інструкціями) машинної

мови. Мова асемблер – це символічне подання машинної мови, що точ-

но відображає всі її особливості. Існує безліч різновидів мови асемблер,

що розрізняються як зовнішнім виглядом програм, так і набором ідей,

відбиттям яких є ця мова. Для кожного типу процесора існує своя мова

асемблера.

Уявлення про мову асемблер у програмістів змінюється в міру роз-

витку обчислювальної техніки. Колись асемблер був мовою, без знання

якої не можна було змусити комп'ютер працювати. Згодом з'являлися

більш зручні засоби спілкування з комп'ютером, але асемблер продов-

жує розвиватися. Незалежно від мови написання програм їх коди пере-

творюються у машинні коди, зрозумілі процесору.

Сьогодні неможливо вивчити все про процесори й мови програму-

вання, але існують фундаментальні знання, на яких будуються обчислю-

вальні системи: принципи роботи процесора, його архітектура та мова

асемблер.

На якому б високому рівні не спілкувалися з процесором, все зво-

диться до одноманітної послідовності машинних команд, які перетворю-

ються в мікропрограми, що управляють роботою логічних схем проце-

сора на рівні сигналів, тим самим виконують управління різними підсис-

темами процесора. У цьому полягає так званий принцип мікропрограмо-

ваного керування.

Написання програм мовою асемблер є дуже трудомістким проце-

сом, який потребує великої уваги та практичного досвіду. Тому на асем-

блері пишуть в основному програми, які повинні забезпечити ефективну

роботу процесора з апаратною частиною, критичні за часом виконання

або витратами ділянок пам'яті програми. Згодом вони оформляються у

вигляді підпрограм і можуть входити до складу основних програм, напи-

саних на мовах високого рівня. Майже всі компілятори мов високого рівня

містять засоби зв'язку своїх модулів з модулями на асемблері або підтри-

мують вихід на рівень програмування асемблером.

Page 103: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

103

Існує кілька різновидів мови асемблер, які характеризуються за різни-

ми ознаками: однопрохідний та двопрохідний; крос-асемблер; резидент-

ний, метаасемблер та ін.

При трансляції програми в машинні коди інформація про всі змінні

збирається в спеціальну таблицю, де їм ставиться у відповідність їхні

фізичні адреси. При звертанні до цих змінних у програмі в машинних

кодах підставляється їхні фізичні адреси. Якщо звертання відбувається

до неописаної змінної, процесор не може продовжувати виконання про-

грами і формує повідомлення про помилку в роботі.

Стандартним рішенням цієї проблеми є двопрохідний асемблер, який

проводить трансляцію програми з мови асемблер у машинні коди в два

етапи. На першому етапі формується таблиця змінних з їхніми фізични-

ми адресами, а на другому – виконується трансляція програми в ма-

шинні коди процесора та заміна міток та інших змінних адресами розта-

шування їх у пам'яті. Це збільшує час трансляції програми, але дозволяє

уникнути звертання до невизначених міток.

Спроба збільшити швидкості виконання трансляції програм на мові

асемблер призвела до розробки однопрохідного асемблера з виконан-

ням трансляції програми в машинні коди за один прохід, здійснюючи од-

ночасно створення таблиці змінних з їхніми фізичними адресами та транс-

ляцію програми в машинні коди. При звертанні до змінної, яка не занесе-

на в таблицю, асемблер призупинить трансляцію програми та спробує

відшукати її. Якщо це не вдається, буде видано повідомлення про помил-

ку в роботі транслятора.

Резидентний асемблер призначений для роботи тільки на тій ма-

шині, на якій була виконана трансляція програми, тобто на машинах

з однотипними процесорами.

Програми, написані на крос-асемблері, не залежать від типу маши-

ни, що дозволяє писати програму на одній машині, а потім переносити

об'єктний модуль на іншу.

Метаасемблер містить механізм, що дозволяє вибирати тип про-

цесора, для якого розробляється програма. Це допомагає розробляти

програми для різноманітних процесорів.

У макроасемблері окремі групи команд, які часто повторюються,

можуть поєднуватися в блоки (макровизначення) з присвоєнням їм імен.

Для викликання такої групи команд у тексті програми вказують макро-

команду. При трансляції програми замість макрокоманди буде вставле-

но послідовність команд, описану даним макровизначенням.

Page 104: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

104

1.2. Етапи розробки програм мовою асемблер

Асемблер – це мова програмування, що дозволяє писати програми

на машинному рівні, використовуючи при цьому умовні скорочення –

мнемокоди, які транслюються асемблером у машинні команди. Послі-

довність створення програми мовою асемблер представлено на рис. 3.1.

Текстовий

редактор

Текстовий

редактор

А семблер

Tasm.exe

А семблер

Tasm.exe

Завантаження

TLink.exe

Завантаження

TLink.exe

Н аписання

початкової

програми

Н аписання

початкової

програми

***.asm

Створювані

файли

***. obj

***.exe,

***. com

П еретворення об'єктної

програми на виконавчу

Підключення бібл іотеки

стандартних процедур

Трансляція початкової

програми в машинні

коди

Трансляція початкової

програми в машинні

коди

Етапи розробки

програми

Перетворення

кодів програми

Рис. 3.1. Схема розробки програми мовою асемблер

Написання програми мовою асемблер відбувається в кілька етапів:

1-й етап – написання програми в текстовому редакторі за допо-

могою мнемокодів асемблера та присвоєння їй імені з розширенням

asm–***.asm;

2-й етап – переведення (трансляція) програми в машинні коди, яке

здійснюється за допомогою спеціальної програми TASM.EXE або

MASM.EXE. Для виконання трансляції можна використовувати ко-

мандний рядок наступного формату:

TASM [опції] ім'я_початкового_файла [, ім'я_об'єктного_файла]

[, ім'я_файла_листинга] [, ім'я_файла_перехресних_посилань]

.

Етапи розробки

програми

Перетворення

кодів програми

Створювані

файли

Текстовий

редактор

Асемблер

Tasm.exe

Компонувальник

TLink.exe

Написання початкової

програми

Трансляція початкової

програми в машинні коди

Перетворення об'єктної

програми на виконавчу.

Підключення бібліотеки

стандартних процедур.

***.asm

***.obj

***.exe,

***.com

Page 105: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

105

Інформація, яка задана в квадратних дужках не є обов'язковою для

задавання. Якщо не задати імена файлів, показаних в квадратних дуж-

ках, буде сформовано відповідні файли з іменем початкового файла.

У результаті роботи транслятора створюється програма в об'єктних ко-

дах з розширенням obj (***.obj), файл лістингу (***.lst) і файл перехрес-

них посилань (***.xrf).

Об'єктний файл містить програму в кодах команд ЕОМ, а також

дані для корекції адресних частин команд при об'єднанні декількох об'-

єктних файлів в одну програму.

Файл лістингу містить результати трансляції кожного рядка програ-

ми мовою асемблер, сам рядок програми та діагностичні повідомлення.

Файл перехресних посилань містить перелік рядків програми мовою

асемблер, у яких використовуються ідентифікатори. Ця інформація ко-

рисна при розробці значних за розміром програм для виправлення в них

помилок. Трансляція виконується за допомогою внутрішнього перекоду-

вання та може здійснюватися за один або два проходи початкового тек-

сту. У процесі трансляції відбувається створення таблиці міток і при-

своєння міткам адрес розташування. При виникненні в програмі звер-

тання до міток замість міток підставляються їхні адреси;

3-й етап створення виконавчої (переміщуваної) програми, що

здійснюється за допомогою програми редактора зв'язків (компонуваль-

ник, лінкувальник) TLINK.EXE. Для створення виконавчої програми можна

використовувати командний рядок такого формату:

TLINK [опції] список об'єктних файлів

[, ім'я_завантажувального_модуля] [, ім'я_файла_карти]

[, ім'я_файла_бібліотеки]

Вхідними файлами редактора зв'язків є об'єктні файли, які можуть

розташовуватися також у бібліотечних. Список об'єктних файлів скла-

дається з компонованих файлів з розширенням ***.obj. Ці файли можуть

бути розділені пропусками або знаком "+". Якщо не вказати ім'я заванта-

жувального модуля, то буде створено завантажувальний файл з першим

іменем зі списку об'єктних файлів типу ***.exe. Завантажувальний файл

можна запускати на виконання. Ім'я файла карти має розширення ***.map

і містить дані про розподіл пам'яті: розміри програми в цілому, адреси

завантаження та розміри сегментів. У полі з іменем файлу бібліотеки

вказується шлях до бібліотечних файлів і об'єктних модулів, які потрібні

для компонування програми.

Page 106: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

106

Розділ 2. ФОРМАТИ КОМАНД І МЕТОДИ АДРЕСАЦІЇ

2.1. Формати команд мікропроцесора 8086

Для виконання певних дій процесору необхідно задати програму, що

описують порядок цих дій. Незалежно від обраної мови програмування,

вихідна програма повинна бути перетворена програмою транслятором

у послідовність команд (кодів), зрозумілих на машинному рівні.

Структура машинних команд залежить від застосовуваного проце-

сора. Однак можна виділити ряд основних принципів, які властиві їхній

організації. Для організації роботи процесор повинен мати наступну інфор-

мацію:

дію або операцію, яку необхідно виконати;

розташування операндів, над якими необхідно виконати дії;

адреса розміщення результату, отриманого при виконанні операції.

Знаючи принципи побудови команд для одного процесора, можна

розібратися зі структурою машинних команд інших процесорів.

У МП 8086 використовуються команди змінної довжини від 1 до 6

байт. Довжина кожної команди визначена розроблювачами з урахуван-

ням імовірності її появи. Більш короткі команди мають менший час ви-

бірки їх із пам'яті. Команди, які зустрічаються часто, мають короткі фор-

мати: одно-, дво- та трибайтні. Рідше використовуються команди, які

мають більший формат: чотири-, п'яти- та шестибайтні.

У команді можна виділити кілька полів:

поле коду операції (КОП), що вказує процесору дії, які необхідно ви-

конати відповідно до отриманої машиною команди;

поле даних або адреса розташування операндів, над якими необхід-

но виконати дії. Звичайно тут можуть бути зазначені безпосередньо опе-

ранди, адреси розташування або закон, що дозволяє їх знайти;

поле спеціальних покажчиків, що уточнюють режими виконання

команд. Наприклад, визначення формату типу даних (байт або слово),

уточнення місцезнаходження операндів.

Команди в більшості випадків бувають таких форматів:

однобайтні – КОП (код операції);

двобайтні – КОП та один з трьох компонентів: постбайт, адреса

порту вводу/виводу, 8-розрядний операнд або зміщення адреси;

трибайтні – КОП, постбайт і 8-розрядний операнд або зміщення

адреси;

чотирибайтні – КОП, постбайт і 16-розрядний операнд або зміщен-

ня адреси;

Page 107: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

107

пятибайтні – КОП, постбайт і 16-розрядний зміщення адреси та 8-

розрядний операнд;

шестибайтні – КОП, постбайт і 16-розрядний зміщення адреси та

16-розрядний операнд.

Команди розташовуються окремими байтами в елементах пам'яті з

послідовно зростаючими адресами. Вибираються вони з пам'яті слова-

ми (по два байти) і завантажуються в регістр черги команд у пристрої

сполучення з шиною.

Запам'ятати двійкові коди машинних команд і записати їх без поми-

лок дуже важко. У мові асемблер машинна команда записується у ви-

гляді мнемокодів, що значно полегшує їхнє запам'ятовування та написан-

ня програм. При трансляції програм з мови асемблер у машинні коди,

кожній команді програми відповідає тільки одна машинна команда. Якщо

необхідно розглянути програму в машинних кодах, то можна подивитися

лістинг нашої програми. Для цього потрібно провести трансляцію про-

грами з розширенням ***.asm, задавши ключ /L:

Tasm.exe Pr1.asm /L

Перший байт команди завжди містить код операції. Причому в низці

команд нульовий розряд (поле W) несе інформацію про довжину опе-

рандів (W = 0 – байт, W = 1 – слово), а перший розряд (поле d) визначає

знаходження полів джерела і/або приймача інформації.

Другий байт для більшості команд може бути трьох типів:

постбайт, що визначає звідки брати операнди і/або куди направляти

результат операції. У деяких командах розряди 5–3 постбайта (поле Reg)

можуть використовуватися для розширення коду операції;

пряма адреса порту вводу/виводу у двобайтних командах задаєть-

ся в діапазоні 00h–0FFh;

восьмирозрядне зміщення у командах умовної передачі керування,

що визначає відносну адресу переходу до даних або 8-розрядний опе-

ранд.

Наступні байти у довгих командах містять 8- або 16-розрядні зміщен-

ня (displacement, dis) і/або безпосередній операнд, також 8- або 16-роз-

рядний. Якщо в команді присутні зміщення і безпосередній операнд, то

спочатку розміщається зміщення, а потім операнд. Для 16-розрядного

зміщення і для 16-розрядного операнда завжди першим указується мо-

лодший байт, а другим – старший (адреса старшого байта на 1 більше

адреси молодшого).

Восьмирозрядне зміщення при формуванні адреси розширюється до

16-розрядного, заповнюючи старший байт значенням старшого (знако-

Page 108: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

108

вого) розряду байта зміщення. Наприклад, якщо задано байт зміщен-

ня 7Eh, то він розширюється до значення 007Eh, якщо задано байт 0А3h,

то він розширюється до 0FFA3h. Зміщення трактується МП як ціле

двійкове число зі знаком у додатковому коді, що лежить у межах від

–128 до +127 (для восьмирозрядного зміщення) або від –32768 до

+32767 (для 16-розрядного зміщення).

2.2. Формат двооперандної команди мікропроцесора 8086

Широко використовуються команди з використанням постбайта, який

визначає розміщення операндів. Структура перших двох байт команд

дозволяє докладно розглянути призначення окремих біт у командах.

Їх структура й організація даних подана на рис. 3.2.

Перший байт завжди містить код виконуваної операції (КОП). Код

операції – це обов'язковий елемент, що описує операцію, виконувану ко-

мандою. Наступні поля машинної команди визначають місце розташу-

вання операндів, які беруть участь в операції, й особливості їхнього вико-

ристання. Розгляд цих полів пов'язаний зі способами задавання операндів

у машинній команді. У деяких випадках у першому байті можуть пере-

бувати додаткові покажчики, що уточнюють типи інформації та місце-

знаходження операндів:

0-й розряд 1-го байта містить ознаку W, що визначає тип застосову-

ваних даних, регістри й обсяг виділеної пам'яті. При W = 0 дані містять

один байт і записуються у байтові регістри, наприклад AL, AH, DL, DH

та ін. При W = 1 дані містять слово, для їх запису необхідно використову-

вати повні регістри AX, CX, DX, BX;

1-й розряд 1-го байта містить ознаку напрямку переміщення даних

d (direction), які описуються полями Reg і Reg/M другого байта. При

d = 0 дані переміщаються з області, визначеної полем Reg, в область,

визначену полем Reg/M, а при d = 1 – навпаки.

Другий байт містить три поля: трирозрядне поле Reg, трирозрядне

поле Reg/M та дворозрядний модифікатор mod.

Трирозрядне поле Reg разом з полем W першого байта задає

8-розрядні (при W = 0) або 16-розрядні (при W = 1) регістри. Наприклад,

Reg = 110 і W = 1 визначають регістр SI, а той же код у полі Reg при

W = 0 указує на регістр DH (див. рис. 3.2).

Трирозрядне поле Reg/M використовується разом з полем mod

і визначає регістр, у якому перебувають дані, або алгоритм обчис-

лення ефективної (фізичної) адреси знаходження інформації в пам'яті.

Page 109: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

109

Reg та Reg/M – поля, що визначають розташування операндів:

регістр; регістр або пам’ять

mod – визначення методу адресації та розміру зміщення dis

W= 1

d = 0

d = 1

11

W = 0 W = 1

Значення поля modПоле

Reg/m

[BX]+[SI]+dis16

[BX]+[DI]+dis16

[BP]+[SI]+dis16

[BP]+[DI]+dis16

[DI]+dis16

[SI]+dis16

[BP]+ dis16

[BX]+dis16

[BX]+[SI]+dis8

[BX]+[DI]+dis8

[BP]+[DI]+dis8

[BP]+[SI]+dis8

[SI]+dis8

[DI]+dis8

[BP]+dis8

[BX]+dis 8

[BX]+[SI]

[BX]+[DI]

[BP]+[SI]

[BP]+[DI]

[DI]

[SI]

[BX]

dis16

100100

AL AX

CL CX

DL DX

BL BX

AH

CH

DH

BH

SP

BP

SI

DI

000

001

010

011

100

101

110

111

Reg/mRegmodWdКОП

000

001

010

011

100

101

110

111

W = 0

AL AX

CL CX

DL DX

BL BX

AH

CH

DH

BH

SP

BP

SI

DI

КОП – Код виконувано ї

ОПерац ії

d – признак напрямку

передачі:

d = 0 – з Reg в Reg/M

d = 1 – з Reg/M в Reg

W – визнача є тип

операндів байт/слово (W = 0/1)

Рис. 3.2. Структура двооперандної команди й організація доступу до даних

Якщо значення поля mod = 11, то поле Reg/M визначає регістри анало-

гічно полю Reg.

Якщо дані знаходяться в пам'яті, то для формування фізичної адре-

си їх розташування використовують базовий та індексний регістри, а та-

кож значення зміщення. Дворозрядне поле mod може визначати кількість

байт, що займає адреса операнда у команді. Поле mod використовується

Page 110: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

110

разом з полем Reg/M і вказує на спосіб формування виконавчої адреси

ЕА та спосіб модифікації адреси операнда за допомогою зміщення. При-

чому поле mod визначає значення зміщення, який використовується при

формуванні адреси операнда (00 – без зміщення, 01 – значення зміщення

займає байт, 10 – слово).

Наприклад, якщо mod = 00, це означає, що поле зміщення у команді

відсутнє, і адреса операнда визначається вмістом базового і/або індекс-

ного регістрів. Які саме регістри будуть використовуватися для обчис-

лення ефективної адреси, визначається значенням поля Reg/M. Значен-

ня Reg/M = 110 при mod = 00 вказує на застосування в команді без-

посередньо операнда.

Значення mod = 01 означає, що поле зміщення у команді присутнє,

займає один байт і модифікує вміст базового і/або індексного регістрів.

Якщо mod = 10, це означає, що поле зміщення у команді присутнє,

займає два байти та модифікує вміст базового і/або індексного регістрів.

Коли mod = 11, це означає, що операндів у пам'яті немає, вони пере-

бувають у регістрах. Вибір адреси джерела інформації та приймача за-

лежить від вмісту поля d першого байта команди. При d = 0 поле Reg

задає джерело, а Reg/M – приймач. Якщо d = 1, навпаки, поле Reg задає

приймач, а Reg/M – джерело інформації.

2.3. Обчислення виконавчої та фізичної адрес

За допомогою постбайта визначаються два різновиди адреси зна-

ходження операндів: у регістрах і в пам'яті. Інформація в пам'яті розмі-

щується в сегментах, а її адреса визначається як зміщення всередині

сегмента. Поле Reg/M визначає виконавчу адресу ЕА розташування

інформації в пам'яті. Виконавча адреса ЕА (effective address – ефектив-

на адреса) по суті є 8- або 16-розрядним зміщенням у сегменті пам'яті

(даних, стека, екстрасегмента). Якщо при обчисленні ЕА виникає пере-

несення, то воно ігнорується і адреса завжди виявляється в межах одно-

го сегмента. Фізична адреса (ФА) розміщення інформації складається

з адреси сегмента та зміщення в середині сегмента. Адреса сегмента

обчислюється як вміст відповідного сегментного регістра, помноженого

на 16. Схема формування виконавчої та фізичної адрес представлена

на рис. 3.3.

Розглянемо приклад. Нехай DS містить код 1002h, тобто початок

сегмента даних розташовано в пам'яті за адресою 10020h. У регістрі

бази ВХ записано код 8005h. У постбайті команди поле Reg/M = 111,

отже, виконавча адреса розраховується як значення регістра ВХ плюс

Page 111: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

111

BX

BP

DI

SI

dis

CS

DS

SS

ES

*10h

Виконавча

адреса

Ф ізична

адреса

зміщення. Розрахунок адреси знаходження інформації залежно від зна-

чень поля mod можна провести трьома способами.

Рис. 3.3. Схема формування виконавчої та фізичної адрес

I спосіб. Поле mod = 00. Отже, зміщення відсутнє.

Виконавча адреса дорівнює значенню регістра ВХ, тобто 8005h, фізич-

на адреса складається з адреси сегмента та зміщення:

ФА = 10020h + 8005h = 18025h.

II спосіб. Поле mod = 01, зміщення дорівнює 0FFh. Тоді виконавча

адреса дорівнює сумі вмісту регістра ВХ та зміщення:

ЕА = (ВХ) + dis = 8005h + 0FFh = 8104h.

Фізична адреса в цьому випадку

ФА = (DS)*10h + (BX) + dis = 1002h*10h + 8104h =

= 10020h + 8104h = 18104h.

III спосіб. Поле mod = 10, а зміщення – 0C000h. У даному випадку

при обчисленні виконавчої адреси одержимо наступний результат:

ЕА = (BS) + dis = 8005h + 0C000h = 4005h.

Це пов'язано з тим, що при додаванні 0C000h + 8005h = 14005h вий-

Page 112: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

112

демо за межі розміру сегмента і старший розряд просто пропаде. Отже,

фізична адреса

ФА = 10020h + 4005h = 14025h.

2.4. Методи адресації операндів мікропроцесора 8086

Методи адресації – це правила, за якими визначаються безпосеред-

ньо операнди, їхнє місцезнаходження, а також адреси розміщення ре-

зультатів обчислень.

Вибір методів адресації багато в чому залежить від місця розташу-

вання даних. Крім того, дуже часто адреса може задаватися неявно за

замовчуванням, формуючи фізичну адресу на мікропрограмному рівні.

У цьому випадку команда явно не містить операндів. Залежно від вико-

нуваної команди асемблер відповідно до своїх алгоритмів встановлює

адреси розташування операндів і запису результатів.

Команди можуть зовсім не мати операндів, мати один або два опе-

ранди. Більшість команд вимагають двох операндів. Вони можуть роз-

міщуватися в регістрах, пам'яті або безпосередньо в команді. Часто

в команді операнди можуть не задаватися явно, але асемблер знає їх

місце знаходження.

Якщо в команді зазначено два операнди, то в процесі виконання опе-

рації у більшості випадків замість першого операнда записується ре-

зультат обчислень, другий – залишається незмінним. Перший операнд

називається приймачем, а другий – джерелом. Якщо операнд у команді

взято у квадратні дужки, то вміст квадратних дужок визначає адресу

розташування операнда. Такий вид адресації називається непрямим.

У машинній команді з двома операндами можливі наступні сполу-

чення операндів: регістр–регістр; регістр–пам'ять; пам'ять–регістр; без-

посередній операнд–регістр; безпосередній операнд–пам'ять.

У даного правила є винятки, які стосуються таких команд:

роботи з ланцюжками, які можуть переміщати дані з пам'яті в па-

м'ять;

роботи зі стеком, які можуть переносити дані з пам'яті в стек, що є

однією з форм організації роботи пам'яті;

множення або ділення, які крім операнда, зазначеного в команді, ви-

користовують ще й другий, неявний операнд.

В описанні МП 8086 указуються 24 види адресації, хоча вони багато

в чому схожі між собою. Можна виділити кілька основних груп адресації,

які застосовуються в асемблері: регістрова, безпосередня, пряма, не-

пряма.

Page 113: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

113

При регістровій адресації джерело та приймач знаходяться в ре-

гістрах, тобто, операнди – це вміст регістрів. Регістрові операнди вказу-

ються іменами регістрів. У командах використовуються регістри з од-

наковим типом операндів: байт або слово. Дана адресація часто засто-

совується в командах пересилки даних, яка має наступну структуру: mov

операнд 1, операнд 2. У процесі виконання команди змінюється значення

операнда 1, а операнд 2 залишається незмінним. В операціях з регістро-

вою адресацією використовуються:

16-розрядні регістри AX, BX, CX, DX, SI, DI, SP, BP;

8-розрядні регістри AH, AL, BH, BL, CH, CL, DH, DL;

сегментні регістри CS, DS, SS, ES.

Наприклад, пересилання вмісту регістра BX в AX і AH в AL буде

представлено такими командами:

mov ax, bx

mov al, ah

При безпосередній адресації операнд перебуває безпосередньо в

коді команди, тобто є її частиною. Для зберігання такого операнда в ко-

манді виділяється поле довжиною до 16 біт. Безпосередній операнд може

бути тільки другим операндом (джерелом). Операнд приймач може пе-

ребувати або в пам'яті, або в регістрі.

Наприклад:

mov al, 5ah – константа 5Ah пересилається в регістр AL;

add z, 05h – змінна z, яка знаходиться в пам'яті, збільшується на 5;

mov s1, 25h – у змінну s1 пересилається константа 25h.

Пряма адресація або адресація по зміщенню є найпростішим ви-

дом адресації операндів в пам'яті, при якій ефективна адреса вказується

в самій команді, однозначно визначаючи байт або слово, що розташовані

в сегментах даних. Пряма адресація використовується в команді безу-

мовного переходу JMP, в якій мітка визначає нову адресу продовження

виконання програми. Це переміщення можливе тільки в межах даного

сегмента.

Наприклад:

jmp m1 ; перехід на мітку m1

add al, 5

mov bl, al

m1: mul cx

В даному прикладі по команді JMP m1 буде пропущено дві команди

і програма перейде на виконання команди, позначеної міткою m1. У фор-

Page 114: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

114

муванні нової адреси використовується значення покажчика адреси ко-

манд IP, який містить адресу наступної команди по порядку, та величини

зміщення від неї.

Якщо відомо сегмент розміщення операнда і величина зміщення до

нього, то у команді можна вказати повну адресу. У команді вказується

сегмент розміщення операнда та значення зміщення, яке задається без-

посередньо або за допомогою змінної. Якщо задано змінну і не вказано

сегмент, то програма автоматично звертається до сегмента даних DS.

Наприклад:

dat segment

a1 db 35h,47h,38h,31h

db 32h,44h,55h,66h

a2 db 'Завдання №1'

a3 dw 77h

dat ends

cod_1 segment

assume ds:dat, es:dat, cs:cod_1 ; сегменти DS і ES мають одну адресу

start:

mov ax, dat

mov ds, ax

mov es, ax

; в задані регістри будуть записуватися операнди із сегмента DS

; відповідно до вказаної величини зміщення в команді.

; Відлік зміщення починається з нульової адреси

mov cl, ds:0002 ; cl = 38h, записано 3-й байт змінної a1

; пересилається слово починаючи з 6-го байта, міняючи місцями

; старший і молодший байти при записуванні в регістр

mov ax, [ds:0005] ; ax = 5544h,

mov bh, es:a1 ; bh = 35h, 1-й байт операнда a1

mov bl, es:a2+3 ; bl = 0A4h, 4-й байт операнда a2

mov dx, a3 ; dx = 0077h, операнд a3

cod_1 ends

Непряма адресація не визначає адресу розміщення інформації,

а лише вказує на її складові частини. У самій команді може перебувати

лише частина ефективної адреси, а інші її компоненти перебувають

у регістрах, на які вказує своїм вмістом поле Reg/M.

Непряма адресація має декілька різновидів: непряма базова адре-

сація, інша її назва – регістрова непряма адресація; непряма базова

Page 115: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

115

адресація із зміщенням; непряма індексна адресація; непряма індексна

адресація із зміщення; непряма базово-індексна адресація; непряма ба-

зово-індексна адресація із зміщенням.

Ці моделі непрямої адресації різняться між собою вибором регі-

стрів, в яких знаходяться складові частини адреси, їх кількістю та наяв-

ністю або відсутністю зміщення в формуванні адреси. Можливі варіанти

використання регістрів у формуванні адреси наочно показано на рис. 3.3.

Кожен з регістрів, який використовується при формуванні адреси,

має свої особливості, що дозволяє одержувати різні методи доступу до

даних. Наприклад, індексні регістри SI та DI при використанні з коман-

дами обробки рядків змінюють свій вміст автоматично, що дозволяє

організувати динамічну зміну адрес. Сегментна складова адреси знахо-

диться в регістрах CS та ES відповідно. Базові регістри BP та SP дозво-

ляють виділяти окремі масиви даних для їх обробки, які знаходяться

у стеці.

Позначаючи непряму адресацію, використовують квадратні дужки

[ ], значення в яких є адресою розміщення операнда.

Непряма базова (регістрова) адресація для позначення адрес опе-

рандів використовує регістри загального призначення. Для формування

адреси бази використовуються регістри BX, BP, SI та DI.

Наприклад, в команді mov ax, [bx] регістр BX містить адресу роз-

міщення операнда всередині сегмента для пересилання його в регістр

AX. Можливість зміни вмісту BX дозволяє легко обробляти послідов-

ності даних, які знаходяться в пам'яті: таблиць, масивів та ін.

Непряма базова (регістрова) адресація із зміщенням викорис-

товується для доступу до окремих баз даних, розміщених у сегменті

пам'яті. Така адресація може бути представлена в загальному вигляді

mov reg1,[reg2]+const або mov [reg1]+const,reg2. Регістри, які знаходять-

ся в квадратних дужках, містять адреси виділених даних, а величина

зміщення СONST уточнює розміщення операндів у виділеній області.

Наприклад:

title pr2

dat segment

a1 db 'Завдання №2'

a2 db 30h,31h,32h,33h,34h

db 35h,36h,37h,38h,39h

a3 db 10 dup(?),13,'$'

dat ends

Page 116: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

116

cod_1 segment

assume ds:dat, cs:cod_1

start:

mov ax, dat

mov ds, ax

mov bx, 000Bh ; в регістр BX заноситься адреса змінної a2

; в регістри AL, AH, CL, CH послідовно заносяться елементи змінної

; a2 з різними представленнями зміщення, які є рівноцінними

mov al, [bx] ; значення зміщення дорівнює 0

mov ah, [bx+1] ; значення зміщення дорівнює 1

mov cl, 2[bx] ; значення зміщення дорівнює 2

mov ch, [bx]+3 ; значення зміщення дорівнює 3

; в регістр bx заноситься адреса зміщення змінної a3

mov bx, offset a3

; в змінну a3 переносяться прочитані дані у зворотному порядку

mov [bx], ch

mov 1[bx], cl

mov [bx]+2, ah

mov [bx+3], al

; змінна a3 виводиться на екран монітора

mov ah, 9

mov dx, offset a3

int 21h

; завершення роботи асемблера

mov ah, 4ch

int 21h

cod_1 ends

end start

Непряма індексна адресація із зміщенням та без зміщення ви-

користовує для формування ефективної адреси індексні регістри та

зміщення, що значно полегшує роботу з масивами даних.

Наприклад:

mov ax, [si]

mov ax, [si+2]

mov ax, [si]+2

Непряма базово-індексна адресація має більш складну схему фор-

мування адреси. Ефективна адреса формується як сума вмісту базово-

го й індексного регістрів. Для визначення адреси в командах може вико-

Page 117: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

117

ристовуватися також зміщення. Можливі варіанти застосовування базо-

во-індексної адресації представлені на рис. 3.2. Використання двох

регістрів розширює можливості доступу до даних.

Наприклад:

mov ax, [si+bx]

mov ax, [si+5]+[bx]

У першому випадку ефективна адреса другого операнда форму-

ється з двох компонентів, адреси яких знаходяться в регістрах SI та BX.

У другому – команда пересилає в регістр AX слово, адреса якого обчис-

люється як сума вмістів регістрів SI та BX і константи 5.

Розділ 3. ОРГАНІЗАЦІЯ ПРОГРАМИ МОВОЮ АСЕМБЛЕР

3.1. Елементи мови асемблер

Програма мовою асемблер є послідовністю операторів, що опису-

ють виконувані операції. Елементами мови асемблер можуть бути ко-

манди, макрокоманди, директиви або коментарі.

Команди являють собою символічні аналоги машинних команд у

вигляді мнемокодів, які керують роботою процесора. У процесі транс-

ляції команди асемблера перетворюються у відповідні машинні команди

мікропроцесора. У більшості випадків одній команді асемблера відпові-

дає одна машинна команда.

Директиви або псевдооператори не перетворюються на команди, а

організують роботу асемблера та визначають вплив на команди й дані.

Псевдооператори визначають сегменти пам'яті, зовнішні посилання, дані,

моделі формування програми та ін.

Макрокоманди являють собою послідовність символів, які заміща-

ються в програмі іншою послідовністю під час трансляції.

Для того щоб транслятор асемблера міг розпізнати елементи мови

асемблера, вони повинні формуватися за певними синтаксичними прави-

лами. На практиці часто використовуються синтаксичні діаграми, що

відповідають логіці роботи транслятора при розборі вхідних кодів про-

грами.

При роботі із синтаксичними діаграмами необхідно пройти шлях від

входу діаграми до її виходу. Якщо такий шлях існує, то конструкція син-

таксично правильна й компілятор її прийме. Основою синтаксичних діа-

грам служать лексеми, що являють собою нероздільні послідовності до-

Page 118: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

118

пустимих символів мови, які розуміє транслятор. Лексемами є мітки,

коди операцій, імена змінних, цілі числа, послідовність рядків символів,

які взяті в лапки.

При написанні програми використовуються об'єкти, на які чинять

дію команди та директиви. Такі об'єкти називаються операндами та

можуть бути деякими значеннями, регістрами або елементами пам'яті.

Припустимими символами при написанні тексту програм є:

всі латинські букви: A–Z, a–z. При цьому великі та малі літери

вважаються еквівалентними;

цифри від 0 до 9;

знаки @, $, _, &;

розділові та математичні знаки , . [ ] ( ) < > { } + / * % ! ' " ? \ = # ^ –

(мінус).

3.2. Формат команд і псевдооператорів мови асемблер

Синтаксична конструкція команди мовою асемблер може мати до

чотирьох полів і представлена наступним виразом:

[Мітка:] Мнемокод [Операнд_1] [,Операнд_2] [;Коментар]

Синтаксична конструкція псевдооператора мовою асемблер може

мати до чотирьох полів і представлена таким виразом:

[Ідентифікатор] Псевдооператор [Операнд_1] [,Операнд_2]

[;Коментар]

Обов'язковими є поля мнемокоду та псевдооператора. Інші поля

необов'язкові та їх використання залежить від будови окремих команд

і директив.

Поле мітки не є обов'язковим і служить для присвоєння команді

асемблера імені, по якому можна звертатися до даної команди. Мітка

може містити до 32 символів й завжди закінчується двокрапкою. Припу-

стимими символами при написанні мітки є:

всі латинські букви: A–Z, a–z. При цьому великі та малі літери вва-

жаються еквівалентними;

цифри від 0 до 9;

знаки ?, @, _, крапка, $.

Під час написання мітки необхідно дотримуватися наступних

правил:

мітка не може починатися із цифри;

не можна застосовувати пробіл в імені мітки;

якщо застосовується крапка, вона повинна бути першою в імені мітки;

не можна застосовувати зарезервовані слова, назви регістрів.

Page 119: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

119

Поле мнемокоду містить умовні позначки команди й може містити

від двох до шести символів. Асемблер містить внутрішню таблицю, що

здійснює трансляцію мнемокоду в машинну команду. Крім того, мнемо-

код може визначати наявність операндів, їхню кількість і тип.

Поле операндів є частиною команди асемблера, що позначає об'єкт,

над яким виконуються дії. Операнди асемблера описуються виразом із

числовими та текстовими константами, мітками й ідентифікаторами

змінних з використанням знаків математичних операцій і деяких заре-

зервованих слів. Операнди відокремлюються від мнемокоду пробілом, а

між собою – комами. Перший операнд визначає приймач даних, а другий

– передавач або джерело даних. Дуже часто в процесі виконання опе-

рацій вміст приймача змінюється, а передавача – залишається незмінним.

Поле коментарів містить опис програми або окремих її елементів і

допомагає розбиратися з роботою програми. Поле коментарів відокрем-

люється від попереднього поля мінімум одним пробілом і починається

крапкою з комою. Коментар ігнорується асемблером при трансляції, але

залишається в лістингу програми. Коментар може займати окремо цілий

рядок.

Поле ідентифікаторів застосовується в псевдооператорах і має

призначення, аналогічне полю міток у командах. На відміну від міток

після ідентифікаторів не ставиться двокрапка.

Поле псевдооператорів містить умовні позначки директив керу-

вання роботою асемблера.

3.3. Структура програми

У більшості програм, які написані на мові асемблер, можна виділити

основні частини: заголовок, дані, коди програми, закінчення (рис. 3.4).

Заголовок. На початку програми за допомогою псевдооператора

Title можна задати ім'я програми, яке буде друкуватися на кожній сторінці

лістингу. Наприклад: Title "Програма 1". В області заголовка може зна-

ходитися інформація про різновидність асемблера, моделі пам'яті, резер-

вування простору пам'яті для стека та ін.

Область даних та тіло програми можна задати за допомогою

директив сегментації. Процесор у режимі 8086 може одночасно працю-

вати із чотирма сегментними регістрами, створюючи відповідні області

пам'яті: сегмент коду, сегмент стека, сегмент даних, додатковий сег-

мент даних. Сегментація може бути пов'язана з концепцією модульного

програмування, уніфікацією оформлення об'єктних модулів, які створю-

ються компілятором.

Page 120: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

120

Закінчення. Завершує програму на мові асемблера директива END,

яка вказує на кінець тексту програми та на мітку, з якої потрібно розпо-

чати виконання програми. Будь-який текст після закінчення програми

ігнорується.

Наприклад:

end start ; кінець програми. Розпочати програму з мітки START

Title ‘Програма 1’

Dat1 SEGMENT

Область даних

Dat1 ENDS

Cod1 SEGMENT

Assume DS:Dat1, CS:Cod1

Start:

Тіло програми

Cod1 ENDS

END Start

Заголовок

Область

даних

Коди

програми

Закінчення

Рис. 3.4. Структура програми на мові асемблер

3.4. Псевдооператори мови асемблер

Основним елементом побудови програми на мові асемблер є сег-

мент пам'яті, який складається з відкриваючого рядка, тіла сегмента та

закриваючого рядка. Відкриваючий рядок містить ім'я сегмента, само

слово SEGMENT і додаткові параметри. Закриваючий рядок містить ім'я

сегмента та директиву його закриття ENDS. Синтаксис описання сег-

мента на асемблері має наступну структуру:

Ім'я_сегмента Segment [вирівнювання] [комбінування]

[клас сегмента]

……………….

Тіло сегмента

………………

Ім'я_сегмента ENDS

Область даних

Заголовок

Коди програми

Закінчення

Область даних

Тіло програми

Page 121: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

121

Додаткові параметри, які представлені в квадратних дужках, допо-

магають прискорити роботу асемблера, але не є обов'язковими для ви-

користання.

Атрибут вирівнювання сегмента повідомляє компонувальнику про

необхідність забезпечити розміщення початку сегмента в заданій об-

ласті, що дозволить прискорити доступ до даних у процесорах 80х86.

Атрибут вирівнювання сегмента набирає наступні значення: BYTE,

WORD, DWORD, PARA, PAGE, MEMPAGE.

При вирівнюванні BYTE сегмент починається з будь-якої адреси

пам'яті. Вирівнювання WORD, DWORD, PARA означає, що адреси сег-

ментів кратні двом, чотирьом, шістнадцяти відповідно (вирівнювання по

границі слова, подвійного слова та параграфа). Вирівнювання PAGE,

MEMPAGE означає, що адреси сегментів починаються з адрес, які кратні

256 байт та 4 Кбайт. У даному випадку вирівнювання виконується по

границям сторінок на 256 байт та 4 Кбайт. За замовчуванням тип вирів-

нювання має значення PARA.

Атрибут комбінування сегментів повідомляє компонувальнику, як

потрібно комбінувати сегменти різних модулів, які мають однакові іме-

на. Значеннями атрибута комбінування сегмента можуть бути: PRIVATE,

PUBLIC, COMMON, AT xxx та STACK.

PRIVATE не дозволяє об'єднувати одноіменні сегменти, які знахо-

дяться в різних модулях.

PUBLIC керує об'єднанням усіх одноіменних сегментів в один.

Усі адреси об'єктів будуть обчислюватися відносно початку нового сег-

мента.

COMMON розташовує всі одноіменні сегменти в єдиному просторі

за однією адресою. Дані сегменти будуть перекриватися та спільно ви-

користовувати пам'ять, утворюючи розподілену ділянку пам'яті.

AT xxx розташовує сегмент за абсолютною адресою, заданою xxx.

Адреси змінних будуть обчислюватися відповідно до нової адреси роз-

ташування сегмента. Фізично сегменти будуть розташовані за фіксова-

ними адресами пам'яті.

STACK є ознакою створення сегмента стека. Якщо не зазначено

жодного сегмента стека, компонувальник видасть попередження, що

сегмент стека не знайдено.

За замовчуванням атрибут комбінування приймає значення

PRIVATE.

Атрибут класу сегмента записується в лапки і визначає для ком-

понувальника порядок підключення сегментів при формуванні про-

Page 122: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

122

грами з сегментів декількох модулів. Компонувальник поєднує всі сег-

менти з однаковим іменем класу і присвоює це ім'я новому сегменту.

Наприклад, якщо всім сегментам з програми присвоїти клас "CODE", то

буде створено єдиний сегмент із цим іменем.

Функціональне призначення сегментів. Директиви сегментації не

містять інформації про функціональне призначення сегментів: сегменти

коду, даних або стека. Для вказування транслятору про такі призначен-

ня застосовують спеціальну директиву ASSUME, яка повідомляє про

прив'язку сегментів до відповідних сегментних регістрів. Директива

ASSUME має наступні формати:

ASSUME nothing

та

ASSUME ім'я_сегментного_регістра : ім'я_сегмента,

ім'я_сегментного_регістра : ім'я_сегмента, …

Якщо в якості операнда використовується тільки ключове слово

NOTHING, то попередні призначення всіх сегментних регістрів анулю-

ються. Якщо ключове слово NOTHING застосовується замість імені

сегмента, то у цьому випадку буде розірвано зв'язок між сегментом

і відповідним сегментним регістром.

Для простих програм, що містять по одному сегменту коду, даних

і стека, існують спрощені директиви сегментації (табл. 3.1). Використо-

вуються дві основні моделі пам'яті – MASM або IDEAL, які потрібно

вказувати на початку програм. Директиви SEGMENT, ENDS та ASSUME

стають непотрібними.

Таблиця 3.1. Спрощені директиви визначення сегмента

Формат директиви

Режим MASM Режим IDEAL Призначення

.CODE [ім'я] CODESEG [ім'я] Сегмент коду

.DATA DATASEG Сегмент даних, а також визначення

даних типу near

.CONST CONST Сегмент постійних даних модуля

.DATA? UDATASEG Сегмент неініційованих даних, а та-

кож визначення даних типу near

.STACK [розмір] STACK [розмір] Сегмент стека модуля та задавання

розміру стека

.FARDATA [ім'я] FARDATA [ім'я] Сегмент даних типу far

.FARDATA? [ім'я] UFARDATA [ім'я] Сегмент неініційованих даних ти-

пу far

Page 123: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

123

Разом зі спрощеними директивами сегментації використовуються

вказівки моделі пам'яті MODEL, що частково дозволяє управляти роз-

міщенням сегментів і виконувати функції директиви ASSUME. Незалеж-

но від типу використання директив сегментації регістр DS потрібно іні-

ціювати.

Синтаксис директиви MODEL має наступний вигляд:

.MODEL модель_пам'яті [,мова]

Обов'язково в директиві MODEL вказується одна з моделей па-

м'яті TINY, SMALL, MEDIUM, COMPACT, LARGE, HUGE або FLAT,

що визначає модель сегментації пам'яті для програмного модуля, роз-

міри сегментів даних і коду програми, спосіб зв'язування сегментів

із сегментними регістрами. Модель TINY використовується для ство-

рення com-файлів, а інші моделі пам'яті – exe-файлів. У табл. 3.2 наве-

дено деякі моделі пам'яті та значення параметрів.

Таблиця 3.2. Моделі пам'яті сегментів коду програми та даних

Сегмент Модель

коду даних Призначення моделі

TINY near near

Код і дані об'єднані в одну групу з іме-

нем DGROUP. Використовується для

створення програм формату .com

SMALL near near

Код і дані займають по одному сегмен-

ту. Цю модель застосовують для біль-

шості програм на асемблері

MEDIUM far near

Код займає кілька сегментів, по одному

на кожен поєднуваний програмний мо-

дуль. Дані об'єднані в одній групі

COMPACT near far Код займає один сегмент; дані можуть

займати кілька сегментів

LARGE, HUGE far far

Код і дані розміщуються у декількох

сегментах, по одному на кожен поєдну-

ваний програмний модуль

FLAT flat flat Використовується для 32-бітних сегмен-

тів операційних систем Windows9x/NT

При застосуванні директиви MODEL стають доступними кілька

ідентифікаторів, до яких можна звертатися під час роботи програми

з метою одержання інформації про ті або інші характеристики даної

моделі пам'яті (табл. 3.3).

Page 124: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

124

Таблиця 3.3. Ідентифікатори, створювані директивою MODEL

Ім'я

ідентифікатора Значення змінної

@code Фізична адреса сегмента коду

@data Фізична адреса сегмента даних типу near

@fardata Фізична адреса сегмента даних типу far

@fardata? Фізична адреса сегмента неініційованих даних типу far

@curseg Фізична адреса сегмента неініційованих даних типу far

@stack Фізична адреса сегмента стека

За допомогою параметру "мова" можна вказувати мову високого

рівня, з якої викликається асемблерна програма. Він може приймати зна-

чення: C, PASCAL, BASIC, FORTRAN, PROLOG. Наприклад:

.model Large, Pascal

.model Large, C

Стандартні та спрощені директиви сегментації не виключають одна

одну. Стандартні директиви використовуються для повного контролю над

розміщенням сегментів у пам'яті та їхньому комбінуванні з сегментами

інших модулів.

Спрощені директиви полегшують написання програм. Наприклад,

сегмент пам'яті закривається автоматично при об'явленні нового сег-

мента або кінця програми і не потребує директиви ENDS.

Розглянемо програму з використанням спрощених директив сег-

ментації:

masm ; режим роботи masm

.model small ; установлюється параметр віддаленості near

.data ; сегмент даних

a db 15h

b db 25h

c dw ?

.stack ; сегмент стека

db 256 dup ('?')

.code ; сегмент коду

start:

mov ax, @data ; заносимо адресу сегмента даних у регістр AX

mov ds, ax ; переписуємо дані з регістру AX в DS

… ; текст програми

mov ax, 4c00h ; заносимо номер функції переривання 4C00h у

Page 125: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

125

; регістр AH та нуль в регістр AL

int 21h ; викликаємо переривання з номером 21h

end start ; вказуємо точку входу в програму START

Для присвоєння деякому виразу або ідентифікатору символічного

імені застосовуються псевдооператори: EQU (equal – еквівалентно) і "=".

Під час трансляції програми замість цього ідентифікатора асемблер

підставить відповідний вираз, який може бути представлений константа-

ми, іменами міток, символічними іменами та рядками в апострофах.

Синтаксис псевдооператора EQU:

ім'я_ідентифікатора equ рядок

або

ім'я_ідентифікатора equ числовий_вираз

Синтаксис псевдооператора "=":

ім'я_ідентифікатора = числовий_вираз

Незважаючи на зовнішню й функціональну подібність псевдоопера-

тори EQU та "=" відрізняються наступним чином:

за допомогою EQU ідентифікатору можна ставити у відповідність

як числові вирази, так і текстові рядки, а псевдооператор "=" може вико-

ристовуватися тільки із числовими виразами;

ідентифікатори, які визначені за допомогою "=", можна перевизначи-

ти у вихідному тексті програми, а визначені з використанням EQU – не

можна.

Псевдооператор EQU зручно застосовувати для налагодження

програми на конкретні умови виконання, заміни складних у позначенні

об'єктів, які багаторазово використовуються у програмі, більш простими

іменами. Псевдооператор "=" зручно використовувати для визначення

простих математичних виразів. Головна умова його застосування, щоб

транслятор міг обчислити ці вирази під час трансляції.

Наприклад:

a1 equ 25h ; незмінне значення

a2 equ 37h

help equ 'Клавіша F1' ; опис символьного рядка

r1 equ a1 + a2 ; знаходження суми двох операндів

count1 equ cx ; перейменувати регістр

mas_1 equ ds: [bx+si] ; адреса масиву

r2 = a1 + a2 ; обчислення виразу

r2 = 5Ch ; константа

r3 = r2 – 02h ; обчислення виразу

Page 126: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

126

Асемблер надає дуже широкий набір засобів описання й обробки

даних. Для представлення простих типів даних у програмі використову-

ються директиви, які по суті є вказівками транслятору на виділення пев-

ного обсягу пам'яті.

Директиви описання даних простих типів дозволяють задати дані

типу байт, слово, подвійне слово. Синтаксист цих директив має такий

вигляд:

[ім'я] db вираз [, вираз...]

[ім'я] dw вираз [, вираз...]

[ім'я] dd вираз [, вираз...]

Ім'я – деяке символічне ім'я мітки або елемента пам'яті в сегменті

даних, яке застосовується в програмі.

Директиви DB, DW, DD дозволяють резервувати пам'ять для даних

розміром 1, 2 та 4 байти.

Для резервування даних замість виразу може бути знак питання (?),

який показує, що вміст поля не визначено, тобто резервується.

Якщо потрібно задати декілька однакових значень, використовуєть-

ся вираз повторення n dup(x), де dup – операція дублювання, n – кількість

повторів, x – інформація, яку потрібно занести в пам'ять.

Рядок може містити таку кількість символів, яка може розмістити-

ся в 132 позиціях.

Наприклад:

.data

perem_1 db 0ffh

perem_2 dw 3a7fh

perem_3 dd 0f54d567ah

s1 db 7,7,7,7,7,7,7,7,7,7

s11 db 10 dup (7)

s2 db 5 dup (?)

b_tabl_1 db 0, 0, 5, 18

db 20, 30, 40, 80

w_tabl dw 1025, 1148, 15

Крім того, за допомогою директиви DB можна задавати символь-

ний рядок, який береться в одинарні лапки. У цьому випадку у пам'яті

визначається стільки байт, скільки символів у рядку.

Наприклад:

mm1 db 'Запустити програму'

str1 db 'Результат достовірний'

Page 127: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

127

Оператор одержання сегментної складової адреси. Будь-який

вираз, що може бути представлений міткою, змінною, іменем сегмента

та іншим символічним іменем, складається з адреси сегмента та адре-

си зміщення в сегменті. Для одержання сегментної адреси виразу вико-

ристовується оператор SEG:

seg вираз

Одержати значення зміщення для даного виразу від початку сег-

мента, у якому він знаходиться, дозволяє оператор OFFSET:

offset вираз

Наприклад:

.data

d_w dw 5

d_w1 db 'Help', 0ah, 0dh, '$'

.code

; визначення повної адреси змінної d_w1

mov ax, seg d_w1 ; одержання сегментної складової d_w1

mov ds, ax ; запис сегментної складової d_w1 в регістр DS

mov dx, offset d_w1 ; одержання адреси зміщення змінної d_w1

При розробці програм дуже часто виникає потреба у визначенні ве-

личини зміщення поточної команди від початку сегмента. Це завдання

виконує лічильник адреси, який позначається знаком $. Транслятор асем-

блера замість оператора $ підставляє значення зміщення поточної ма-

шинної команди відносно початку сегмента коду. У наступному прикладі

за допомогою лічильника адреси визначається кількість байт, яку зай-

має змінна HELP:

date segment

help db 'F1 This help'

dist = $-help

date ends

code segment

; в регістр CX буде занесено довжина змінної HELP в байтах

mov cx, dist

У деяких випадках лічильник адреси обмежує послідовність даних.

Так, при виконанні 9-ї функції переривання 21h вивід рядка буде обме-

жено оператором лічильника адреси.

Page 128: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

128

Процедура або підпрограма являє собою набір команд, які можуть

виконуватися в різних частинах програми. Текст процедури записується

один раз і може викликатися з різних точок програми. Для описання про-

цедури використовуються директиви PROC та ENDP. Процедуру мож-

на викликати за допомогою команди CALL, передавши їй управління.

При цьому відбувається зупинка основної програми, запам'ятовується

адреса повернення до виконання основної програми в стек і передається

управління процедурі. У стек записується адреса команди, яка знахо-

диться за командою CALL. Вміст регістрів CS та IP або одного регіст-

ра IP визначають місцезнаходження команди, що розташовується після

команди CALL для відстаней FAR та NEAR відповідно. Перед завер-

шенням процедури необхідно поставити команду RET, яка повертає

управління з процедури основній програмі, зчитавши зі стека вміст

регістрів CS та IP або одного регістра IP.

Процедура складається з трьох частин: заголовок процедури, тіло

процедури, кінець процедури:

Ім'я_процедури PROC [відстань]

Тіло процедури

Ім'я_процедури ENDP

Атрибут "відстань" може приймати значення NEAR або FAR і ха-

рактеризує можливість звертатися до процедури з іншого сегмента. Якщо

атрибут не вказано, то використовується значення NEAR.

Процедура може розміщатися в будь-якій точці програми з однією

умовою, щоб програма не могла на неї вийти випадково. Наприклад, пе-

ред міткою START, з якої розпочинається виконання програми і виклю-

чається випадковість її запуску. У наступній програмі виконується пере-

дача строкових даних на екран монітору з використанням процедури

MONITOR_1:

; pr8_a12

seg1 segment stack "stack"

db 100h dup (?) ; задається сегмент стека об'ємом 256 байт

seg1 ends

dat1 segment

greet1 db 'F1 – Help',13,'$'

dat1 ends

cod segment

assume cs:cod, ds: dat1, ss:seg1

; процедура виводу рядків даних, які заносяться в регістр DX,

Page 129: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

129

; на екран монітору за допомогою 9-ї функції переривання 21h

monitor_1 proc

mov ah, 09h

int 21h

ret

monitor_1 endp

start:

mov ax, dat1

mov ds, ax

mov ax, seg1

mov ss, ax

mov dx, offset greet1 ; занесення адреси зміщення рядка greet1

call monitor_1 ; виклик процедури

mov ah, 4ch

int 21h

cod ends

end start

При розробці програм часто доводиться використовувати окремі

підпрограми, які знаходяться в інших програмних модулях. Існують ди-

рективи PUBLIC та EXTRN, які забезпечують видимість процедур

з інших програм.

Директива PUBLIC оголошує деяке ім'я даного модуля видимим

іншим модулям:

PUBLIC ім'я, …, ім'я

Для того щоб викликати видиму процедуру з іншого блока, потрібно

оголосити її ім'я зовнішнім відносно даного модуля за допомогою дирек-

тиви EXTRN:

EXTRN ім'я: тип, … ім'я: тип

Імена можуть визначати змінні, директиви опису даних, константи,

процедури. Якщо описуються процедури, то тип імені може бути NEAR

або FAR.

Змінимо програму Pr8_a12 таким чином, щоб процедура

MONITOR_1 знаходилася в окремому модулі.

; pr8_a13

; головний модуль

extrn monitor_1: far

seg1 segment stack "stack"

db 20h dup(?)

seg1 ends

Page 130: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

130

data segment para public "data"

greet1 db 'F1 – Help',13,'$'

data ends

code segment; para public

assume cs:code, ds: data, ss:seg1

start:

mov ax, data

mov ds, ax

mov ax, seg1

mov ss, ax

mov dx, offset greet1

call monitor_1 ; виклик процедури

mov ah, 4ch

int 21h

code ends

end start

В програмі Pr8_a11 вказуємо, що процедура MONITOR_1 видима

для інших програм.

; Pr8_а11

; модуль процедури monitor_1

public monitor_1 ; процедура monitor_1 об'явлена видимою зовні

data segment; para public "data"

data ends

code segment; para public

assume ds:data, cs:code

monitor_1 proc far

mov ah, 09h

int 21h

ret

monitor_1 endp

code ends

end

Після одержання об'єктних модулів наших програм виконуємо їх ком-

понування:

tlink.exe pr8_a13.obj + pr8_a11.obj

Якщо не вказувати імені виконуючої програми, буде присвоєно ім'я

першого об'єктного файла.

Page 131: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

131

Лістинг програми. У програмуванні першою традиційно є програ-

ма, яка виводить на екран повідомлення "Hello World". Для створення

програми наберемо в текстовому редакторі наступні рядки програми,

якій присвоїмо ім'я HELLO.ASM (рис. 3.5).

Title World ; ім'я програми

dat segment ; відкриття сегмента даних

greet db 'Hello World', 13,10,'$' ; рядкові дані

db 41, 42 43, 44, 45 ; задається масив байтів даних

a dw 10 dup(?) ; створення резерву пам'яті на 10 слів

dat end ; закриття сегмента даних

code segment ; відкриття сегмента команд

assume cs:code, ds:dat

start: mov ax, dat ; установити регістр DS таким

mov ds, ax ; чином, щоб він указував на сегмент даних

mov dx, offset greet ; задається адреса рядка даних

mov ah, 9 ; функція 9h переривання 21h – вивід рядка на екран

int 21h

mov ah, 4ch ; функція 4ch переривання 21h – завершення програми

int 21h

code ends ; закриття сегмента команд

end start ; завершення коду програми та вказівка

; на початкову точку виконання програми

Після того як буде збережено файл HELLO.ASM, потрібно перетво-

рити нашу початкову програму до вигляду, зрозумілого процесору. За

допомогою програми трансляції TASM.EXE перетворимо наш початко-

вий код програми в проміжну форму, яка називається об'єктним моду-

лем, задавши в командному рядку

Tasm.exe hello.asm /L

Унаслідок того що не задавали допоміжні вказівки на формування

результатів з другими іменами, буде одержано ряд файлів з однаковими

іменами але різними розширеннями. Ключ /L дає вказівку транслятору

на створення лістингу нашої програми – файлу HELLO.LST. При успіш-

ному виконанні трансляції програми одержимо об'єктний файл, у якому

знаходиться програма в машинних кодах – HELLO.OBJ. На екрані з'яв-

ляється повідомлення про результати трансляції:

Рис. 3.5. Текст програми HELLO.ASM

Page 132: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

132

Turbo Assembler Version 3.2i Copyright (c) 1988, 1992 Borland

International

Serial No: Tester:

Assembling file: hello.asm

Error messages: None

Warning messages: None

Passes: 1

Remaining memory: 370k

Якщо в програмі будуть помилки, то з'явиться повідомлення, яке

містить номери рядків програми з помилкою та їх деталізацію. При одер-

жанні повідомлень про помилки потрібно перевірити текст програми, ви-

правити помилки та знову виконати трансляцію. Цей спосіб локалізації

помилок має свої недоліки. Не завжди номери рядків у повідомленні відпо-

відають дійсним номерам помилкових рядків у файлі. Крім того, аналіз

початкового тексту програми проводиться з точки зору правильності

використання команд, а не одержання правильного результату. В цьому

випадку локалізацію помилок краще проводити по лістингу програми. На

рис. 3.6 наведено лістинг для нашої програми.

Рядки файла лістингу мають наступний формат:

номер_рядка – зміщення – машинний_код – початковий_код

Тут номер_рядка – номер рядка програми у файлі лістингу, який

використовується для локалізації помилок і формування таблиці пере-

хресних посилань; зміщення показує у байтах розміщення поточної ко-

манди відносно початку відповідного сегмента й обчислюється транс-

лятором; машинний_код – машинне подання команди асемблера, розта-

шованої в цьому ж рядку; початковий_код – рядок коду команди нашої

програми.

Вивчаючи лістинг, можна помітити, що не всі рядки початкової про-

грами мають відповідний машинний код (рядки 2, 7, 9, 10, 19, 20). Це

обумовлено тим, що директиви асемблера (SEGMENT, ASSUME, END)

не генерують машинні команди.

Файл лістингу містить також код асемблера нашої програми. Для

кожної команди асемблера вказують її машинний код у шістнадцятково-

му форматі та величину зміщення у сегменті коду.

На початку програми знаходиться сегмент даних, який починаєть-

ся з адреси 0000h. У дійсності він розміщується в пам'яті за адресою,

яка записана у сегментному регістрі DS, і нульовим зміщенням щодо

цієї адреси. Директива SEGMENT установлює адресу, яка кратна 16,

й указує асемблеру на те, що це початок сегмента. Фізична адреса роз-

Page 133: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

133

Turbo Assembler Version 3.2 04/12/05 01:53:15 Page 1

Hello.asm

1

2 0000 dat segment ; відкриття сегменту даних

3 0000 48 65 6C 6C 6F 20 57+ greet db 'Hello World', 13,10,'$' ; рядкові дані

4 6F 72 64 0D 0A 24

5 000D 29 2A 2B 2C 2D db 41, 42, 43, 44, 45 ; масив даних розмірності байт

6 0012 0A*(????) a dw 10 dup(?) ; створення резерву пам'яті на 10 слів

7 0026 dat ends ; закриття сегмента даних

8

9 0000 code segment ; відкриття сегмента команд

10 assume cs:code, ds:dat

11 0000 B8 0000s start: mov ax, dat ; в AX записується адреса сегмента

12 0003 8E D8 mov ds, ax ; адреса сегмента DAT переписується

13 ; в регістр DS

14 0005 BA 0000rmov dx, offset greet ; передача послідовності символів

15 ; рядка Greet на монітор

16 0008 B4 09 mov ah, 09h ; завдання функції 9h переривання

17 000A CD 21 int 21h ; 21h DOS - вивід рядка на екран

18 000C B4 4C mov ah, 4ch ; функція 4ch переривання 21h DOS

19 000E CD 21 int 21h ; – завершення роботи програми

20 0010 code ends ; закриття сегмента команд

21 end start ; завершення коду програми та вказівка

22 ; на початкову точку виконання програми

Turbo Assembler Version 3.2 04/12/05 01:53:15 Page 2

Symbol Table

WORLD

Symbol Name Type Value

??DATE Text "04/12/05"

??FILENAME Text "Hello"

??TIME Text "01:53:15"

??VERSION Number 0314

@CPU Text 0101H

@CURSEG Text CODE

@FILENAME Text HELLO

@WORDSIZE Text 2

A Word DAT:0012

GREET Byte DAT:0000

START Near CODE:0000

Groups & Segments Bit Size Align Combine Class

CODE 16 0010 Para none

DAT 16 0026 Para none

Рис. 3.6. Лістинг програми HELLO.ASM

Page 134: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

134

міщення сегмента знаходиться шляхом множення вмісту сегментного

регістра даних на 10h. Як бачимо, по зміщенню 0000h також розташовані

символи, що входять у змінну GREET з рядковими даними, які займа-

ють 13 байтів. У наступному рядку директива DB застосовується без

символічного імені й інформаційне поле займає 5 байтів. Змінна A резер-

вує в сегменті даних 2*10 = 20 байтів пам'яті.

Коди команд в сегменті програм починається з адреси зміщення

0000h, а адреса сегмента знаходиться в регістрі CS. Директива ASSUME

повідомляє транслятору про зв'язки сегментів програми із сегментними

регістрами. Оскільки ASSUME є директивою асемблера, то першою

командою, що генерує машинний код, буде mov ax, Dat – трибайтна ко-

манда. Машинний код цієї команди містить три байти – B8h 00h 00h,

і наступна команда буде записана в пам'ять зі зміщенням 3 байти.

Наприкінці лістингу транслятор формує таблиці, які містять інфор-

мацію про мітки та сегменти, що використовуються у програмі. При опи-

санні міток вказується їхній тип відстані або область розміщення та фізич-

на адрес. Наприклад, рядок GREET BYTE DAT:0000 вказує на те, що

наша змінна має розмірність байт і знаходиться в сегменті даних зі

зміщенням 0000h байт.

Під час описання сегментів вказується порядок вирівнювання гра-

ниць сегментів (адреса кратна 16 біт) та кількість байт у сегменті в

шістнадцятковому коді.

Якщо є помилки або сумнівні ділянки коду, то програма TASM вклю-

чає в кінець лістингу повідомлення про них. Ці ж повідомлення включа-

ються в текст лістингу безпосередньо після помилкового рядка.

Після виправлення помилок файл з об'єктним кодом можна перетво-

рити у виконуваний файл, з розширенням ***.EXE. Для формування ви-

конавчого файлу з розширенням ***.EXE використовується програма

TLINK.EXE, яка задається в командному рядку:

Tlink.exe hello.obj

Компонувальник автоматично привласнить файлу з розширенням

***.EXE ім'я, що збігається з іменем об'єктного файлу (якщо не визна-

чати інше ім'я). При успішному виконанні даної програми на екрані

з'являється повідомлення:

Turbo Link Version 5.1 Copyright (c) 1992 Borland International

Warning: No stack

Тепер програму HELLO.EXE можемо запустити на виконання. На

екран виведеться повідомлення:

Hello World

Page 135: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

135

Окремі ключі, які можемо задавати при трансляції програми та її

компонуванні, подані в табл. 3.4 та 3.5.

Таблиця 3.4. Ключі транслятора TASM

Опції Значення

/a, /s

/a або /s – сегменти в об'єктному файлі повинні бути роз-

міщені за алфавітом або у порядку їхнього описанні в про-

грамі

/c Вказівка на включення у файл лістингу інформацію про

перехресні посилання

/h, /? Вивід на екран довідкової інформації

/i шлях Задає шлях до файлу, який включається згідно з директи-

вою INCLUDE

/j директива_

TASM

Визначає директиви, які будуть транслюватися перед по-

чатком трансляції вихідного файлу програми на асемблері

/khn

Задає максимальну кількість ідентифікаторів, які може мі-

стити вихідна програма. За замовчуванням програма може

містити до 16384 ідентифікаторів. Це значення можна

збільшити до 32 768 або зменшити до n. Сигналом про

необхідність використання даного параметра служить по-

ява повідомлення "Out of hash space" ("Буферний простір

вичерпаний")

/l Указує на необхідність створення файла лістингу

/ml, /mx, /mu

/ml – розрізняти у всіх ідентифікаторах великі та малі лі-

тери;

/mx – розрізняти великі та малі літери в зовнішніх і за-

гальних ідентифікаторах;

/mu – сприймати всі символи ідентифікаторів як малі

/mn

Установка кількості (n) проходів транслятора TASM. За

замовчуванням транслятор виконує один прохід. Макси-

мально можна задати виконання до 5 проходів

/n Не видавати у файлі лістингу таблиці ідентифікаторів

/t Заборона виводу всіх повідомлень при умовному виконан-

ні асемблерування, крім повідомлень про помилки

/z При виникненні помилок поряд з повідомленням про них

виводити відповідні рядки тексту

Таблиця 3.5. Ключі компонувальника (редактора зв'язків) TLINK

Опції Значення

/x Не створювати файл карти (.map)

/m Створити файл карти (.map)

Page 136: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

136

Опції Значення

/s Додатково у файл карти включається інформація про сегменти

(адреса, довжина в байтах, клас, ім'я сегмента та ін.)

/l Створити розділ у файлі карти з номерами рядків

/n Ігнорувати бібліотеки, вказані іншими компіляторами

/c Розрізняти великі та малі літери в ідентифікаторах (у тому числі й

зовнішніх)

/v Включити налагоджувадьну інформацію у виконуваний файл

/d Попереджати про дублювання символів у компонованих бібліо-

теках

/t Створити файл типу .com (за замовчуванням .exe)

Розділ 4. СИСТЕМА КОМАНД МІКРОПРОЦЕСОРІВ INTEL

Мікропроцесор 8086 містить 92 команди та дозволяє виконувати опе-

рації над окремими бітами, байтами, двобайтними словами, а також над

ланцюжками даних.

Команди можна розбити на сім наступних функціональних груп: пе-

ресилання даних; арифметичних операцій; логічних операцій і зсуву; пе-

редачі керування; обробки ланцюжкових даних; обробки переривань;

керування процесором.

4.1. Команди пересилання даних

Для передачі інформації між регістрами, регістрами та пам'яттю,

організації обміну з портами пристроїв і т. д. використовуються команди

пересилання даних, які можна поділити на чотири класи: загального при-

значення; вводу/виводу; пересилання адреси; пересилання прапорів.

Команди пересилання даних загального призначення. Цей клас

команд містить команди пересилання операндів (MOV), обміну (XCHG),

перетворення байта (XLAT), записування операндів до стеку (PUSH) та

зчитування зі стеку (POP).

Команда пересилання операнда MOV (MOVe operand) призначе-

на для пересилання даних між регістрами або регістрами та пам'яттю.

Структура команди:

mov приймач, джерело

У результаті роботи команди відбувається копіювання другого опе-

ранда в перший.

Під час роботи з командою MOV необхідно пам'ятати про обме-

Продовж. табл. 3.5

Page 137: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

137

ження й особливості виконання даної операції:

напрямок пересилання в команді MOV завжди справа наліво, тобто

з другого операнда в перший;

значення другого операнда не змінюється;

не можна переслати операнди між двома елементами пам'яті (у па-

м'яті може знаходитися лише один операнд). Дану операцію здійснюють

в два етапи з проміжним зберіганням операнда в регістрі;

не можна пересилати операнди між двома сегментними регістрами;

не можна пересилати операнди між сегментними регістрами та па-

м'яттю;

при використанні регістра AL/AX асемблер генерує більш швидку

форму команди MOV.

Розглянемо приклади застосування команди MOV:

mov al, 2 ; у регістр AL записується число 2

mov ax, bx ; операнд із регістра BX записується в AX

mov bx, m1 ; операнд m1 із пам'яті записується в регістр BX

mov ds, ax ; операнд із регістра AX записується в регістр DS

mov cx, [bx] ; у регістр CX записується операнд, що знаходиться за

; адресою зміщення, яка визначається вмістом регістра BX

mov [bx], ax ; операнд з регістра AX запишеться в пам'ять за

; адресою зміщення, що міститься в регістрі BX

mov ax, [si+bx+5] ; в AX записується операнд, адреса якого

; визначається сумою вмістів регістрів SI, BX та зміщення 5

mov [di+bx]+3, ax ; операнд з регістра AX буде записаний за

; адресою, яка визначається сумою вмістів регістрів DI, BX і зміщення 3

Якщо необхідно переслати операнди між двома елементами пам'яті

або пам'яттю і сегментним регістром, то спочатку дані заносяться в

регістр загального призначення, а потім переписуються за призначен-

ням.

Наприклад:

mov ax, mem1

mov mem2, ax

або

mov ax, mem1

mov ds, ax

Команда обміну XCHG (eXCHanGe) призначена для обміну вмістом

двох регістрів або регістра та пам'яті. Команда має наступну структуру:

xchg операнд_1, операнд_2

При виконанні команди відбувається обмін вмісту операндів.

Page 138: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

138

Команду XCHG можна використати для зміни місцями байтів у

регістрі.

Наприклад:

w_mem dw 1234h

mov ax, 1C25h ; al = 25h, ah = 1Ch

xchg al, ah ; al = 1Ch, ah = 25h

xchg ax, w_mem ; ax = 1234h, w_mem = 251Ch

Команда перетворення байта XLAT (transLATe Byte from table)

призначена для заміни (перекодування) вмісту регістра AL деяким зна-

ченням з таблиці в пам'яті. Структура команди:

xlat [адреса_таблиці]

Задана адреса таблиці не використовується транслятором і може

слугувати тільки коментарем. Адреса таблиці визначається вмістом

регістрової пари DS:BX. Вміст регістра AL указує на елемент таблиці,

який буде переписано в нього. Обсяг таблиці не може перевищувати 256

байтів. Адреса елемента в таблиці формується за такою формулою:

Адр_ел = [DS] * 10h + [BX] + [AL],

де DS – адреса сегмента даних; BX – адреса таблиці; AL – елемент

заміни з таблиці.

Для роботи команди необхідно попередньо завантажити в регістро-

ву пару DS:BX адресу таблиці. Вона зазвичай знаходиться в сегменті

даних, і вміст регістра DS буде визначеним завжди. При необхідності

сегментну частину адреси можна визначити за допомогою операто-

ра SEG. За його допомогою можна визначити фізичну адресу сегмента,

в якому знаходиться мітка або змінна.

Визначити та завантажити адресу розміщення таблиці в регістр BX

можна за допомогою команди LEA або оператора OFFSET.

Наприклад:

dat1 segment

a1 db 71h,72h,73h,74h,75,76h,77h

a2 db 'abcdefg'

dat1 ends

code segment

…....

mov al, 6 ; елемент таблиці a1, який потрібно вибрати

mov bx, offset a1 ; в bx буде записано значення зміщення до таблиці a1

xlat ; al = 77h, що позначає символ 'v' в таблиці ASCII-кодів

Page 139: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

139

Команда записування операндів у стек PUSH (PUSH operand

onto stack) та їхнє зчитування POP (POP operand from the stack)

організують обмін зі стеком. Звичайно ці команди використовуються

спільно. Вони мають таку структуру:

push джерело

pop приймач

Оброблювати можна дані, які мають розмірність слова. При вико-

нанні команди PUSH значення покажчика стека SP зменшується на 2, а

записування виконується у вершину стека за адресою, обумовленою ре-

гістровою парою SS:SP. Також у стек можна записувати безпосередні

значення.

Команда POP призначена для перенесення вмісту вершини стека в

регістр, пам'ять або сегментний регістр (крім регістра CS). При роботі

команди POP у приймач завантажується вміст вершини стека, яка адре-

сується регістровою парою SS:SP, і вміст SP збільшується на 2. Якщо

змінювати вміст сегментного регістра CS, може відбутися перехід до

виконання іншого фрагменту програми.

Наприклад:

push ax

push bx

pop bx

pop ax

По команді POP першим зчитується операнд, що був записаний ос-

таннім. Якщо задавати зчитування операндів у тій послідовності, в якій

вони записувалися, то вміст у регістрах AX й BX зміниться.

Команди вводу/виводу. Кожен з пристроїв вводу/виводу обчислю-

вальної машини має набір адрес, за допомогою яких можна їх ідентифі-

кувати. Кожна із цих адрес відкриває доступ до внутрішніх регістрів при-

строїв, через які можна спілкуватися з ними. Ці регістри можуть не тільки

приймати або передавати інформацію, а й працювати в двох напрямках.

Властивості регістрів визначаються для кожного пристрою окремо. Об-

сяг адресного поля системних пристроїв і системи вводу/виводу стано-

вить 65536 адрес.

Номер порту задається у діапазоні 0–255 прямо в команді, а для

порту з більшим номером використовується регістр DX. При переда-

ванні або прийманні операндів застосовується один з регістрів AL/AX,

який визначає розмір даних (байт або слово).

Page 140: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

140

Команда пересилання операнда з порту пристрою IN (INput operand

from port) та команда приймання операнда в порт пристрою OUT (OUT

operand to port) мають наступну структуру:

in акумулятор, Nпорта

out Nпорта, акумулятор

Наприклад:

; перевірити стан контролера паралельного порту LPT1

; за адресою 0379h

mov dx, 0379h

in al, dx

; передати дані в контролер LPT1 за адресою 0378h

mov dx, 0378h

out dx, al

Команди пересилання адреси. Команди пересилання адреси до-

зволяють передавати не дані, а адреси розташування даних. При цьому

формується повна адреса елемента пам'яті у вигляді сегментної складо-

вої та зміщення або тільки зміщення. Розрізняють команди, що переда-

ють 32-розрядну та 16-розрядну адреси.

Завантаження 32-розрядної адреси виконується командами LDS/LES

(Load pointer into DS/ES segment register), що мають наступну структуру:

lds приймач_16, джерело_32

les приймач_16, джерело_32

Перші два байти, що надійшли з пам'яті, записуються в 16-розряд-

ний регістр, вказаний як приймач, і містять адресу зміщення. Наступні

два байти джерела містять сегментну складову адреси та завантажу-

ються в регістр DS або ES. Таким чином, за допомогою цих команд у

парі регістрів DS/ES і регістрі приймачі знаходиться повна адреса. На-

приклад, фрагмент програми з трьох команд завантаження повної адре-

си операнда можна замінити однією командою LDS:

mov bx, offset tabl_a lds bx, tabl_a

mov ax, seg tabl_a

mov ds, ax

Якщо необхідно одержати тільки ефективну адресу (зміщення) дже-

рела, то застосовується команда LEA (Load Effective Address), яка має

наступну структуру:

lea приймач_16, джерело_16

Page 141: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

141

За цією командою в регістр приймача завантажується 16-бітне зна-

чення зміщення операнда джерело. Дана команда є альтернативою опе-

раторові асемблера OFFSET.

Наприклад:

mov bx, offset tabl_a lea bx, tabl_a

Команди пересилання прапорів. У процесі роботи програми часто

доводиться аналізувати стани прапорів, змінювати та зберігати їх. Регістр

прапорів безпосередньо недоступний користувачеві. Існує ряд команд,

які дозволяють працювати з прапорами.

Команди PUSHF (PUSH Flags register onto stack) і POPF (POP Flags

register from the stack) дозволяють зберігати вміст прапорів у стеці, а

потім відновлювати ці значення. Команди мають однобайтну структуру:

pushf

popf

По команді PUSHF вміст регістра прапорів заноситься в стек і цю

інформацію можна змінити, а потім знову переписати в регістр прапорів.

За командою вміст регістра прапорів розміщається у вершині стека, ви-

значеної регістровою парою SS:SP.

Команда POPF за принципом роботи є зворотною команді PUSHF і

використовується для відновлення зі стека вмісту регістра прапорів.

Наприклад:

; установити значення прапора DF в нуль

pushf ; записуємо вміст регістра прапорів у стек

pop ax ; вміст регістра прапорів переносимо в регістр AX

and ax, 0BFFh ; установлюємо десятий розряд у нуль

push ax ; вміст регістра AX записуємо у стек

popf ; записуємо змінений регістр прапорів

Існують команди, які дозволяють працювати з молодшим байтом

регістра прапорів: LAHF (Load AH register from register Flags) і SAHF

(Store AH register into register Flags). Ці команди дозволяють завантажи-

ти у регістр AH молодший байт регістра прапорів, у якому розміщено

п'ять прапорів (CF, PF, AF, ZF та SF), провести їхній аналіз або зміну, а

потім знову записати у регістрі прапорів.

Команди мають однобайтну структуру:

lahf

sahf

Page 142: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

142

Наприклад:

; скинути в нуль прапор ZF

lahf ; прочитати молодший байт регістра прапорів у регістр AH

and ah, 10111111b ; в шостий розряд регістра AH записати нуль

sahf ; записати вміст регістра AH у регістр прапорів

4.2. Арифметичні команди

Арифметичні команди можуть виконуватися над цілими двійковими

та десятковими числами. Цілі двійкові числа можуть бути представлені

байтом, словом або подвійним словом. Старший розряд служить озна-

кою знака числа (7, 15 та 31 біт).

Десяткові числа подаються в двійково-десятковому коді BCD

(Binary-Coded Decimal) та займають чотири біти з ваговими коефіцієн-

тами 8-4-2-1. Двійково-десяткове число має два формати: упакований

і неупакований.

При упакованому форматі числа в байті знаходяться дві десяткові

цифри по 4 біта, кожна з яких може набирати значення від 0 до 9. Упако-

ване двійково-десяткове число може представляти значення від 0 до 99.

Неупакований формат двійково-десяткового числа містить у байті

тільки одну цифру в чотирьох молодших бітах, що дозволяє представля-

ти числа від 0 до 9.

Наприклад, десяткове число 95 буде мати наступний вигляд:

0000 1001 0000 0101 – неупаковане

0000 0000 1001 0101 – упаковане.

Арифметичні команди можна описати групами, які представлені

в табл. 3.6.

Таблиця 3.6. Арифметичні команди

Команди Додавання Віднімання Множення Ділення

Прості add sub mul div

З урахуванням перене-

сення adc sbb – –

Операції зі знаком – – imul idiv

Корекція aaa aas aam aad

Корекція десяткова daa das – –

Зменшення на 1 – dec – –

Збільшення на 1 inc – – –

Порівняння – cmp – –

Перетворення в допов-

няльний код – neg – –

Page 143: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

143

Команди Додавання Віднімання Множення Ділення

Розширення байта до

слова cbw

Розширення слова до

подвійного слова cwd

Продовж. табл. 3.6

Арифметичні команди додавання містять такі різновиди: прості

(ADD), з урахуванням вмісту прапора перенесення (ADC) та збіль-

шення операнда на 1 (INC).

Проста команда додавання ADD (ADDition) призначена для зна-

ходження суми двох операндів розмірністю байт або слово. Результат

операції буде записано в перший операнд (приймач), а другий залишить-

ся незмінним.

Структура команди:

add приймач, джерело

У результаті виконання програми окремі прапори можуть змінити

свій стан. Аналіз прапорів перенесення (CF), переповнення (OF) та знака

(SF) дозволяє виконувати операції для чисел зі знаком та чисел, які пере-

вищують розрядність регістрів.

Команда додавання з перенесенням ADC (Addition with Carry) при-

значена для знаходження суми двох операндів з урахуванням перенесен-

ня від попередньої дії. Прапор перенесення CF дорівнює одиниці при ви-

никненні переповнення розрядної сітки під час додавання чисел без зна-

ку. Вміст прапора перенесення буде додаватися до одержаної суми. Ре-

зультат операції буде записано в перший операнд (приймач), а другий

залишиться незмінним.

Структура команди:

adc приймач, джерело

Команда ADC використовується при додаванні довгих двійкових

чисел. Її можна застосувати як самостійно, так і разом з командою ADD.

При спільному використанні команди ADC з командою ADD додавання

молодших байтів/слів здійснюється командою ADD, а вже старші бай-

ти/слова додаються командою ADC, що враховує перенесення з молод-

ших розрядів у старші.

Команда збільшення операнд на 1 INC (INCrement operand by 1)

використовується для збільшення значення операнда на одиницю.

Структура команди:

inc операнд

Page 144: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

144

Наприклад:

add al, 5 ; до вмісту регістра AL додати 5

add bx, ax

add x, ax

inc ax ; збільшити значення в AX на 1

; обчислити вираз z = x + y (використання команди ADC)

x dd 257b8195h

y dd 3281a348h

z dd ?

...

mov si, offset x

mov ax, [si] ; ax = 8195h

mov cx, [si]+4 ; cx = A348h

mov dx, [si]+2 ; dx = 257Bh

mov bx, [si]+6 ; bx = 3281h

add ax, cx ; ax = 8195h + A348h = 24DDh, cf = 1, of = 1

add dx, bx ; dx = 257Bh + 3281h + 1 = 57FDh, cf = 0, of = 0

mov word ptr z+2, ax

mov word ptr z, dx

Команди віднімання. До арифметичних команд віднімання можна

віднести велику групу команд: просте (SUB), з урахуванням стану пра-

пора перенесення (SBB), зменшення операнда на одиницю (DEC), по-

рівняння операндів (CMP), перетворення операнда в доповняльний

код (NEG).

Команда віднімання SUB (SUBtration) призначена для знаходжен-

ня різниці двох чисел. Результат операції буде записано в перший опе-

ранд, а другий залишиться незмінним.

Структура команди:

sub операнд_1, операнд_2

У результаті виконання програми можливим є виникнення позики зі

старших розрядів, що можна проконтролювати за умови проведення ана-

лізу прапора CF.

Команда віднімання з позикою SBB (SuBtraction with Borrow) ви-

користовується для знаходження різниці старших частин багатобайтних

операндів з урахуванням можливої позики при виконанні дії віднімання

молодших частин даних операндів. У результаті виконання дії в першо-

му буде записано наступний результат: операнд_1 = операнд_1 – опе-

ранд_2 – (cf).

Page 145: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

145

Структура команди:

sbb операнд_1,операнд_2

Наприклад:

sub ax, bx

sub al, 5

sub ax, b1

sbb dx, cx

Команда зменшення операнда на одиницю DEC (DECrement

operand by 1) використовується для зменшення значення байта, слова в

пам'яті або регістрі на одиницю.

Структура команди:

dec операнд

Наприклад:

mov al, 9 ; al = 9

dec al ; al = 8

Команда порівняння операндів CMP (CoMPare operands) викори-

стовується для порівняння двох операндів методом віднімання, при

цьому операнди не змінюються.

Структура команди:

cmp операнд_1, операнд_2

Команда виконується за допомогою віднімання (операнд_1 – опе-

ранд_2). Залежно від результатів виконання команди встановлюються

прапори (табл. 3.7). Команда CMP застосовується з командами умовно-

го переходу.

Таблиця 3.7. Стан прапорів після виконання команди CMP

Прапори Операнди

OF SF ZF CF

Без знака

операнд_1 < операнд_2 * * 0 1

операнд_1 = операнд_2 * * 1 0

операнд_1 > операнд_2 * * 0 0

Зі знаком

операнд_1 < операнд_2 0/1 0 0 *

операнд_1 = операнд_2 0 0 1 *

операнд_1 > операнд_2 0/1 1 0 *

Примітка. Результати, які позначені зірочкою (*), не аналізуються.

Page 146: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

146

Наприклад:

cmp ax, b

je m1 ; перехід на мітку m1, якщо ax = b

Команда змінити знак операнда NEG (NEGate operand) викорис-

товується для формування двійкового доповнення операнда в пам'яті або

регістрі.

Структура команди:

neg джерело

Операція двійкового доповнення виконується інвертуванням усіх роз-

рядів операнда з наступним додаванням операнда до двійкової одиниці.

Команда виконує операцію віднімання (0 – джерело).

Прапор CF установлюється в одиницю за умови, що результат нену-

льовий.

Наприклад:

mov ax, 40h ; ax = 0040h

neg ax ; ax = 0FFC0h – доповняльний код числа 40h

Команди перетворення байта в слово та слова в подвійне сло-

во CBW (Convert Byte to Word) та CWD (Convert Word to Double word)

використовуються для доведення операндів до потрібної розмірності з

урахуванням знака. Дану операцію можна використати для підготовки

до операції ділення, для якої розмір діленого повинен бути у два рази

більшим від розміру дільника, або для доведення операндів до однієї

розмірності в командах множення, додавання, віднімання. У командах

CBW/CWD не вказується операнд, і вони використовуються з фіксова-

ними регістрами AL, AX та DX. Виконання команд не впливає на прапори.

Структура команди:

cbw

або

cwd

За командою CBW операнд, який знаходиться в регістрі AL, розши-

рюється до слова та записується в регістр AX. Якщо знаковий біт

AL = 0, то AH = 00h. Якщо знаковий біт AL = 1, то AH = 0FFh.

Наприклад:

mov al,–3 ; al = 1111 1101

cbw ; ax = 1111 1111 1111 1101

mov al, 5 ; al = 0000 0101

cbw ; ax = 0000 0000 0000 0101

Page 147: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

147

Команда перетворення слова у подвійне слово CWD використовуєть-

ся для розширення операнда, який знаходиться в регістрі AX, до розміру

подвійного слова. Перетворення проходить за рахунок копіювання зна-

чення старшого біта регістра AX в усі біти регістра DX.

Наприклад:

mov dx, 5 ; dx = 0000 0000 0000 0101

mov ax, 25 ; ax = 0000 0000 0001 1001

cwd ; ax = 0000 0000 0001 1101, dx = 0000 0000 0000 0000

mov dx, 5 ; dx = 0000 0000 0000 0101

mov ax, –40h ; ax = 1111 1111 1100 000

cwd ; ax = 1111 1111 1100 0000, dx = 1111 1111 1111 1111

Команди множення. Для виконання операції множення використо-

вуються дві команди: множення без урахування знака (MUL) та мно-

ження операндів зі знаком (IMUL).

Множення цілочислове без урахування знака MUL (unsigned

MULtiply) призначене для знаходження добутку двох цілих чисел, не вра-

ховуючи їхніх знаків.

Структура команди:

mul множник_1

Для виконання операції потрібно два операнда. Один із них знахо-

диться в команді й може бути розміщений у пам'яті або в регістрі. Місце

розташування другого співмножника фіксоване і, залежно від першого

співмножника, може знаходитися в регістрах AL або AX:

якщо операнд, зазначений у команді, – байт, то другий співмнож-

ник повинен розташовуватися в регістрі AL, а результат буде розміщено

в регістрі AX;

якщо операнд, зазначений у команді, – слово, то другий співмнож-

ник повинен розташовуватися в AX, а результат буде розміщено в ре-

гістровій парі DX_AX – старша частина результату розміщується в DX,

а молодша – в AX.

Розміщення операндів та результатів представлено в табл. 3.8.

Таблиця 3.8. Розміщення операндів та результату для команди множення

Розмір операндів Множник_1 Множник_2 Результат

Байт Reg/mem8 AL AX

Слово Reg/mem16 AX DX_AX

Page 148: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

148

Наприклад:

mov al, 5

mul al ; ax = al * al = 0019h

mov ax, 01a5h

mov bx, 01c2h

mul bx ; dx = 0002h, ax = 0E40Ah

Для множення цілих чисел з урахуванням знаку використовується

команда IMUL (Integer signed MULtiply). Виконання операції IMUL та

розміщення операндів і результату не відрізняються від операції MUL.

Структура команди:

imul множник_1

Наприклад:

; Pr9_a4

a1 db 25h

a2 db 17h

b1 db -05h

b2 db 04h

b3 dw -0003h

; обчислити вираз (a1*a2)*(a1*a2)

mov al, a1 ; al = 25h

mov bl, a2 ; bl = 17h

mov dx, 25h ; dx = 0025h

mul bl ; dx = 0025h, ax = 0353h – в AX добуток (a1*a2)

mul ax ; dx = 0000h, ax = 1AE9h

; DX та AX містять добуток (a1*a2)*(a1*a2)

; обчислити вираз (b1*b2)*b3 з від'ємними числами

mov al, b1 ; al = 0FBh – в AL записано від'ємне число –5

mov bl, b2 ; bl = 04h

mov dx, 1234h ; dx = 1234h

mov cx, b3 ; cx = 0FFFDh – в CX записано від'ємне число –3

imul bl ;AX містить від'ємне число -20, добуток 4*(–5)

; ax = 0FFECh

imul cx ; dx = 0000h, ax = 003Ch

; DX та AX містять десяткове число 60, добуток (4*(–5))*(–3)

Команди ділення. Для виконання операції ділення використовують-

ся дві команди: ділення без урахування знака (DIV) та ділення операндів

зі знаком (IDIV).

Команда без знакового ділення DIV (DIVide unsigned) виконує опе-

Page 149: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

149

рації над двома цілочисловими операндами з видачею результату у ви-

гляді частки та остачі від ділення.

Структура команди:

div дільник

Дільник розміщується в команді і може займати байт або слово.

Ділене задається неявно, його розмір залежить від розміру дільника (зав-

жди в два рази більше від дільника) і може бути розташоване в парі

регістрів DX_AX або в регістрі AX. Після операції ділення частка

міститься в регістрах AX або AL, а залишок – в DX або AH відповідно.

У подвійному слові, яке розташоване в регістровій парі DX_AX,

молодша частина діленого перебуває в AX, а старша – в DX.

Розміщення операндів та результатів для операції ділення представ-

лено в табл. 3.9.

Таблиця 3.9. Розміщення операндів та результату для команди ділення

Розмір дільника Ділене Дільник Частка Залишок

Байт AX Reg/mem8 AL AH

Слово DX_AX Reg/mem16 AX DX

Команда ділення зі знаком IDIV (Integer signed DIVide) виконує роз-

поділ цілочислових операндів з урахуванням їхніх знакових розрядів. Опе-

рація виконується відповідно до команди ділення DIV.

Структура команди:

idiv дільник

Остача завжди має знак діленого. Знак частки залежить від стану

знакових бітів (старших розрядів) діленого та дільника.

Розглянемо приклади на виконання операції ділення.

; 53 розділити на 8

mov ax, 53 ; ax = 0035h

mov bl, 8 ; bl = 08h

div bl ; al = 06h – частка, ah = 05h – залишок

; –25 розділити на 7

mov ax, –25 ; ax = 0FFE7h – в AX записано від'ємне ділене –25

mov bx, 7 ; bx = 0007h дільник

mov dx, 3 ; dx = 0003h

cwd ; ax = 0FFE7h, dx = 0FFFFh – розширення діленого

; до подвійного слова DX_AX

idiv bx ; ax = 0FFFDh – частка від ділення –3

; dx = 0FFFCh – залишок від ділення –4

Page 150: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

150

При виконанні операції ділення можливе виникнення виняткової си-

туації: ділення на нуль. Ця ситуація виникає, коли дільник дорівнює 0 або

частка занадто велика для його розміщення в регістрі AL або AX.

Команди корекції. Використання десяткових чисел у двійково-де-

сятковому коді BCD дозволяє збільшити діапазон представлення чисел,

а також спростити механізм переведення числового результату у сим-

вольний вигляд для виведення інформації: числа в ASCII-кодах відрізня-

ються від десяткових на величину 30h. Тому неупаковані двійково-де-

сяткові числа дуже легко перевести в символьні коди.

Окремих команд для виконання дій над двійково-десятковими чис-

лами немає, тому в результаті виконання арифметичних дій можна одер-

жати результат у тетрадах, який перевищує значення 9. Для того щоб

результат був вірним, потрібно корегувати одержані дані. Для цього ви-

користовуються спеціальні команди корекції результату. Над неупакова-

ними BCD-числами можна виконувати всі арифметичні дії, а над упако-

ваними – тільки операції додавання та віднімання.

Арифметичні дії над неупакованими BCD-числами. Для розгля-

ду цих дій використовуються однорозрядні десяткові числа.

Під час виконання операції додавання двох чисел можемо одержати

результат у тетраді, який не перевищує 9, тоді йому не потрібна корекція.

Але якщо результат перевищує значення 9, то одержимо недостовірні

дані і їх потрібно корегувати. Виконаємо додавання двох чисел: 7 + 5.

Одержаний результат не відповідає формату BCD-числа. Для корекції

результату додавання BCD-чисел використовується команда AAA (Ascii

Adjust after Addition – ASCII-корекція після додавання). Розглянемо фраг-

мент програми з корегуванням результату додавання:

mov al, 07

mov bl, 05

add al, bl ; al = 0Ch

aaa ; ah = 01, al = 02, прапори af = 1 та cf = 1

Наші числа в регістрах AL та BL будуть представлені в наступному

вигляді: 0000 0111 та 0000 0101. Виконаємо дію додавання: 0000 0111 +

+ 0000 0101 = 0000 1100. Одержане число 12, яке не буде BCD-числом.

Після команди корекції отримаємо: AH = 01, а AL = 02. Команда корекції

результату додавання AAA перевіряє вміст напівбайта AL. Якщо

молодший напівбайт регістра AL перевищує значення 9, то в цьому

випадку до значення регістра AL додається число 6, в старший напівбайт

записується число 0, а вміст регістра AH буде збільшено на 1. Також

Page 151: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

151

будуть встановлено прапори CF = 1 та AF = 1. Якщо візьмемо вміст

молодших напівбайтів регістрів AH та AL як два розряди десяткових

чисел, то одержимо наш результат – число 12.

Якщо вміст напівбайта AL не перевищує 9, то команда корекції не

виконує ніяких дій і передає керування на наступну команду.

При виконанні операції віднімання двох неупакованих однорозрядних

BCD-чисел за допомогою команди SUB можливий випадок, коли потрібно

використовувати позику зі старшого розряду. Наприклад, нам потрібно

виконати дію 5–7:

mov al, 05h

mov bl, 07h

sub al, bl ; al = 0FEh, af = 1, cf = 1

aas ; al = 08h, cf = af = 1, ah = ah – 1

or al, 30h ; al = 38h – код символу 8

Під час виконання операції віднімання в даному випадку необхідно

зробити позику в старшому розряді, що фіксується установкою прапорів

CF і AF в 1. У регістрі AL отримаємо результат, який не буде десятко-

вим числом. Командою корекції для віднімання AAS (Ascii Adjust after

Substraction – ASCII-корекція після віднімання) проводиться аналіз регі-

стра AL, прапорів CF і AF та виконується корекція: від вмісту молодшо-

го напівбайта регістра AL віднімається число 6, на 1 зменшується вміст

регістра AH.

Якщо результат віднімання менше 9, то прапори CF і AF установлю-

ються в 0, а регістр AH не змінюється.

Операція множення BCD-чисел виконується як над звичайними

двійковими числами командою MUL. Якщо перемножити два макси-

мальних неупакованих BCD-числа, тобто 9*9, одержимо значення 51h.

Для подання результату в десятковій формі використовується команда

корекції після множення AAM (Ascii Adjust after Multiply – ASCII-корек-

ція після множення). Під час виконання команди AAM значення регістра

AL ділиться на 10. Частка від ділення записується в регістр AH, а оста-

ча – у регістр AL.

Команда AAM виконує цілочислове ділення вмісту регістра AL на

0Ah, і її можна застосовувати для перетворення двійкового числа діапа-

зона від 0 до 63h у його десятковий еквівалент від 0 до 99. Якщо вміст

регістра AL виходить за вказані границі, то перетворення відбудеться,

але не отримаємо десяткове представлення результату.

Page 152: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

152

Розглянемо множення десяткових чисел 5 на 7:

mov bl, 05h ; bl = 05h

mov al, 07h ; al = 07h

mul bl ; al = 23h – двійковий еквівалент 35

aam ; ah = 03h, al = 05h

Операція ділення BCD-чисел відмінна від виконання інших ариф-

метичних операцій. Перед виконанням операції ділення BCD-число по-

трібно подати у двійковому коді. Цю операцію виконують за допомо-

гою команди корекції числа перед діленням AAD (Ascii Adjust before

Division – ASCII-корекція перед діленням). Для виконання ділення

двозначне BCD-число потрібно розмістити в регістрі AX. Команда

AAD перетворює двозначне неупаковане BCD-число, розташоване

в регістрі AX, у двійковий вигляд. Під час виконання даної команди

старший розряд двозначного BCD-числа, що міститься в регістр AH,

множиться на 10 і додається до молодшого розряду BCD-числа, яке

знаходиться у регістрі AL. У результаті цих дій отримаємо двійкове

число в регістрі AL. У регістр AH записується 0. Ділення виконується

за допомогою арифметичної команди DIV.

Розглянемо ділення десяткового числа 27 на 9:

mov ah, 02h ; ah = 02h

mov al, 07h ; al = 07h (ax = 0207h)

mov bl, 09 ; bl = 09h

aаd ; al = 1Bh – двійковий еквівалент десяткового числа 27

div bl ; ah = 00h, al = 03h

Арифметичні дії над упакованими BCD-числами. При виконанні

операції додавання упакованих BCD-чисел команда десяткового корегу-

вання після додавання DAA (Decimal Adjust for Addition) дозволяє отри-

мати правильне двозначне десяткове число в упакованому вигляді. Ко-

манда DAA працює тільки з регістром AL.

Якщо при виконанні операції додавання упакованих BCD-чисел

установлено прапор AF = 1 або значення молодшого напівбайта регі-

стра AL > 9, чи встановлено прапор CF = 1 або значення регістра

AL > 9Fh, то це свідчить про недостовірність одержаного результату.

Необхідне корегування виконується за допомогою команди DAA, яка

збільшує вміст регістра AL на 06h або 60h відповідно. Корегування

починається з молодшого напівбайта.

Установлення прапора CF в 1 після виконання команди DAA

говорить про те, що відбулося перенесення в старший розряд операн-

да, який потрібно врахувати при додаванні старших десяткових цифр

BCD-числа.

Page 153: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

153

Наприклад:

; додавання двох упакованих BCD-чисел: 55 + 18 = 73

mov al, 55h ; al = 55h – упаковане BCD-число 55

mov bl, 18h ; bl = 18h – упаковане BCD-число 18

add al, bl ; al = 6Dh, af = 0, cf = 0

daa ; al = 73h, af = 1, cf = 0

; додавання двох упакованих BCD-чисел: 55 + 68 = 123

mov al, 55h ; al = 55h – упаковане BCD-число 55

mov bl, 68h ; bl = 68h – упаковане BCD-число 68

add al, bl ; al = 0BDh, af = 0, cf = 0

daa ; al = 23h, af = 1, cf = 1

Команда десяткового корегування після віднімання DAS (Decimal

Adjust for Subtraction) використовується для корегування результату

віднімання двох упакованих BCD-чисел. Команда DAS добре працює,

якщо потрібно виконати корегування тільки над молодшим напівбайтом

регістра AL. Про достовірність одержаних результатів свідчать прапори

AF та CF, установлені в нуль, і команда DAS, яка не виконує ніяких дій.

Якщо прапор AF = 1 і CF = 0 або молодший напівбайт регістра AL > 09h,

то виконується корегування за допомогою віднімання 6 від молодшого

напівбайта. Ураховуючи, що операція віднімання в процесорі замінюєть-

ся операцією додавання, то до молодшої тетради регістра додається

число10 (двійковий код 1010).

Якщо під час операції віднімання двох упакованих BCD-чисел буде

установлено в одиницю прапор перенесення CF або старша тетрада ре-

гістра AL більша 9, то корегування виконується відніманням від AL чис-

ла 60h. Якщо після виконання команди DAS прапор CF = 1, то одержаний

результат трактується як від'ємне двійкове доповнення. Абсолютне зна-

чення можемо одержати, виконуючи зміну знака результату, після чього

знову виконати корекцію за допомогою команди DAS.

Наприклад:

; виконати корегування результату віднімання двох упакованих

; BCD-чисел: 57 – 83 = –26

mov al, 57h ; al = 57h – упаковане BCD-число 57

mov bl, 83h ; bl = 83h – упаковане BCD-число 83

sub al, bl ; al = al – bl = 0D4h, cf = 1, af = 0

das ; al = 74h, cf = 1, af = 0

jc m1 ; перехід на мітку m1, якщо cf = 1

jmp m2

Page 154: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

154

m1: neg al ; al = 8Ch – зміна знака операнда, cf = 1, af = 1

das ; al = 26h – результат скореговано

m2: mov ah, 4ch

int 21h

4.3. Логічні команди

Робота логічних команд базується на правилах алгебри логіки, що

оперують на рівні понять "істина" та "неправда" (що означає прийнят-

тя значень "1" та "0"). Усі операції виконуються порозрядно над бай-

тами або словами. При порозрядному виконанні операцій кожен біт є не-

залежним.

До логічних команд відносяться логічне додавання, множення, за-

перечення, виключаюче АБО, порівняння. Результати виконання логіч-

них операцій можуть бути зведені в табл. 3.10. Під час виконання логіч-

них операцій над двома операндами прапори перенесення CF і перепов-

нення OF скидаються в 0, а прапори знака SF, паритету PF і нуля ZF

відображають результати виконання операцій.

Таблиця 3.10. Результати виконання логічних команд

Результати операцій Операнд 1 Операнд 2

AND OR XOR NOT

0 0 0 0 0 –

0 1 0 1 1 –

1 0 0 1 1 –

1 1 1 1 0 –

0 – – – – 1

1 – – – – 0

Команда логічного множення (логічне І) AND (logical AND) вико-

ристовується для порозрядного логічного множення двох операндів.

Кожен біт результату дорівнює 1, якщо відповідні біти операндів рівні 1,

в інших випадках біт результату дорівнює 0. Результат операції містить-

ся за адресою першого операнда. Цю команду зручно застосовувати

для примусової установки або скидання певних бітів операнда.

Структура команди:

and приймач, джерело

Наприклад:

and al, 00000011b ; в AL не змінюються нульовий та перший

; розряди, а інші будуть нульовими

and al, 0fch ; в AL нульовий і перший розряди будуть нульовими

Page 155: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

155

Команда логічного додавання (логічне АБО) OR (logical OR) при-

значена для виконання порозрядного додавання окремих біт операндів.

Якщо біт маски рівний 1, то відповідний біт приймача буде дорівню-

вати 1, а при нульовому біті маски відповідні значенням бітів першого

операнда не будуть змінюватися.

Структура команди:

OR приймач, маска

Наприклад

mov al, 04h ; al = 00000100b

mov bl, 02h ; bl = 00000010b

or bl, al ; bl = 00000110b

Команда логічне виключаюче АБО XOR (logical eXclusive OR) ви-

користовується для виконання операції логічного виключаючого АБО

над двома операндами. Результат операції записується в перший опе-

ранд. При виконанні операції логічного виключаючого АБО біт резуль-

тату дорівнює 1, якщо значення відповідних бітів операндів різні, в інших

випадках – дорівнює 0.

Структура команди:

xor приймач, джерело

Наприклад:

xor al, 01h ; нульовий біт регістра AL зміниться на протилежне

; значення, зворотнє

xor al, al ; вміст регістра AL буде очищено

Команда інвертування операнда NOT (NOT operand) застосо-

вується для зміни всіх бітів операнда джерела на протилежне.

Структура команди:

not джерело

Наприклад:

mov al, 5Ah ; al = 01011010b

not al ; al = 10100101b

Команда логічного порівняння TEST (TEST operand) виконує ло-

гічне множення двох операндів, але не записує результат операції, а вста-

новлює тільки прапори CF, PF, ZF. Команда TEST використовується

з командами умовного переходу для аналізу результату порівняння

операндів.

Page 156: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

156

Структура команди:

test приймач, джерело

Наприклад:

mov ax, 0007h

mov bl, 02h

div bl ; al = 03h, ah = 01h

test ah, 01h ; zf = 0

jnz m1 ; перехід на мітку m1, якщо нульовий біт AL дорівнює 1

………

m1: ; операнд в AL непарний

4.4. Команди зсуву

Множення або ділення чисел на значення, кратне двійці, легко вико-

нати за допомогою зсуву на відповідну кількість розрядів вправо або

вліво за допомогою спеціальних команд, які мають наступну структуру:

<Команда зсуву> операнд, лічильник

SHL

SHR

SAR

SAL

Операнд 0

0

0

ROL

ROR

RCL

RCR

Операнд

CF

CF

ОперандCF

ОперандЗн CF

ОперандCF

Операнд CF

ОперандCF

Операнд CF

Кількість кроків зсуву

задається за допомогою

лічильника зсуву в діапазо-

ні від 0 до 31, який може бу-

ти представлений операн-

дом або регістром CL. Про-

цесор використовує тільки

п'ять молодших розрядів

лічильника. При перетво-

ренні команд зсуву в машин-

ні коди формуються одно-

крокові команди, кількість

повторень яких відповідає

вмісту лічильника.

Команди зсуву розділя-

ються на команди логічно-

го, арифметичного та цик-

лічного зсуву. Робота ко-

манд зсуву представлено

на рис 3.7.

Команди логічного зсу-

ву SHL (SHift logical Left)Рис. 3.7. Структура роботи команд зсуву

Page 157: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

157

і SHR (SHift logical Right) дозволяють зсувати інформацію вліво та впра-

во на задану кількість кроків відповідно.

Команди мають наступну структуру:

shl операнд, лічильник

shr операнд, лічильник

При виконанні команд логічного зсуву біти, які виходять за межі опе-

ранда, заносяться в прапор перенесення CF. У ньому буде зберігатися

останній оброблений біт, а всі інші загубляться. Звільнені поля заповню-

ватимуться нулями.

Зсув вліво на один біт (число 0000 0001b перетворюється в 0000

0010b) рівноцінний команді множення MUL, але розмірність операнда не

змінюється. Зсув вправо на один біт (число 0000 0011b перетворюється

в 0000 0001b) рівноцінний цілочисловому діленню на 2, тобто зникає част-

ка від ділення.

Наприклад:

mov cl, 2

mov al, 09h ; al = 00001001b

shr al, 2 ; al = 00000010b

shl al, cl ; al = 00001000b

; виконати множення 25 на 4

mov al, 25 ; al = 00011001b

shl al, 2 ; al = 01100100b

; виконати множення 100 на 4

mov al, 64h ; al = 01100100b

shl al, 2 ; al = 10010000b

В останньому прикладі отримався недостовірний результат через

вихід значущих бітів операнда за його межі, що зафіксовано прапо-

ром CF.

Арифметичні команди зсуву SAL (Shift Arithmetic operand Left)

і SAR (Shift Arithmetic operand Right) виконують арифметичний зсув

операнда вліво або вправо відповідно.

Структура команд:

sal операнд, лічильник

sar операнд, лічильник

Команда SAL працює аналогічно команді SHL, і при трансляції вона

замінюється на команду SHL.

При виконанні команди SAR значення знакового розряду віднов-

Page 158: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

158

люється на кожному кроці, що дозволяє використовувати її для ариф-

метичного зсуву операнда вправо.

Наприклад:

mov al, 0A7h ; al = 10100111b

sar al, 4 ; al = 11111010b

mov al, 58h ; al = 01011000b

sar al, 4 ; al = 00000101b

Команди циклічного зсуву забезпечують переміщення інформації

по колу вправо або вліво. Розрізняють простий циклічний зсув і зсув із

включенням в коло прапора CF.

Прості команди циклічного зсуву вліво ROL (Rotate operand Left)

або вправо ROR (Rotate operand Right) мають наступну структуру:

rol операнд, лічильник

ror операнд, лічильник

При зсуві операнда вліво на один розряд, старший біт займає місце

молодшого біта, а вправо – молодший біт операнда займає місце стар-

шого біта. Одночасно біт, який виходить за поле операнда, записується в

прапор перенесення CF.

Приклад:

; поміняти місцями напівбайти регістра AL

mov al, 5ah ; al = 01011010b

mov cl, 4

rol al, cl ; al = 10100101b

ror al, 2 ; зсунути на 4 розряди вправо, al = 01101010b

Команди циклічного зсуву через прапор перенесення CF RCL

(Rotate operand through Carry flag Left) і RCR (Rotate operand through

Carry flag Right) включають в кільце зсуву прапор CF і мають наступну

структуру:

rcl операнд, лічильник

rcr операнд, лічильник

Біт, який виходить за межі операнда, потрапляє в прапор CF, а його

вміст – у звільнене поле операнда.

Наприклад:

mov al, 25h ; al = 00100101b, cf = 0

rcr al, 1 ; al = 00010010b, cf = 1

rcr al, 1 ; al = 10001001b, cf = 0

Page 159: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

159

4.5. Команди передачі керування

Звичайно програма складається з деякого набору кодів команд із

лінійною послідовністю виконання, але дуже часто виникає необхідність

змінити порядок проходження команд. Рішення може прийматися на ос-

нові аналізу деяких умов або даних, а також за необхідності перейти в

іншу точку програми. Для цієї мети служать команди передачі керуван-

ня. Такі команди змінюють вміст регістрів CS і IP, у результаті чого

мікропроцесор вибирає для виконання команду в іншій ділянці програми.

Можна виділити чотири основні групи команд передачі керування:

безумовної передачі керування; виклику процедури та повернення з про-

цедури; умовного переходу; керування циклами.

Команди безумовної передачі керування. Для зміни послідовності

виконання програми служить команда JMP, яка дозволяє перейти на за-

дану адресу без збереження інформації про точку повернення. Команда

JMP має таку структуру:

JMP <модифікатор> адреса_переходу

Адресою переходу може бути мітка або змінна, яка містить адресу.

За допомогою команди JMP можна не тільки виконувати перехід в по-

точному сегменті, але звертатися і до інших. Дальність переходу визна-

чається модифікатором команди.

У межах поточного сегмента перехід може бути коротким (SHORT),

якщо адреса переходу знаходиться на відстані від –128 до +127 байтів,

і близький (NEAR), для якого адреса може змінюватися в межах усьо-

го сегмента. При організації таких переходів змінюється тільки вміст

регістра IP. Якщо наша команда буде вказувати на змінну, то її вміст

буде додано до вмісту регістра IP і в такий спосіб буде визначено адресу

переходу. Якщо тип переходу не вказується, то використовується близь-

кий перехід.

Для переходу в інший сегмент використовується далекий перехід

(FAR) і при цьому змінюється вміст регістрів CS та IP.

Залежно від модифікатора, крім дальності переходу, буде змінюва-

тися розмір машинних кодів: коротка команда складатиметься з двох

байтів, а близька – з трьох.

Наприклад:

jmp short m1

jmp m1

jmp near ptr m1

Page 160: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

160

У модифікаторі використовується оператор перевизначення типу ptr,

який уточнює тип мітки або змінної.

У програмі Pr10_a4 рядок із сегмента даних буде виводиться на

екран безкінечно. Команда JMP організує безкінечний цикл виконання

виводу рядка на екран монітора:

; програма Pr10_a4

dat segment

a1 db 'assembler',10,13,'$'

dat ends

code segment

assume cs:code, ds:dat

start:

mov ax, dat

mov ds, ax

lea dx, a1 ; завантаження адреси повідомлення

mov ah, 09h ; задавання 9-ї функції переривання 21h, яка

; забезпечує виведення на екран рядка повідомлення

label_1:

int 21h ; переривання DOS

jmp label_1 ; перехід на виклик переривання

mov ah, 4Ch

int 21h

code ends

end start

Команди умовної передачі керування. Ці команди дозволяють

здійснити перехідна на виконання іншого фрагмента програми при вико-

нанні певних умов. Умови переходу можуть визначатися по вмісту пра-

порів, регістра CX, по результатам виконання команди порівняння CMP.

Усі команди умовного переходу мають однакову структуру:

J<cc> мітка_переходу

де мнемокод усіх команд починається з літери "j"; "cc" визначає конкрет-

ну умову переходу.

Мітка_переходу може перебувати тільки в межах поточного сег-

мента коду, міжсегментна передача не допускається.

Умови переходів задаються за допомогою позначень, які представ-

лені в табл. 3.11. Дозволяється задавати складні умови, наприклад: "якщо

не більше і не дорівнює", "якщо вище і дорівнює" та ін.

Page 161: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

161

Таблиця 3.11. Позначення для формування умов у командах j<cc>

Операнди Умова

без знака зі знаком

Більше G (greater) A (above)

Менше L (less) B (below)

Дорівнює E (equal)

Невиконання умови N (not)

Аналізуючи прапори, які змінюються при виконанні команди по-

рівняння CMP, для використання можна запропонувати ряд команд

(табл. 3.12).

Таблиця 3.12. Команди умовного переходу аналізу порівняння операндів

Код

команди

Стан

прапорів

Аналіз

операндів* Умова переходу

JA

JNBE

CF = 1 та

ZF = 0 A > B

Якщо вище

Якщо не менше і не дорівнює

JAE

JNB CF = 0 A => B

Якщо вище або дорівнює

Якщо не нижче

JB

JNAE CF = 1 A < B

Якщо нижче

Якщо не вище та не дорівнює

JBE

JNA

CF = 1 або

ZF = 1 A <= B

Якщо нижче або дорівнює

Якщо не вище

JE ZF = 1 A = B Якщо дорівнює

JG

JNLE

SF = OF та

ZF = 0 A > B

Якщо більше

Якщо не менше та не дорівнює

JGE

JNL SF = OF A => B

Якщо більше або дорівнює

Якщо не менше

JL

JNGE SF <> OF A < B

Якщо менше

Якщо не більше та не дорівнює

JLE

JNG

SF <> OF

або ZF = 1 A <= B

Якщо менше та дорівнює

Якщо не більше

JNE ZF = 0 A <> B Якщо не дорівнює

Примітка. *A – операнд_1, B – операнд_2. Команда CMP виконує дію

віднімання (A – B).

Користувач може за своїм бажанням вибрати необхідне завдання

умови, що полегшує використання команд умовного переходу, які є абсо-

лютно еквівалентними та рівноправними в програмі.

Співвідношення між операндами можна аналізувати за вмістом пра-

Page 162: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

162

порів CF, SF та ZF. Існують команди, в яких умовні переходи відбу-

ваються на основі аналізу стану цих прапорів. Якщо в умові вказано

прапор, то перехід на мітку відбувається при одиничному його значенні.

При запереченні прапора перехід на мітку відбувається при нульовому

його значенні.

Зв'язок мнемокодів команд, назв прапорів й умов переходів наведе-

но в табл. 3.13. Ці команди можна використовувати після будь-яких ко-

манд, що змінюють зазначені прапори.

Таблиця 3.13. Використання прапорів в командах умовного переходу

Код команди Стан прапорів Умова переходу

JC CF = 1 Якщо є перенесення

JNC CF = 0 Якщо немає перенесення

JO OF = 1 Якщо є переповнення

JNO OF = 0 Якщо немає перенесення

JP PF = 1 Якщо є парність

JNP PF = 0 Якщо немає парності

JS SF = 1 Якщо є знак

JNS SF = 0 Якщо немає знаку

JZ ZF = 1 Якщо є нуль

JNZ ZF = 0 Якщо немає нуля

Організація виклику процедур. Одним з важливих методів зміни

послідовності виконання програми є виклик процедури CALL і повер-

нення з процедури RET. Особливість організації програми з процедурою

полягає в тому, що механізм виклику процедури дозволяє запам'ятати

інформацію про стан програми в точці виклику і потім повернутися

в дану точку після завершення її роботи. Команда виклику процедури

має наступну будову:

call [модифікатор] ім'я_процедури

Команда CALL перериває виконання програми та передає управлін-

ня за адресою виклику, але при цьому заносить у стек адресу наступної

команди для можливості повернення.

Розрізняють передачу внутрішньосегментну та міжсегментну. При

внутрішньосегментному переході процедура, яку викликаємо, знахо-

диться в даному сегменті і для повернення потрібно запам'ятати тільки

стан регістра команд IP. Команди внутрішньосегментного переходу ма-

ють тип відстані near, який можна не вказувати. При організації між-

сегментного переходу обов'язково потрібно вказувати тип відстані far,

а для організації повернення потрібно запам'ятати адреси сегмента та

Page 163: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

163

команди – стан регістрів CS та IP. Для повернення керування перерва-

ній програмі використовується команда RET, яка знаходиться в проце-

дурі. По закінченню роботи процедури команда RET зчитує зі стека

адресу повернення та перезаписує в регістри CS та IP.

Організація циклів. Для організації багатократного звертання до

виділеного фрагмента програми використовують цикли. Організувати

циклічне виконання деякої ділянки програми можна за допомогою ко-

манд умовної та безумовної передачі керування. Але існує спеціальна

команда організації циклів, яка має декілька модифікацій: LOOP, LOOPE

або LOOPZ, LOOPNE або LOOPNZ. Для задавання кількості повторів

циклу використовують регістр CX, вміст якого перед виконанням ко-

манди LOOP зменшується на 1. Якщо задати нульове значення регістра

CX, цикл буде повторюватися 216 = 65 536 разів.

Розміщення мітки для команди LOOP не повинно виходити з діапа-

зону від –128 до +127 байтів.

Для запобігання виконання циклу при нульовому значенні CX перед

початком циклу необхідно перевірити його вміст. Для перевірки вмісту

регістра СХ слугує команда JCXZ (Jump if CX = Zero), яка дозволяє

виконати обхід циклу при CX = 0. Якщо вміст CX не дорівнює 0, то

здійснюється передача керування наступній за JCXZ команді програми.

Команда має наступну структуру:

jcxz мітка

Команди організація циклу та її модифікації мають наступну струк-

туру:

loop мітка

loope/loopz мітка

loopne/loopnz мітка

Команда LOOP дозволяє організувати цикли з автоматичним змен-

шенням лічильника циклу. При виконанні команди вміст регістра CX змен-

шується на 1 і проводиться перевірка його вмісту. Якщо CX = 0, керуван-

ня передається на наступну після LOOP команду і виділений фрагмент

програми для циклу більше не виконується. У випадку, якщо CX > 0, то

керування передається на мітку переходу і виконується цикл. Якщо за-

дати значення регістра CX = 1, фрагмент програми виконується один

раз, але цикл виконуватися не буде.

Команди LOOPE/LOOPZ й LOOPNE/LOOPNZ за принципом своєї

роботи є взаємопротилежні. Вони дозволяють організувати достроко-

вий вихід із циклу, провівши додатково аналіз прапора ZF.

Команди LOOPE й LOOPZ (Loop till cx <> 0 or Zero Flag = 1) вико-

нують однакові дії, тому їх можна використовувати окремо за бажан-

Page 164: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

164

ням. Вони дозволяють повторювати цикл, поки CX <> 0 або ZF = 1.

Якщо CX = 0 або ZF = 0, керування передається на наступну після

POOPE/LOOPZ команду.

Команди LOOPNE й LOOPNZ (Loop till cx <> 0 or Not Zero flag = 0)

забезпечують виконання циклу, якщо CX > 0 й ZF = 0. Якщо CX = 0 або

ZF = 1, то керування передається на наступну після LOOPNE/LOOPNZ

команду.

Розглянемо програму Pr9_a12, в якій в циклі за допомогою команди

LOOP заповнюється масив A1 послідовністю цифр від 0 до 9, а потім

виводиться на екран монітору:

; Pr9_a12

dat1 segment

a1 db 10 dup (?),'$'

a2 db 'Hello','$'

dat1 ends

cod1 segment

assume ds:dat1, cs:cod1, es:dat1

start:

mov ax, dat1

mov ds, ax

move еs, ax

mov al, '0' ; al = 30h – ASCII код цифри 0

mov cx, 10 ; cx = 000Ah – лічильник циклу

mov di, 0

mov bx, offset a1 ; в BX записується початкова адреса масиву a1

jcxz m2

; організація циклічного заповнення масиву

m1: mov [bx+di], al ; занесення елементів у масив

inc al ; модифікація елементу масиву

inc di ; модифікація індексу

loop m1

; вивід масиву на екран монітора

m2: xor ax, ax

mov ah, 09h

mov dx, offset a1

int 21h

mov ah, 4Ch

int 21h

cod1 ends

end start

Page 165: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

165

Команди LOOPE/LOOPZ й LOOPNZ/LOOPNE зручно використо-

вувати разом з командами, які в результаті своєї роботи змінюють зна-

чення прапора ZF. Наприклад, організувати заповнення масиву в про-

грамі Pr9_a12 до моменту появи цифри 6, яка має ASCII код 36h:

; зупинка циклу при появі в регістрі AL коду 36h

mov al, 30

m1: mov [bx+di], al ; занесення елементів у масив

inc al ; модифікація елементу масиву

inc di ; модифікація індексу

cmp al, 36h

loopnz m1 ; при al = 36h цикл завершиться і буде

; виконуватися наступна команда програми

4.6. Ланцюжкові команди

Дуже часто виникає необхідність обробляти великі обсяги даних,

що перебувають у сусідніх елементах пам'яті. Спочатку обробка таких

даних велася як послідовність байтів, що й дало назву – команди оброб-

ки рядків символів, а формат даних називають рядковими.

Ланцюжкові команди можуть виконувати дії над даними, розмірність

яких становить байт, слово або подвійне слово. Ланцюжок може містити

до 64 Кбайт даних.

Кожна ланцюжкова команда має три форми подання в залежності

від типу операндів. У відповідності до типів операндів байт, слово або

подвійне слово до команди додається відповідний символ -b, -w або -d.

Ланцюжкові команди можуть бути без визначення типу операндів, але

транслятор асемблера визначає їх тип за їхнім описом у пам'яті та гене-

рує одну із трьох машинних команд (наприклад, MOVSB, MOVSW,

MOVSD).

Над ланцюжками даних можуть виконуватися такі операції:

пересилання ланцюжка:

movs приймач, джерело

порівняння ланцюжків:

cmps приймач, джерело

сканування ланцюжка:

scas приймач

завантаження елемента з ланцюжка:

lods джерело

збереження елемента в ланцюжку:

stos приймач

Page 166: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

166

Перш ніж починати роботу з ланцюжковими командами, необхідно

провести підготовчу роботу. До особливостей ланцюжкових операцій

можна віднести: розташування областей даних у пам'яті, вибір напрямку

обробки даних, автоматичне просування до наступного елемента дано-

го ланцюжка.

Для організації роботи ланцюжкових команд необхідно виконати

такі дії:

сформувати фізичні адреси ланцюжків – джерело, приймач;

визначити початкові зміщення інформації в ланцюжках;

визначити порядок зміни адрес у ланцюжках;

визначити кількість повторів операції.

Застосування ланцюжкових команд накладає обмеження на області

розташування даних. Оброблювані дані (джерело) можуть перебувати

в області пам'яті, описуваної сегментним регістром DS, тобто в поточ-

ному сегменті даних. Оброблені дані (приймач) можуть міститися тіль-

ки в додатковому сегменті даних, який задається сегментним регі-

стром ES.

Розташування інформації всередині ланцюжків визначається по

зміщенню, занесеному в спеціальні індексні регістри. Індексний регістр

SI визначає розташування інформації для ланцюжка-джерела, а DI – для

ланцюжка-приймача. Повні фізичні адреси для операндів ланцюжкових

команд визначаються наступними регістровими парами: джерела – пари

DS:SI; приймача – пари ES:DI.

При виконанні ланцюжкових команд вміст регістрів SI та DI змінюєть-

ся автоматично відповідно до розмірності операндів, забезпечуючи тим

самим автоматичне просування по ланцюжку. Крок просування по лан-

цюжку визначається кодом ланцюжкової команди.

Під час роботи ланцюжкових команд є можливість вибирати моди-

фікацію індексних регістрів у напрямку збільшення або зменшення їхнього

вмісту. Знак цієї модифікації визначається значенням прапора напрямку

DF у регістрі прапорів RF. Якщо DF = 0, то значення індексних регістрів

SI та DI буде автоматично збільшуватися при виконанні ланцюжкових

команд, тобто обробка здійснюватиметься в напрямку зростання адре-

си від початку ланцюжка до його кінця. При DF = 1 значення індекс-

них регістрів SI та DI буде автоматично зменшуватися і обробка йтиме

в напрямку зменшення адреси від кінця ланцюжка до початку.

Станом прапора DF можна керувати за допомогою двох команд:

CLD (Clear Direction Flag) – очистити прапор напрямку. Команда

скидає прапор напрямку DF в 0;

Page 167: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

167

STD (Set Direction Flag) – установити прапор напрямку. Команда

встановлює прапор напрямку DF в 1.

Будь-яка ланцюжкова команда виконує тільки одноразове звертання

до елементів ланцюжка даних. Щоб організувати багаторазове звертань

застосовуються префікси повторення. Кількість повторів виконання

ланцюжкових команд визначається за станом регістра СХ або за прапо-

ром нуля ZF.

Префікси повторення встановлюють перед потрібною ланцюж-

ковою командою в поле мітки, змушуючи її виконуватися в циклі.

Можна виділити п'ять префіксів повторення, що мають свої мне-

монічні позначення.

Префікс повторення REP (REPeat) використовується з командами

пересилання MOVS і збереження елементів у ланцюжку STOS. Префікс

REP автоматично зменшується вміст СХ на одиницю та змушує дані

команди виконуватися, поки вміст в CX не стане рівним 0.

Префікси повторення REPE або REPZ (REPeat while Equal or Zero)

ефективно використовуються з командами порівняння CMPS і скануван-

ня ланцюжків SCAS для пошуку елементів ланцюжка, що відрізняються

від завдання пошуку. Цикл повторюється, поки вміст регістра СХ не до-

рівнюватиме нулю або прапор ZF дорівнюватиме 1. Як тільки СХ = 0 або

ZF = 0, керування передається наступній команді програми.

Префікси повторення REPNE або REPNZ (REPeat while Not Equal

or Zero) можна використовувати з командами порівняння CMPS і скану-

вання ланцюжків SCAS для пошуку співпадаючих елементів ланцюжків.

Цикл повторюється, поки вміст регістра СХ відрізнятиметься від нуля

або прапор ZF дорівнюватиме нулю. Після досягнення СХ = 0 або уста-

новки прапора ZF = 1 цикл припиняється й відбувається перехід на ви-

конання наступної команди програми.

Команда пересилання ланцюжка MOVS (MOVe String) виконує пе-

ресилання елементів з однієї області пам'яті в іншу.

Команда має таку структуру:

movs приймач, джерело

Ланцюжкова команда після трансляції перетвориться в одну з трьох

машинних команд залежно від типу операндів:

MOVSB (MOVe String Byte) – переслати ланцюжок байтів;

MOVSW (MOVe String Word) – переслати ланцюжок слів;

MOVSD (MOVe String Double word) – переслати ланцюжок подвій-

них слів.

Page 168: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

168

Команда MOVS пересилає тільки один елемент і модифікує значен-

ня регістрів SI та DI. Для виконання будь-якої ланцюжкової команди

необхідно передбачити в програмі такі дії:

установити значення прапора DF залежно від того, у якому напрям-

ку будуть оброблятися елементи ланцюжка: зростання чи зменшен-

ня адрес;

завантажити покажчики на адреси ланцюжків у пам'яті в пари регі-

стрів DS:SI та ES:DI;

задати в регістр CX кількості елементів, що підлягають обробці;

установити перед командою префікс REP.

Пересилання символів з одного рядка в інший командою MOVS

представлено наступним фрагментом програм:

; переслати дані з рядка s1в рядок s2

dat1 segment

s1 db 'asdfghjklm','$'

s1_len equ $-s1-1 ; знаходження довжини рядка s1

s2 db 40 dup ('0'),'$'

dat1 ends

code segment

assume cs:code, ds:dat1, es:dat1

start:

mov ax, dat1

mov ds, ax

mov es, ax

; підготовка до пересилки рядка s1

mov cx, s1_len ; установка лічильник повторень

mov si, offset s1 ; завантаження в SI адреси зсуву рядка s1

lea di, s2 ; завантаження в DI адреси зсуву рядка s2

cld ; df = 0 – вміст регістрів SI та DI буде збільшуватися

; пересилка елементів рядка

rep movsb

; вивід на екран монітора одержаного рядка

mov dx, offset s2

mov ah, 09h

int 21h

; завершення роботи програми

mov ah, 4Ch

int 21h

code ends

end start

Page 169: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

169

Для організації пересилку рядка замість префікса REP можна ви-

користовувати команди умовної передачі керування. Наприклад, в наве-

деній програмі замінимо фрагмент пересилки рядка:

; пересилка елементів рядка

label_1:

movsb

dec cx ; зменшення вмісту лічильника на 1

jnz label_1 ; цикл буде повторюватися, якщо CX > 0

Команда CMPS (Compare String) здійснює операцію порівняння еле-

ментів ланцюжка-джерела з елементами ланцюжка-приймача і має таку

структуру:

cmps приймач, джерело

Адреси порівнюваних даних завантажуються в регістрові пари:

DS:SI – джерела; ES:DI – приймача.

Команда CMPS від елемента, ланцюжка-джерела віднімає елемент

ланцюжка-приймача. При цьому результат не змінюється, а встановлю-

ються лише прапори ZF, SF і OF.

Команду CMPS зручно використовувати для пошуку однакових

або різних елементів ланцюжків. Префікси повторення REPE/REPZ

або REPNE/REPNZ дозволяють припинити роботу циклу знаходження

заданих елементів ланцюжків при виконанні умови.

Місце розташування аналізованих елементів у ланцюжку визна-

чається вмістом відповідних індексних регістрів. Для отримання справж-

ньої адреси цих елементів необхідно вміст індексних регістрів збільшити

або зменшити на довжину елемента ланцюжка.

Розглянемо програму порівняння двох рядків командою CMPS:

; порівняння елементів рядків s1та s2

dat segment

s1 db '12.10.2006','$'

s1_len equ $-s1-1 ; знаходження довжини рядка s1

s2 db '12.10.2006','$'

s2_len equ $-s2-1 ; знаходження довжини рядка s2

msg_yes db 'Рядки співпадають – yes',10,13,'$'

msg_no db 'Рядки не співпадають – no',10,13,'$'

dat ends

code segment

assume cs:code, ds:dat, es:dat

Page 170: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

170

start:

mov ax, dat

mov ds, ax

mov es, ax

; знайти коротший рядок та встановити лічильник

mov ax, s1_len

cmp ax, s2_len

jae c1

mov cx, s1_len

jmp c2

c1: mov cx, s2_len

; підготовка до виконання ланцюжкових команд

c2: cld ; df = 0 – вибір напрямку обробки рядків

lea si, s1 ; завантаження в SI адреси зсуву рядка s1

lea di, s2 ; завантаження в DI адреси зсуву рядка s2

; шукати відмінність у рядках

repe cmps ds:s1, es:s2 ; скануються досліджувальні рядки

je label_yes ; рядки подібні

jne label_no ; рядки відрізняються

; виведення повідомлень

label_yes:

lea dx, msg_yes

jmp n1

label_no:

lea dx, msg_no

n1:

mov ah, 09h

int 21h

; завершення роботи програми

mov ax, 4c00h

int 21h

code ends

end start

Команда сканування ланцюжків SCAS (SCAning String) дозволяє

організувати пошук заданого значення в області пам'яті. Елемент для

пошуку записують в регістр AL або AX.

Команда має таку структуру:

scas приймач

Page 171: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

171

У команді задається ланцюжок у додатковому сегменті памяті, ад-

ресу якого необхідно занести в регістри ES:DI.

При виконанні команди SCAS послідовно від вмісту регістра-акуму-

лятора віднімається вміст чергового елемента-ланцюжка. Залежно від

результатів пошуку проводиться установка прапорів, а самі операнди

не змінюються.

З командою SCAS зручно застосовувати префікси REPE/REPZ, які

організовують пошук доти, поки не буде знайдено відмінний елемент,

або REPNE/REPNZ – поки не буде знайдено подібний елемент.

Пошук символу в рядку командою SCAS представлений у наступній

програмі:

; знайти символ в рядку s1

dat segment

s1 db 'Turbo Assembler','$'

s1_len = $-s1-1

s1_yes db 'Символ знайдено – yes','$'

s1_no db 'Символ не знайдено – no', '$'

dat ends

code segment

assume cs:code, ds:dat, es:dat

; завантаження початкових адрес сегментів DS та ES

start:

mov ax, dat

mov ds, ax

mov es, ax

; підготовка до виконання ланцюжкової команди SCAS

mov al, 's' ; 's' – символ для пошуку

cld ; df = 0

lea di, s1 ; завантаження в DI адреси зміщення рядка s1

mov cx, s1_len ; установка лічильника

; пошук заданого символу

repne scas s1

; вибір повідомлення

jne label_no ; символ не знайдено

label_yes:

lea dx, s1_yes ; завантаження адреси зміщення повідомлення

; s1_yes

; вивід повідомлення s1_yes

jmp n1

Page 172: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

172

label_no:

lea dx, s1_no ; завантаження адреси зміщення повідомлення s1_no

n1:

mov ah, 09h

int 21h

; завершення роботи програми

mov ah, 4ch

int 21h

code ends

end start

Команда завантаження елемента ланцюжка в акумулятор LODS

(LOad String) дозволяє вилучити елемент ланцюжка та помістити його

в AL або AX. Команда має таку структуру:

lods джерело

У команді задається ланцюжок в основному сегменті пам'яті. Роз-

міщення елементів ланцюжка визначається вмістом пари регістрів DS:SI.

Цю команду зручно використати після команди SCAS, яка локалізує місце

розташування шуканого елемента в ланцюжку.

У наступному фрагменті програми виконується пошук у рядку S1

символу, який задано в регістрі DL з використанням команди LODS:

; пошук заданого символу

cld ; скидання прапора DF

lea si, s1 ; завантаження в SI зміщення s1

mov dl, 'А' ; у DL знаходиться символ для пошуку

label_1:

lodsb ; занесення символів з рядка s1 в регістр AL

cmp al, dl ; порівняння прочитаного символу

jne label_1 ; повторити пошук, якщо не знайдено символ

Команда перенесення елемента з акумулятора в ланцюжок STOS

(STOre String) дозволяє зберегти елемент з регістра-акумулятора

AL або AX у ланцюжку. Команда має таку структуру:

stos приймач

Операнд приймача вказує на ланцюжок у додатковому сегменті

даних.

Команда пересилає елемент з регістра AL або AX в елемент лан-

цюжка за адресою, що відповідає вмісту пари регістрів ES:DI. Якщо ви-

користати префікс повторення REP з командою STOS, то можна запов-

нити область пам'яті деяким фіксованим значенням, яке знаходиться в

регістрі AL або AX.

Page 173: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

173

Розглянемо програму заміни командою STOS у рядку всіх символів

'A' на інший символ:

; знайти великий символ 'A' і замінити на малий 'a'

dat segment

s1 db 'Turbo Assembler And pAscAl','$'

s1_len = $-s1-1

dat ends

code segment

assume cs:code, ds:dat, es:dat

; завантаження адрес сегментів DS та ES

start:

mov ax, dat

mov ds, ax

mov es, ax

; підготовка до виконання ланцюжкових команд SCAS та STOS

cld ; df = 0

lea di, s1 ; завантаження в SI адреси зміщення рядка s1

mov cx, s1_len ; установка лічильника

xor ax, ax

m0:

mov al, 'A' ; 'A' – символ для пошуку

repne scas s1 ; пошук

jcxz m1 ; завершення програми, якщо cx = 0

dec di ; повернення на знайдений символ

mov al, 'a' ; 'a' – символ для заміни

stos s1 ; заміна символу

jmp m0 ; продовжити пошук

m1:

mov ah, 09h ; вивід зміненого рядка

lea dx, s1

int 21h

mov ax, 4c00h ; завершення роботи програми

int 21h

code ends

end start

4.7. Команди керування прапорами

Існує ряд команд, які дозволяють управляти роботою МП. Команди

можна розбити на три групи: керування прапорами, зовнішньої синхроні-

зації, холостий хід.

Page 174: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

174

Команди керування прапорами дозволяють встановлювати або

скидати прапори формування перенесення CF, визначення напрямку зміни

адреси DF і дозвіл або заборону переривань IF.

Для керування режимом зовнішніх переривань існують однобайтові

команди STI та CLI. Команда STI встановлює прапор IF в 1, що дозволяє

виконати переривання від зовнішніх пристроїв. Установка прапора IF в 0

за допомогою команди CLI забороняє виконати зовнішні переривання.

Команди керування напрямками передачі змінюють вміст прапора

напрямку DF, який визначає порядок зміни адрес при виконанні ланцюж-

кових операцій. При DF = 0 вміст регістрів SI й DI буде автоматично

збільшуватися, забезпечуючи перехід до наступного елемента ланцюж-

ка даних зліва направо. При DF = 1 вміст регістрів SI й DI буде автома-

тично зменшуватися, забезпечуючи перехід у ланцюжку даних у зворот-

ному порядку – зправа наліво. При розробці програм з ланцюжковими

командами попереднє встановлення цього прапора є необхідною умовою

для правильної організації роботи з масивами даних. Для керування пра-

пором напрямку передачі застосовуються однобайтові команди STD та

CLD. Команда STD установлює прапор напрямку DF в 1, CLD – в 0.

Команди керування прапором перенесення CF дозволяють зміню-

вати значення прапора, що звичайно впливає на результати виконуваних

операцій. Для керування прапором застосовуються однобайтові коман-

ди STC, CLC та CMC. Команда STC установлює прапор перенесення в

1, CLC – в 0, а CMC інвертує вміст прапора.

Питання для самоперевірки

1. Яка структура машинної команди?

2. Різновиди методів адресації мікропроцесора.

3. Непряма адресація та її різновиди.

4. Основи мови асемблер для ЕОМ.

5. Пояснити особливості розробки програм на мові асемблер.

6. Технологія розробки програм на мові асемблер.

7. Структура команд асемблера.

8. Класифікація команд мікропроцесора.

9. Класифікація команд пересилання даних.

10. Організація обміну даними з портами пристроїв ЕОМ.

11. Формування адреси даних.

12. Стекова організація пам'яті.

13. Класифікація цілочислових арифметичних команд.

14. Виконання команд додавання та віднімання.

Page 175: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

175

15. Алгоритми виконання команд множення.

16. Алгоритми виконання команд ділення.

17. Команда порівняння даних.

18. Класифікація логічних команд.

19. Особливості виконання логічних команд.

20. Організація зсуву даних.

21. Команди лінійного зсуву.

22. Команди циклічного зсуву.

23. Класифікація команд передачі керування.

24. Особливості виконання команд передачі керування.

25. Команди безумовної передачі керування.

26. Команди передачі керування за умовою.

27. Формування команд передачі управління за умовою.

28. Використання процедур при написанні програм.

29. Команди управління циклами.

30. Пояснити різницю між рядковими та ланцюговими даними.

31. Класифікація ланцюгових команд.

32. Префікс повторів.

33. Використання індексних регістрів.

34. Зміна напрямку обробки ланцюга даних.

35. Особливості розробки програми обробки ланцюгових даних.

Список використаної література

1. Абель П. Язык Ассемблера для IBM PC и программирования. –

М.: Высшая шк., 1992. – 447 с.

2. Голубь Н. Искусство программировать на ассемблере. Лекции

и упражнения. – 3-е изд. – М.: ООО ДиаСофтЮП, 2005. – 832 с.

3. Зубков С. Assembler для DOS, Windows и Unix. – М.: ДМК Пресс,

2000. – 608 с.

4. Сван Т. Освоение Turbo Assembler. – С.Пб.: Диалектика, 1996. –

544 с.

5. Скэнлон. Л. Персональные ЭВМ IBM PC и XT. Программирова-

ние на языке ассемблера. – М.: Радио и связь, 1989. – 336 с.

6. Таненбаум Э. Архитектура комп'ютера. – С.Пб.: Питер, 2002. –

704 с.

7. Юров В., Дорошенко С. Assembler: учебный курс. – С.Пб.: Пи-

тер Ком, 1999. – 672 с.

Page 176: А. Г. Марченко, Т. Г. Смикодуб · 1000 1001 1010 1011 1100 ... нувати за допомогою алгоритмів ділення та множення:

Навчальне видання

МАРЧЕНКО Анатолій Григорович

СМИКОДУБ Тетяна Георгіївна

ЕЛЕКТРОННО-ОБЧИСЛЮВАЛЬНІ МАШИНИ

ТА МІКРОПРОЦЕСОРНІ СИСТЕМИ

(українською мовою)

Редактор О.В. Антоненко

Комп’ютерна правка та верстка О.М. Черевата

Коректор М.О. Паненко

Свідоцтво про внесення суб’єкта видавничої справи до Державного реєстру

видавців, виготівників і розповсюджувачів видавничої продукції

ДК № 2506 від 25.05.2006 р.

Підписано до друку 05.09.07. Папір офсетний. Формат 60×84/16.

Друк офсетний. Гарнітура "Таймс".Ум. друк. арк. 10,2. Обл.-вид. арк. 11,0.

Тираж 100 прим. Вид. № 3. Зам. № 275. Ціна договірна.

Видавець і виготівник Національний університет кораблебудування,

54002, м. Миколаїв, вул. Скороходова, 5