
Зубенко, Омельчук - Програмування. Поглиблений курс
.pdf
Розділ ІІ. ЕЛЕМЕНТИ ІНФОРМАТИКИ
.A716 = 0.65234375 ( = u ) |
(10) → (2) |
|||
0.3046875 ( = u1 = {u ×2} ) |
0 |
(= b1) |
||
0.609375 ( = u2 = {u1 ×2} ) |
|
(= b2 ) |
||
1 |
||||
0.21875 ( = u3 ) = {u2 ×2} |
|
(= b3 ) |
||
0 |
||||
0.4375 ( = u4 ) = {u3 ×2} |
|
(= b4 ) |
||
0 |
||||
0.875 ( = u5 ) = {u4 ×2} |
|
(= b5 ) |
||
1 |
||||
|
( = u6 ) = {u5 ×2} |
|
(= b6 ) |
|
0.75 |
1 |
|||
0.5 ( = u7 ) = {u6 ×2} |
|
(= b7 ) |
||
1 |
||||
0 ( = u8 ) = {u7 ×2} |
1(= b8 ) |
|||
0.25( = u ) |
(10) → (5) |
|||
|
( = u1 = {u ×5} ) |
|
(= b1) |
|
0.25 |
1 |
|||
|
( = u2 = {u1 ×5} ) |
|
(= b2 ) |
|
0.25 |
1 |
|||
|
( = u2 = {u1 ×5} ) |
|
(= b3 ) |
|
0.25 |
1 |
|||
… |
|
… |
||
|
||||
0.25 |
( = u ) |
(10) → (2) |
||
0.5 ( = u1 = {u ×2} ) |
|
(= b1) |
||
0 |
||||
0 ( = u2 ) = {u1 ×2} |
1(= b2 ) |
|||
■
Переведення чисел з основою p = 2m ,m > 0 . Для таких чисел іс-
нують спрощені правила переведень. Розглянемо їх на прикладі цілих переведень (24 ) → (2). Нехай дано n16 = akak −1...a0 – довільне шістна- дцяткове ціле й необхідно його перевести в еквівалентне двійкове
n |
|
= b b ...b . Маємо рівняння |
k |
16i = |
l |
2j |
відносно b |
|
. |
2 |
∑ a |
∑ b |
j |
||||||
|
l l −1 0 |
i |
|
j |
|
|
|
||
|
|
|
i =0 |
|
j =0 |
|
|
|
|
Нехай ai = (bi3bi2bi1bi0 )2 , i 1...k . Ліву частину можна перетворити таким чином:
|
|
k |
|
k |
(bi3 23 +bi222 +bi121 +bi0 |
20 )24i = |
|
|
|
∑ ai16i |
= |
∑ |
|
||
|
|
i =0 |
|
i =0 |
|
|
|
|
k |
(bi3 24i +3 |
+bi224i +2 +bi124i +1 +bi0 24i )= |
4k +3 |
2i . |
||
= |
∑ |
∑ bi ÷4i %4 |
|||||
|
i =0 |
|
|
|
|
i =0 |
|
161

