logo
МПТ_L_к

5.2. Формати надання чисел в мікропроцесорах

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

1) В простих випадках використання МПС широко використовується формат надання цілих чисел без знака в двійковому коді. Так, наприклад, для 8-ми розрядного процесора таке надання має вид:

В7 В6 В5 В4 В3 В2 В1 В0

0 0 0 0 0 0 0 0 0

1 1 1 1 1 1 1 1 +255

Межі надання чисел не великі і складають від 0 до 2 – 1 , тобто складають тільки 256 різних чисел, які не повторюються. Відповідно у 12-розрядному процесорі в слові можна записати без знаку число 4095.

При необхідності суттєвого збільшення меж надання чисел у восьми розрядних мікропроцесорах використовують багатобайтові коди даних, або використовують більш потужний по розрядності мікропроцесор (16-ти чи 32-х розрядні). Наприклад, межі надання двійкових чисел в двох байтах 8-ми розрядного процесора або в 16-ти розрядному сягають від 0 до 65535

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

2) В МП, які орієнтовані на обробку даних, в яких, крім логічних операцій,

виконуються алгебраїчні операції (додавання та віднімання), використовується

формат надання чисел зі знаком.

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

Перший спосіб (звичайний) – це надання числа із знаком у прямому коді, коли спочатку надається знак числа, а потім саме число. Використовування даного способу для надання від’ємних чисел в мікропроцесорній техніці значно ускладнює структуру мікропроцесора для виконання ним математичної операції віднімання. В цьому випадку необхідно виконати не менше трьох операцій: 1) спочатку визначити, яке із двох чисел, що віднімаються, більше; 2) виконати саму операцію віднімання – від більшого відняти менше; 3) присвоїти результату знак більшого числа.

Для більш оптимального виконання операцій віднімання в

мікропроцесорній техніці застосовується другий спосіб - від’ємні числа надають у вигляді доповнюючого коду (у вигляді доповнення до основи системи числення і символ “-“(мінус) для їх ідентифікації не використовується), що дозволяє замінити операцію віднімання окремим видом додавання.

Доповненням D для n розрядного числа Е називають різницю:

D = q - Е,

де qоснова системи числення; q - кількість різних чисел (комбінацій), що не повторюються і знаходяться в діапазоні від 0 до q ;

n кількість розрядів (позицій) числа.

При цьому способі надання чисел із знаком із загальної кількості чисел q , половину чисел, а саме від 0 до (q /2 – 1) використовують як позитивні, а

іншу половину – як від’ємні і як доповнення до першої половини чисел.

Наприклад, розглянемо чотирьох розрядне число в десятковій системі числення : q =10; n =4; і відповідно q = 10000. В цьому діапазоні позитивні та від’ємні числа у формі прямого коду та їх відповідні доповнення до основи числення можуть бути записані так:

Прямий код Доповнюючий код

- 5000 +5000

- 4999 +5001

- 4998 +5002

……. …….

-3 +9997

-2 +9998

-1 +9999

0 0000

+1 0001

+2 0002

+3 0003

……. ……

+4998 4998

+4999 4999

Визначення: В будь-якій системі числення доповненням числа до її основи (або доповнюючим кодом числа) називається число, при додаванні якого до вихідного числа дістають всі нулі в позиціях (розрядах), які відповідають розрядам вихідного числа і одиницю в наступному по старшинству розряді, який відсутній у вихідному числі.

Легко перевірити правильність отриманних доповнень в приведеному вище переліку. Для цього треба додати число із нижньої половини (нижче значення 0000) правого стобчика з його доповненням, що розташоване на такій же відстані, але над кодом нуля (0000). Результатом такого додавання будуть числа 10 = 10000. Так як розрядність числа нами обмежена до чотирьох, то одиниця отриманого результату в п’ятому розряді «вивалюється » за розрядну сітку і не враховується нами, а результат дорівнює нулю. Н., 0003 + 9997 = 1 0000, де 0003 – позитивне число, а 9997 – від’ємне в доповнюю чому коді.

Перепишемо формулу для визначення доповнення числа до основи числення таким чином:

D = q - Е = [ (q - 1) – Е] + 1,