ПРОГРАМУВАННЯ
Останній |
член у переведенні |
є |
|
значенням двійкового числа |
||||
|
|
|
|
|
|
|
|
|
b b |
b b |
|
…b b b b |
b b b b |
|
2 |
, отже, саме воно є шуканим ек- |
|
|
k3 k |
k1 k0 |
|
3 12 11 10 |
03 02 01 00 |
|
|
|
1442443 |
1442443 1442443 |
|
|
|||||
|
|
|
|
|
|
|
|
|
вівалентом, тобто n2 . Сформулюємо правило для переведення (16) →(2):
Щоб перевести довільне шістнадцяткове число у двійкове, до- статньо знайти двійкові чотирилітерні подання всіх його цифр і записати їх поспіль у тому самому порядку, розпочинаючи з по- дання старшої цифри.
Приклад 2.7. Перевести за спрощеним правилом шістнадцяткові числа у двійкові: а) A716 (див. прикл. 2.6); б) ABCDEF16 . Маємо:
а) 1010 0111 |
; б) 1010 1011 1100 1101 1110 1111 |
■ |
|
|
|
|||||||
{ {2 |
{ { { { { { 2 |
|
|
|
|
|||||||
A |
7 |
A |
|
B |
C |
D |
E |
F |
|
|
|
|
Розглянемо |
тепер |
обернене |
переведення |
(2) → (16). |
Нехай дано |
|||||||
n2 = akak −1...a0 |
– довільне ціле й необхідно його перевести в еквівален- |
|||||||||||
тне шістнадцяткове n |
|
= b b |
|
|
|
|
k |
2i = |
l |
16j |
||
|
...b . Маємо рівняння ∑ a |
∑ b |
||||||||||
|
|
16 |
l l −1 |
0 |
|
|
i |
|
j |
|
||
|
|
|
|
|
|
|
|
|
i =0 |
|
j =0 |
|
відносно bi , ліву частину якого, розпочинаючи з молодших розрядів,
розіб'ємо на сусідні четвірки (якщо k +1 не кратне 4 , то остання група цифр при цьому буде не четвіркою) і перетворимо:
|
|
|
|
|
|
|
k |
|
|
|
|
k ÷4−1 3 |
|
a4× j +m 24× j +m |
|
|
|
k |
ai 2i = |
|
||||||||
|
|
|
|
|
|
|
∑ ai 2i = |
|
∑ ∑ |
|
+ |
|
∑ |
|
||||||||||||||
|
|
|
|
|
|
|
i =0 |
|
|
|
j =0 m =0 |
|
|
|
|
|
|
|
i =k ÷4×4 |
|
|
|
|
|||||
= |
k ÷4−1 |
(16 |
j |
3 |
a |
|
|
|
m |
k |
÷4 |
k |
|
a |
i %4 |
= |
k ÷4−1 |
b |
16 |
j |
k ÷4 |
, |
||||||
|
|
∑ |
|
∑ |
4× j +m |
2 |
) +16 |
|
|
∑ |
2 |
|
∑ |
|
+b 16 |
|||||||||||||
|
|
j =0 |
|
m =0 |
|
|
|
|
|
|
|
|
i |
|
|
|
|
j =0 |
j |
|
|
k ÷4 |
|
|||||
|
|
|
|
|
|
|
|
|
|
i =k ÷4×4 |
|
|
|
|
|
|
|
|
|
|||||||||
де b |
|
= |
3 |
|
|
|
2m , |
0 ≤ j ≤ k , |
|
b |
|
= |
|
k |
|
2i |
– шістнадцяткові ци- |
|||||||||||
j |
∑ a |
4× j +m |
|
|
∑ a |
|||||||||||||||||||||||
|
|
m =0 |
|
|
|
|
|
|
|
|
k +4 |
|
i =k ÷4×4 |
i |
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
фри. Останній член у переведенні є значенням шістнадцяткового чи- сла (blbl −1...b0 )16 , і воно є шуканим еквівалентом, тобто n2 . Сформу-
люємо правило для переведення (16) → (2):
Щоб перевести довільне двійкове число в шістнадцяткове, доста- тньо розбити його на групи із чотирьох сусідніх розрядів, розпочина- ючи з молодших, знайти їхні шістнадцяткові коди й записати по- спіль у тому самому порядку.
162

Розділ ІІ. ЕЛЕМЕНТИ ІНФОРМАТИКИ
Приклад 2.8. Перевести за спрощеним правилом двійкове число 11110011100110 2 у шістнадцяткове. Останньою групою цифр буде
0011. Маємо: 3CE6 ■
Цілі як машинний тип даних. У машинних типах даних викори- стовується двійкова система. Стандартний розмір цілих – це машин- не слово (зазвичай 2 або 4 байти). Біти (розряди) у такому слові нуме- руються справа наліво, розпочинаючи з нуля. Знаковим є 15-й (31-й) біт. Нуль у ньому означає додатне, а одиниця – від'ємне число. Таке подання цілих називається прямим кодом. Так виглядає прямий код числа 3 у двобайтному форматі:
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
знак |
15 бітів |
|
У прямому коді в пам'яті зберігаються цілі, а також у цьому фор- маті виконуються машинні множення й ділення чисел. На жаль, з адитивними операціями в прямому коді виникають певні проблеми.
Для таких операцій зручнішим є додатковий код, який для додатних чисел збігається з прямим. Спочатку сформулюємо, що таке оберне- ний код цілого від'ємного числа. Щоб отримати такий код, необхідно в прямому коді інвертувати всі розряди окрім знакового. Розглянемо число −256 . Його прямий код становить 1000 0001 0000 0000, обер- нений – 1111 1110 1111 1111. Додатковий код додатного числа збіга- ється також із прямим, а код від'ємного утворюється з оберненого шляхом додавання до нього 1. Наприклад, обернений код числа −256
збігається із сумою 1111 1110 1111 1111 + + 1 = 1111 1111 0000 0000.
Зазначимо, що число 0 має два прямі коди, але тільки один оберне- ний, а саме: обернений код від'ємного нуля 1000 0000 0000 0000 1111 1111 1111 1111 + 1 = 0000 0000 0000 0000 збігається з оберне-
ним кодом додатного нуля 0000 0000 0000 0000. Найменшим від'єм- ним числом є – 215 з оберненим кодом 1000 0000 0000 0000, а найбі-
льшим додатним – число 215 – 1. Таким чином, існує певна несимет- ричність цілих відносно 0.
Перевагою додаткового коду є те, що в ньому однаково реалізують- ся операції додавання цілих різних знаків (алгебричне додавання), а операція віднімання зводиться до додавання заміною знака другого операнда на протилежний. При цьому знаковий розряд теж бере участь у операції. Щоб повернутися від додаткового коду до прямого,
163

ПРОГРАМУВАННЯ
можна повністю повторити дії, які виконувалися при отримуванні додаткового коду: спочатку всі розряди, окрім знакового, інвертува- ти, а потім додати 1.
Приклад 2.9. Додати числа: а) 12 та –5; б) 32767 та 1024.
а) Побудуємо обернені коди операндів: 0000 0000 0000 1100 та
1111 1111 1111 1010 +1 = 1111 1111 1111 1011. Тепер додамо їх: 0000 0000 0000 1100 1111 1111 1111 1011 0000 0000 0000 0111.
Перенесення зі знакового розряду ігнорується. Оскільки отрима- ний обернений код додатний, то він є і прямим кодом суми 12 + (–5)
= 7 = 1112 .
б) Побудуємо обернені коди операндів: 32767 = 0111 1111 1111 1111 та 1024 = 0000 0100 0000 0000. Додамо їх:
0111 1111 1111 1111
0000 0100 0000 0000
1000 0011 1111 1111.
Перенесення в знаковий розряд змінило число на від'ємне. Ситуа- ція з перенесенням у знаковий розряд називається переповненням і свідчить про некоректність результату операції ■
Беззнакові машинні цілі – це машинні цілі, в яких знаковий роз- ряд розглядається як цифровий. Їхній діапазон збігається з інтер-
валом [0..216 −1] .
Дійсні числа як машинний тип даних. Машинні дійсні числа подаються як РТ-числа. Для кожного дійсного числа r існує багато варіантів РТ-чисел, що збігаються з ним за значенням. Дійсно, якщо мантису поділити на основу, а порядок збільшити на 1, то значення РТ-числа не зміниться. РТ-число me ±n з основою p нормалізоване, якщо 1/ p ≤ m <1. Наприклад, десяткове число .02е+1 ненормалізо-
ване (.02 < .1), а .2е+ 0 – нормалізоване.
Дійсні числа подаються у вигляді двійкових нормалізованих РТ-чисел. Їхня мантиса має вигляд .1…. Поле пам'яті для подання машинних РТ-чисел має таку структуру:
знак |
m - мантиса |
р - порядок |
|
|
|
Розмір усіх складових поля фіксований. Тому існує скінченна кіль- кість машинних РТ-чисел, яка визначається кількістю комбінацій- трійок (±,m, p) . Оскільки місцезнаходження точки в нормалізованій
164

Розділ ІІ. ЕЛЕМЕНТИ ІНФОРМАТИКИ
мантисі фіксоване, то для подання останньої достатньо подати тільки її цифри, старша з яких завжди (!) є 118. Порядок зазвичай подається
беззнаковим цілим і фактично обчислюється як різниця |
p − 2l −1, де |
|||||
l − довжина поля порядку (у |
бітах). Нехай |
k − розмір |
мантиси і |
|||
q = 2l −1 . Тоді всі додатні РТ-числа належать діапазону |
|
|||||
|
|
−q |
q |
, |
|
|
0.00..01 |
×2 |
..0.11...1×2 |
|
|
||
|
14243 |
|
123 |
|
|
|
|
k |
|
k |
|
|
|
а від'ємні – діапазону |
|
|
|
|
|
|
|
|
q |
|
−q |
|
|
−0.11...1× |
2 .. − 0.00..01×2 |
|
. |
|
||
|
123 |
|
14243 |
|
|
|
|
k |
|
k |
|
|
|
Поза межами цих інтервалів жодне дійсне число не має представ- ників серед машинних РТ-чисел.
Тепер поговоримо про щільність розташування РТ-чисел на дійсній числовій осі. Оскільки всіх РТ-чисел скінченна кількість, то між сусід- німи є певна ненульова відстань, розмір якої характеризує щільність розташування машинних чисел на числовій осі. Щільність тим більше, чим менше вказана відстань. Якщо зафіксувати порядок і порівняти щільність чисел на інтервалах [0.1 .. 1) (ці числа пробігають значення
m ×20 , .1 ≤ m <1) та [1 .. 2) (ці числа пробігають відповідно значення
m ×21 , .1 ≤ m <1), то щільність на другому інтервалі буде менша. Це випливає з того, що сукупність мантис чисел, які належать цим ін- тервалам, одна й та сама, але другий інтервал удвічі більший від першого. Це означає, що похибка обчислень для великих чисел експо- ненціально зростає – навіть великі цілі числа будуть подаватися нето- чно. Певну уяву про щільність розташування машинних РТ-чисел дає константа max{x :1.0 x =1.0} , яка називається машинним нулем в
околі 1.0. Тут операція є машинним додаванням. Якщо до 1 дода- вати числа менші ніж машинний нуль, то на сумі це не позначиться.
Розглянемо кілька прикладів. Для зручності обмежимося десятко- вою системою. Будемо вважати, що мантиса містить 4, а порядок – 2 десяткові цифри й задається прямим кодом зі знаком.
Приклад |
2.10. а) Візьмемо |
число |
10,35 =.1035 |
×102 =.1035e + 2 . |
Найближчим |
праворуч від |
нього |
машинним |
числом буде |
10,36 = .1036×102 =.1036e + 2 , а щільність між ними становитиме 0.01.
18 Деякі процесори враховують цю обставину і старшу одиницю явно не зберігають у полі мантиси, що дозволяє додати до неї додатковий розряд.
165

ПРОГРАМУВАННЯ
б) Розглянемо число 0,001035 =.1035 ×10−2 = .1035e − 2 . Найближче
праворуч від нього машинне число – це .1036×10−2 = .1036e − 2 , а щільність між ними суттєво більша і становить уже 0.000001.
в) Розглянемо РТ-число a = .1035 ×1012 =1035e +12 . Найближче ці-
ле праворуч від нього число b =.1036×1012 =.1036e +12 . Щільність між ними становить
d = 1036 0000 0000 − 1035 0000 0000 = 1 0000 0000 =108 .
Отже, у проміжку між числами a та b, довжина якого становить 108 , немає жодного машинного РТ-числа! ■
Машинна арифметика. Операції машинної арифметики цілих ви- конуються за правилами, що діють у звичайній двійковій арифмети- ці. Проте обмеженість діапазону машинних цілих може впливати на результат операцій (див. переповнення, підрозд. 2.3.3). Що стосується дійсної машинної арифметики, то тут ситуація набагато складніша. Розглянемо, як виконуються основні арифметичні дії над РТ-числами.
Якщо це адитивні операції +, –, то їм передує вирівнювання порядків у операндах, тобто операнд із меншим порядком зводиться до більшого. Нехай a = m1e + p , b = m2e + q та p > q . Тоді після вирівнювання
a= m1e + p , b = m2′e + p , де m2′ = m2 ×10−(p −q ) та a ±b = (m1 ±m2′ )e + p .
Приклад 2.11. Обчислити суму a +b .
1) a = .123555E +5, b = .155E +6. Після вирівнювання порядків
a = .0123555E + 6, b = .155E +6 і a + b =.1673555E + 6.
2) Нехай у мантисі 4 десяткові цифри. a = .1222E + 3, b =.15E + 6. Після вирівнювання порядків a =.0001e + 6 , b = .15e + 6 . a + b = .1501E + 6. У сумі втрачено величину .0000222Е+6 = 22.2 ■
Як бачимо, якщо порядки операндів суттєво різні, то в процесі їх вирівнювання можуть втрачатися розряди меншого з операндів, що впливає на точність результату операції.
Правила для обчислення мультиплікативних операцій *, / звичайні. При множенні порядки додаються, а мантиси перемножуються. При діленні мантиси діляться, а порядки віднімаються. При цьому у вирів- нюванні порядків немає потреби. Нехай a = m1e + p , b = m2e + q . Тоді
a * b = m1 * m2e + (p + q); a /b = m1 /m2E + (p − q).
166

Розділ ІІ. ЕЛЕМЕНТИ ІНФОРМАТИКИ
Однак через обмеження діапазону порядків можлива ситуація їхнього втрачання. Тому ділення на маленькі числа і множення на великі може призвести до втрати порядку результату.
Приклад 2.12 (Н. Вірт). Нехай у мантисі ті самі чотири цифри.
Розв'язати рівняння x2 − 200x +1 = 0 . |
|
Метод 1. Знайдемо дискримінант квадратного |
тричлена: |
D = sqrt((−200)2 − 4) = sqrt(0.4e + 5 − 0.00004e + 5) = 200.0 . За |
відомою |
формулою для коренів квадратного рівняння маємо x 1= 200.0,x2 = 0.000 .
Метод 2. Залишимо тепер більший корінь (x1), а другий знайдемо за теоремою Вієта: x2 =c /(a ×x1). Дістанемо x2 =1.000/(200.0×1.000) = 0.005 .
Таким чином, за першим методом ми отримали значення x2 , да-
леке від кореня. Після підстановки його в рівняння маємо 1 ≠ 0 . Другий метод дає значно кращий результат:
0.005 * 0.005 − 200 * 0.005 +1 = 0.000025 −1+1 = 0.000025 ≠ 0 ■
Літери як машинний тип даних. Цей тип даних призначений для обміну інформацією між суб'єктами інформаційних систем. Ін- формацією можуть бути запити (вхідні дані й програми), результати роботи програми, команди командного процесора тощо. Такий ха- рактер інформації вимагає дуалізму в її поданні. Розрізняють зовні- шню та внутрішню її форми. У зовнішньому вигляді вона існує як інформація, подана за допомогою спеціальних ідеограм – літер, у внутрішньому – кодується двійковими числами. Кожний комп'ютер має кодову таблицю, яка містить сукупність усіх можливих літер та їхніх двійкових кодів. Широко відомою такою таблицею є ASCII (American Standard Cod for Information Interchange) та її національні варіанти (див. підрозд. 2.4.2). Іншим прикладом кодової таблиці є кодова таблиця Навчальної Машини (див. підрозд. 2.3.4). Серед усіх літер, зображених у ній, виділяють літери керування. Вони призна- чені для керування зовнішніми пристроями машини. У таблиці ASCII ці символи розміщено на початку (31 літера). Наприклад, літера BEL із кодом 7 запускає звукогенератор, літера LF із кодом 10 здійснює перехід на новий рядок тощо. На відміну від решти літер, літери ке- рування не мають своїх ідеограм. Їх подають або за допомогою ко- дів, або використовують певні комбінації інших літер (керівні або ESC-послідовності, див. підрозд. 3.1.2).
167