де (q -1) - це число, яке складається тільки із старших символів (цифр) системи числення, в якій записується число.

Отримана формула показує, що доповнення числа D можна отримати і без

безпосереднього віднімання самих чисел q та Е, а шляхом утворення спочатку доповнення [(q - 1) – Е], тобто, визначенням доповнення для кожного символу (кожної цифри) в усіх розрядах числа до максимального символу (старшої цифри) системи числення. А шукане доповнення D отримати шляхом додавання до отриманого числа 1 (одиниці).

Наприклад, отримати доповнення до десяткового числа: 1234.

1. Знаходимо доповнення в кожному розряді до старшої цифри (до 9) : 8765

2. Додаємо до отриманого числа одиницю 1

3. Шукане значення доповнюючого коду до числа 1234 є число 8766.

Перевіряємо, чи вірно виконане перетворення: 1234 + 8766 = 1 0000

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

Виконання таких операцій в двійковій системі є особливо простим. Так як доповненням до 1 є 0, а доповненням до 0 є 1, то можна сформулювати правило отримання доповнення двійкових чисел:

доповнення D для двійкового числа знаходять заміною в кожному розряді вихідного двійкового числа 0 на 1, а 1 на 0 , тобто, виконують порозрядну інверсію числа (таку операцію називають знаходженням оберненого коду і вона виконується в МП дуже просто) і добавляють до числа, яке дістали, ще одиницю.

Наприклад, отримати доповнюючий код до двійкового числа 1010:

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

0101, до якого добавлямо 1. Результат дорівнює :

0110.

Використовуємо визначення, що: доповнення числа до 2 ( або кажуть доповнюючий код двійкового числа) – це число, при додаванні якого до вихідного числа дістають всі нулі в розрядах, які відповідають розрядам вихідного числа, і 1 - в наступному по старшинству розряді, який відсутній в вихідному числі.

Перевіряємо, чи вірно виконане перетворення:

1010 (вихідне двійкове число)

+ 0110 (доповнючий код двійкового числа 1010)

= 1 0000 (результат додавання).

Необхідно відмітити ще одну особливість доповнюючого коду двійкових чисел: - їх старший біт у байті виконує функцію знаку числа і він відводиться під знак «s» числа. Якщо s = 1, то число від’ємне і знаходиться в доповнюючому коді, а якщо s = 0 – то число позитивне і знаходиться у регістрі в прямому коді. Тому старший біт В7 в байті таких чисел, що зберігаються в регістрах або в комірках пам”яті, називають знаковим розрядом.

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

кажуть в прямому коді, а від’ємні – у вигляді доповнення (доповнюючим кодом).

В одному байті 8-ми розрядного МП може бути розміщено число із знаком в таких межах (від’ємні – у вигляді доповнення):

S

B7 B6 В5 В4 В3 В2 В1 В0 Десяткове

1 0 0 0 0 0 0 0 -128

1 1 1 1 1 1 1 1 -1

0 0 0 0 0 0 0 0 0

0 1 1 1 1 1 1 1 +127.

3) В тих випадках, коли МПС вимагає ще більшого розширення меж надання чисел, використовують багатобайтові коди.

Наприклад, надання числа подвійної довжини (двобайтові числа). Знаковий розряд знаходиться при цьому в старшому розряді В7 старшого байту. Відповідно межа надання чисел розширюється від -2 = 32768 .. до ..+2 -1 = 32767.

Приклад розміщення в пам’яті 32-бітного двійкового цілого зі знаком.

Обробка таких багатобайтових чисел, розміщених в сміжних комірках, виконується в МП побайтно, починаючи з молодшого байту, шляхом виклику відповідної підпрограми обробки та 3-х разової модифікації (інкрементування) показника даних.

Пам’ять: Адреса

А Байт 0 Розміщення

А+1 Байт 1 чотирьохбайтного

А+2 Байт 2 (32 – бітного) числа в пам”яті МПС

А+3 s/Байт 3