ПРОГРАМУВАННЯ
2.3.4. НАВЧАЛЬНА МАШИНА
Щоб ознайомитись детальніше з командами та програмами ком- п'ютера, розглянемо Навчальну Машину (НМ) – спрощений варіант першої версії машини MIX Д. Кнута без дійсної арифметики й деяких пристроїв введення-виведення. (Друга версія машини називається ММІХ). Обидві належать до абстрактних машин і є спрощеними мо- делями реальних ЕОМ. Нині існують програмні емулятори машин ММІХ і МІХ на всіх відомих ЕОМ, тому всі МMIX- і МІХ-програми мо- жуть бути проінтерпретовані й виконані на них.
Структура оперативної пам'яті навчальної машини. Основною одиницею інформації НМ є байт. Розмір байта, тобто кількість інфор- мації, яку він містить, чітко не визначається, але байт має набувати як мінімум 64 різних значень. Таким чином, довільне число від 0 до 63 включно може бути подано в одному байті. Крім того, байт може зобразити не більше 100 різних значень, тобто один байт НМ відпові- дає 6 двійковим розрядам (бітам), у десятковій системі – двом десят- ковим цифрам (у повній версії ММІХ 1 байт містить 64 біти!). У двох
суміжних байтах можна зобразити числа від 0 до 4095( =212 -1), у трьох – від 0 до 262143, у чотирьох – від 0 до 16777215, у п'яти – від
0 до 1073741823.
Машинне слово складається з п'яти байтів і знака ( +, -):
|
|
0 |
1 |
|
2 |
|
3 |
|
4 |
5 |
|
|||
|
|
± |
|
|
|
|
|
|
|
|
|
|
|
|
ОП складається із 4000 слів: |
|
|
|
|
|
|
|
|||||||
|
0000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0001 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0002 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
...... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
...... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
...... |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3998 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3999 |
|
|
|
|
|
|
|
|
|
|
|
|
Кожне слово має свою адресу – порядковий номер у пам'яті. Полем пам'яті називається неперервна послідовність слів. Поле
слова – це послідовність байтів усередині слова. Поле слова визнача- ється лівим і правим номерами байта (L:R):
(0:0) – тільки знак;
168

Розділ ІІ. ЕЛЕМЕНТИ ІНФОРМАТИКИ
(0:2) – знак і два перші байти; (0:5) – усе слово; (4:5) – два молодші байти.
Поле (L:R) будемо кодувати числом N =8L +R. Наприклад,
N =0:0) =0 L +0 =0, N =(0:2) =0 L +2 =2 тощо.
Центральний процесор. ЦП НМ має два загальні регістри у фор- маті слова (позначаються $A та $X) і вісім спеціальних двобайтних
(позначаються R1–R6, J та PC). |
|
|
|
||
Регістр $А |
|
|
|
|
|
± |
A1 |
A2 |
A3 |
A4 |
A5 |
називається суматором і використовується, у першу чергу, для ари-
фметичних операцій із даними. |
|
|
|
|
|
|
|||||||
Регістр $Х |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
± |
Х1 |
|
Х2 |
|
Х3 |
|
Х4 |
Х5 |
|
|||
використовується як розширення $A. |
|
|
|
|
|
||||||||
Регістри R1–R6 називаються індексними й використовуються як лі- |
|||||||||||||
чильники, а також для формування адреси: |
|
|
|||||||||||
R1: |
|
± |
|
R14 |
|
R15 |
|
|
|
||||
... |
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
R6: |
|
± |
|
R64 |
|
R65 |
|
|
|
||||
|
|
|
|
|
|
|
|
R14 та R15 означають лівий і правий байти в регістрі R1. Регістр J
±J4 J5
зберігає адресу команди, яка розташована за останньою виконаною командою переходу (JUMP) і застосовується передусім для виклику підпрограм. Він змінюється, коли виконується будь-яка команда пе- реходу, і не змінюється у протилежному випадку.
Регістр PC:
+- |
PC4 |
PC5 |
PC – лічильник команд, зберігає адресу наступної команди. Крім цих регістрів, у НМ є:
1)однобітовий тригер переповнення Т, який може бути в одному з двох станів: "увімкнено" або "вимкнено";
2)індикатор порівняння В, який має три стани: "менше", "дорів- нює", "більше":
L G E
3) пристрої введення-виведення.
169