4) Якщо в МПС потрібно виконувати операції над числами за правилами десяткової арифметики використовується так званий десятковий двійково-кодований упакований формат, або двійково- десяткова система числення. В цій системі десяткові цифри від 0 до 9 надаються 4-х розрядними двійковими комбінаціями від 0000 до 1001, тобто, двійковими еквівалентами десяти перших шістнадцяткових цифер. Перетворення виконується прямою заміною чотирьох розрядів двійкового числа одною десятковою цифрою і навпаки. Дві двійково - десяткові цифри складають байт, який умовно розбивається на дві тетради, в кожній із яких кодується десяткове число. Тобто, за допомогою 1 байта можна надати десяткове число від 0 до 99, а не від 0 до 255 або від 0 до FF, як при використовуванні двійкового 8-ми розрядного числа чи 2-х розрядів шістнадцяткового числа.

0 0 0 0 0 0 0 0 0

0 1 0 1 0 1 0 1 55

1 0 0 0 0 1 1 1 87

1 0 0 1 1 0 0 1 99

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

Використовуючи 1 байт для надання кожних 2-х десяткових чисел, можна утворювати двійково-десяткове число з будь-яким необхідним числом десяткових розрядів: н, (9538)10 = (1001 0101 0011 1000)2-10.

5) Якщо в МПС необхідно виконувати операції з багатобайтовими числами

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

числа використовується старша тетрада старшого байту, а (залишки) інші тетради зберігають двійові коди десяткових чисел. При цьому позитивне число в знаковій тетраді кодується 4-ма нулями (0000), а від”ємне – кодується 1001 (дев’яткою), що означає знак – “мінус”.

Наприклад: розміщення позитивного числа +9678348 в 4-х байтах:

А Тетрада 1 Тетрада 2 9 6 7 8 3 4 8

А+1 Тетрада 3 Тетрада 4 (0000 1001 0110 0111 1000 0011 0100 1000 )

А+2 Тетрада 5 Тетрада 6 (7 6 5 4 3 2 1 )

А+3 s s s s Тетрада 7 знак ( всього сім тетрад )

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

Н., від’ємне число: - 538 (його доповнюючий код: 462) буде записано 2-х байтах:

1001 0100 0110 0010

знак 4 6 2

6) Для надання дробових чисел в МП використовується формат з плаваючою комою, а саме число займає довжину в 32 розряди (4 байти ) . Як правило , при цьому три молодших байти відводяться для надання мантиси m, а старший байт використовується для надання порядку числа та його знаку. Порядок “Р” надається зміщеним кодом “Рсм” зі зміщенням 64 та займає біти В6....В0. При цьому біт В6 задає знак порядку: В6=1 при позитивному порядку, та В6=0 – при від”ємному порядку. Значення порядку лежить в межах від +63 до –64. Старший біт В7 в старшому байті задає знак числа: В7=0 – відповідає плюсу (позитивному числу), а В7=1 – мінусу (від’ємному).

Мантиса m надається прямим (при позитивному числі) та доповнюючим (при від’ємному) кодом і повинна бути нормалізована, тобто, мати значущу цифру старшу цифру, яка знаходиться по модулю в диапазоні від 2 до 1. Якщо в процесі обчислень мантиса денормалізується, то число результату знову нормалізується, тобто, виконується зсув мантиси вліво (або вправо) з одночасним зменшенням (збільшенням) порядку. Число з плаваючою комою визначається як: а = m * 2 , що дозволяє перекривати діапазон чисел від 2 до 2 .

Наприклад, розміщення у мікропроцесорі цілого відємного числа ( - 1234) у форматі з плаваючою комою.

Число спочатку нормалізується, тобто, записується у вигляді: - 0,1234 Е +4, тобто, дорівнює - 0,1234 * 10 , де Е – символ порядку числа, а сам порядок дорівнює 4 і його знак (+).

В двійковому еквіваленті число (-1234) буде записано в чотирьох байтах так:

в старшому В7 розряді старшого байту буде записана 1, так як вихідне число відємне;

в розряді В6 буде записана 1, так як порядок нормалізації позитивний;

в розрядах від В5 до В0 цього ж старшого байту буде записано двійковий

еквівалент числа 4 ( значення порядку нормалізації), тобто, 000100;

в молодших трьох байтах буде розміщено безпосередньо саме число (1234) в двійковій системі числення, як мантиса.