ПРОГРАМУВАННЯ
Алгоритм функціонування процесора НМ такий, як і в будь-якого комп'ютера (рис. 2.4).
Команди. Програма в НМ – це послідовність команд, записана в певному полі пам'яті. Усі команди мають формат слова:
0 |
1 |
2 |
3 |
4 |
5 |
± |
A |
A |
I |
F |
C |
Байт С – код операції, що вказує на операцію, яку необхідно вико- нати. Наприклад, С=8 задає операцію LDA (англ. Load the A register – завантажити регістр А). F-байт використовується для модифікації, уточнення дії операції. Зазвичай F задає специфікацію поля (L:R) =8L +R. Наприклад, якщо С=8, F =11, то виконується операція завантажити в регістр $А поле (1:3). Поле команди ±АА називається адресою операнда (знак є частиною адреси). Поле І називається індек- сом. Індекс – це номер індексного регістра, який використовується для модифікації адреси операнда. Якщо І=0, то адреса ±АА використову- ється прямо, у протилежному випадку в полі І міститься число і від 1 до 6, і тоді вміст індексного регістра Rі алгебрично додається до зна- чення числа ±АА. Такий процес індексування виконується для кожної команди. Будемо використовувати М для позначення адреси, отрима- ної після індексування. Якщо в результаті формування значення М ре- зультат виходить за межі двох байтів ( >4095), то він вважається неви- значеним. Для більшості команд М використовується як адреса комір- ки пам'яті. Ми припускаємо, що є 4000 комірок, пронумерованих від 0 до 3999, тому адресу будь-якої комірки можна задати у двох байтах. Для кожної команди, в якій М є посиланням на комірку пам'яті, має виконуватись умова 0≤М≤3999. У цьому випадку запис *M буде позна- чати значення, яке міститься в комірці за адресою M.
Далі при описі команд будемо користуватись їхнім більш наочним мнемонічним поданням:
OP ADDRESS, I(F),
де OP – мнемонічне ім'я команди, що замінює код операції, ADDRESS – це ± АА, I та F подають значення полів І та F. Якщо І=0, то воно ви- пускається. Якщо F є стандартною F-специфікацією для даної коман- ди, то його також можна не писати. Майже для всіх команд стандар- тною F-специфікацією є (0:5), тобто специфікація повного слова. Як- що стандартною є інша специфікація, то вона буде зазначена при об- говоренні відповідної команди. Мнемонічне подання команди дозво- ляє однозначно відновити команду як конкретне слово в пам'яті. На- приклад, команда з кодом операції 8 – завантажити число в суматор – має мнемонічне ім'я LDA (див. вище).
170