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

У двійковій формі можна зображати як цілі, так і дробові числа (правильні й неправильні дроби). У дробових числах старший розряд праворуч від точки є 1/2, наступний 1/4, далі 1/8, 1/16, 1/32 тощо. Так, наприклад, число 6.75 у двійковій формі матиме вигляд 110.1. У даному разі ми змогли обмежитися двома дробовими розрядами. У більшості випадків не щастить виразити довільний дріб скінченною кількістю двійкових дробових розрядів. Але ж і в десятковому зображенні такі числа, як 1/3 або 1/7 також не можуть бути відображені скінченною кількістю розрядів.

Додавання дробових чисел виконується звичайним чином, за розрядами. Так, наприклад, 6.75ю + 2.25ю = 9.0010. У двійковому зображенні це матиме вигляд 110.11 + 010.01 = 1001.00 = 9.00,0.

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

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

0.25 = 2.5.10-1 s 2.5.КГ2 = 0.025.10і = 0.0025.102 тощо.

В експоненційному форматі числа записуються у вигляді ± ME ± П,

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

де М - мантиса (значуще число) із відповідним знаком, а П - порядок числа (також зі знаком). Літера Е розділяє мантису та порядок і означає, що число подано в експоненційному форматі. Так, наприклад, наведене вище число 0.25 можна зобразити як +0.25ЕОО, або як 2.5Е-01, або як 25Е-02 тощо. У двійковому форматі це буде відповідно: +0.01ЕОО = (1/4).2°, або як 0.1Е-01 = (\/2).2'\ або як 1Е-10 = 1.2'2, або як 10Е-11 = 2.2'3 тощо.

Як видно, тут при зображенні числа існує неоднозначність. Тому звичайно використовується нормалізований двійковий формат зображення чисел. У цьому форматі мантиса повинна бути правильним дробом, старший розряд якого відміниш від нуля. Отже, з усіх наведених вище варіантів нормалізованою формою буде +0.1Е-01.

Класичний формат із плаваючою точкою, який знаходить застосування в ЕОМ, має вигляд

Розряди SM та sp означають знаки мантиси й порядку (плюс - О,

мінус - 1); мантиса має m двійкових розрядів, а порядок - р. Числа зображаються в нормалізованому експоненційному форматі, причому нуль, що передує точці, опускається. Так, наприклад, при m = 5 і р = З число 1 11011 0 101 має зміст:

Сума геометричної прогресії 1+2+4+8.., що складається з р членів, дорівнює 2Р - 1.

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

Обгрунтування необхідності співпроцесора

Хоча мікропроцесор К1810ВМ86 оперує з 16-розрядними числами, відносна точність його обчислень не дуже висока. Оскільки максимально-можлива відносна похибка дорівнює 5 тах = 2"т+! (де т - кількість розрядів мантиси), то для m = 16 вона складатиме тут» 3.10"). При довгих обчисленнях похибка може накопичуватися та стати неприпустимо великою. Тому за потреби високої точності доводиться працювати з подвійними словами (DWORD, m=32), повторюючи операції двічі, що істотно знижує швидкодію процесора. Але й це не гарантує достатньої точності.

Крім того, система команд МП-86 не передбачає можливості працювати з плаваючою точкою, що утруднює обробку малих та великих чисел і дробів узагалі. Не передбачено також апаратного переходу від формату з фіксованою точкою до формату з плаваючою точкою й тому доводиться кожного разу викликати відповідну підпрограму, що також сповільнює процес обчислень. Щодо математичних операцій, то МП-86 апаратно виконує лише чотири арифметичні дії з цілими числами. Він не може видобувати корені, логарифмувати й оперувати з тригонометричними функціями. Такі операції, звичайно, здійснюються спеціальними підпрограмами, але й це призводить до істотного зниження швидкодії.

Найефективнішим виходом виявляється підключення до МП-86 допоміжного процесора, який, не будучи таким універсальним, як МП-86, спеціалізувався б на виконанні обчислень з високим ступенем точності. Допоміжний процесор має назву співпроцесора.

Для мікропроцесора К1810ВМ 86 таким математичним співпроцесором є К1810ВМ87 (скорочено ВМ-87). Конструкивно він виконаний за тією самою технологією, як і МП-86 (п - МОН технологія), має 40 виводів і містить 65000 транзисторів, живиться напругою +5В і потребує 1.5Вт потужності.

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

Формати чисел у співпроцееорі ВМ-87. Його можливості

Дані у ВМ-87 можуть вводитися та виводитися кількома методами, а саме у вигляді:

- цілих двійкових чисел;

- цілих двійково-десяткових чисел;

- двійкових дійсних чисел із плаваючою точкою.

Цілі двійкові числа можуть мати формати по 16, 32, та 64 розряди (разом зі знаком).

Двійково-десяткові числа мають 18 тетрад. У кожній тетраді записується двійковим кодом розряд десяткового числа (від 0 до 9). Отже, 18 тетрад дозволяють зображати десяткові числа з 18 розрядами.

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

а) короткий дійсний формат (КДФ - на 32 розряди)

формат ВДФ, в якому й виконуються всі обчислення. У цьому форматі Хтап = 10-4932, х,^ = 104931 та 8юах «10 '19.

Знак порядку в цих форматах не передбачений. Співпроцесор працює з так званим зміщеним порядком так, щоб цифра порядку була завжди додатною1. Для цього до істинного значення порядку додається константа зміщення. Так, наприклад, у форматі КДФ, з його р = 8, ця константа дорівнює 12?ю. Отже, коли в розрядах порядку стоятиме нуль, то це насправді є порядок -127, якщо 127, то

1 Таким чином удається заощадити один розряд - розряд знаку.

б)довгий дійсний формат (ДДФ - на 64 розряди)

Крім того, ВМ-87 має ще й 80-розрядний внутрішній дійсний

істинне значення порядку є 0, а якщо 255, то справжнє значення порядку є +128. У загальному вигляді константа зміщення дорівнює 2Р''-1; для ДЦФ вона складає 1023, а для ВДФ це 16383.

Формула для обчислень істинного значення числа має вигляд (для ВДФ)

x = (-l)Sm(m0,mbm2,......m64).2n

тут Sm - знак мантиси, т, - значення і-того розряду мантиси, П -порядок. Аналогічний вигляд мають також формули для КДФ та ДДФ. Слід лише зауважити, що в них опускається член т0? оскільки в нормалізованому експоненційному форматі він завжди дорівнює

одиниці1. Так, наприклад, для числа 1 01111110 11000.....00 у

форматі КДФ Sm = 1; mi = 1; т2 = 1; т3... т2з = 0; т 0 завжди дорівнює одиниці; П = 126ю. Отже,

х = (-ІУ.(0.111). 2Ш 11 = -(0.875).Г' = -0.4375.

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

Співпроцесор ВМ-87 не може працювати самостійно, а тільки разом із МП-86. При цьому команди ВМ-87 можуті розглядатися як розширення списку команд МП-86. Загальна швидкість обробки числових даних зі плаваючою точкою в такому тандемі зростає в кілька десятків пазів порівняно з одним МП-86. За швидкістю та точністю схожа система стає вже подібною до міні-ЕОМ.

Вмикання співпроцесора

Для спільної роботи зі співпроцесором мікропроцесор МП-86 слід увімкнути в максимальний режим ((MN/MX = 0). Шина адреси/даних ADO -A 19 у МП-86 та співпроцесора з'єднуються між собою без будь-яких узгоджуючих пристроїв. На обидві ВІС подаються синхронізуючі імпульси CLK від загального ГТІ. З'єднані

також виходи слова стану SO - S2 і лінія ВНЕ. На підставі слова

стану системний контролер виробляє керуючі сигнали I/OR, I / OW, MEMR, MEMW, INTA. З'єднання інших виводів має такі особливості:

- вхід МП-86 TEST з'єднано з виходом співпроцесора BUSY, високий рівень на якому вказує, що співпроцесор робить обчислення. Цим блокуються нові звернення процесора до співпроцесора;

QSO та QS1 видають слово стану черги команд у МП-86. Для співпроцесора ці сигнали є вхідними й за їх допомогою він одержує

інформацію про стан справ у черзі команд-МП-86;

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

- за допомогою сигналів RG/GT1 та RG/GT2 співпроцесор при потребі здійснює (через МП-86) захоплення шин.

Блок-схема співпроцесора К1810ВМ87

Блок-схема співпроцесора K1S10BM87 подібна до блок-схеми мікропроцесора МП-86 і також складається з трьох частин (рис. 15.2):

- блока спряжіння із системною шиною (шинного інтерфейсу);

- виконавчого блока;

- керуючого пристрою.

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

До блоку спряжіння входить буферний регістр шини адреси/даних БРШ, блок формування адреси та регістр черги команд.

Основу виконавчого блоку складають вісім 80-розрядних робочих арифметичних регістрів та арифметичний пристрій, що виконує обчислювальні операції. Арифметичні регістри ST(0) - ST(7) оформлені у вигляді стеку; у них записуються вхідні дані та результати виконаних операцій, додається показник верхівки стеку ST, котрий трибітовим числом указує номер регістра, який на даний момент є верхівкою стеку. При запису в стек вміст його верхівки декрементується (ST = ST - 1), при видобуванні - інкрементується (ST = ST +1). Регістри стеку зациклені, тобто при ST = 000 наступним записом у стек верхівка переводиться до ST = 111.

Якісний характер вмісту певного регістра стеку описується двобітним числом-ознакою, яке має назву тега (tag- ярлик). Ці ознаки мають такий зміст: 00-у регістрі записане скінченне число; 01-у регістрі записано нуль; 10-у регістрі стоїть "не-число" (тобто код, який не відповідає нормалізованому формату); 11 - регістр порожній.

Теги одслідковують характер чисел у регістрі стеку й записуються в 16-розрядний регістр тегів TR. Теги потрібні для контролювання правильності операцій. У разі команди, яка спробує записати число в заповнений регістр (тег = 00), видобути число з порожнього регістра (тег =11), використати "не-число" як операнд (тег = 10) або спробує поділити на нуль (тег = 01), виникне нештатна особлива ситуація, для усунення якої співпроцесор може звернутися за переривання до МП-86 за консультацією та допомогою. Коди всіх можливих особливих ситуацій записані в 64-розрядному регістрі ЕР і саме з нього інформація про характер особливої ситуації надходить до МП-86.

Крім цих регістрів виконавчий пристрій містить:

- регістр стану SR. Він має різні поля й прапори, які при роботі співпроцесора автоматично встановлюються відповідно до дій, що він виконує та результатів цих дій. Отже, прочитавши вміст цього регістра можна мати повну інформацію про стан співпроцесора. Саме до цього регістра звертається МП-86 при розв'язанні конфліктних ситуацій, читаючи слово стану співпроцесора;

- регістр керування CR. Уводячи в цей регістр значення певних бітів, можна наказувати співпроцесорсві виконувати ті чи інші дії.

Керуючий пристрій керує за допомогою мікрокоманд усіма описаними блоками.

Як працює співпроцесор

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

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

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

Для того, щоб МП-86 мав час перевірити стан на своєму вході TEST = BUSY, команді ESC обов'язково передує команда WAIT -тобто команда, що переводить МП-86 у стан очікування. Одержавши цю команд мікропроцесор перевіряє стан свого входу TEST і якщо TEST = 1, продовжує перебувати в стані очікування, аж доки співпроцесор не розблокує його, виставивши BUSY=01.

Але починати свою роботу співпроцесор може лише тоді, коли МП-86 закінчить виконання всіх команд, що передували команді ESC і були включені в чергу команд. Тому співпроцесор відслідковує стан черги команд за ознаками черги команд QSO та QS1. Коли за цими ознаками видно, що команда, яка передувала команді ESC уже виконана, співпроцесор починає діяти. Через свій вихід BUSY він подає до МП-86, на його вхід TEST, сигнал високого рівня та блокує роботу МП-86 доти, доки не закінчить свою роботу й не зніме сигнал BUSY.

Якщо для виконання команди співпроцесорові треба звертатися до пам'яті для зчитування або запису даних, у команді ESC передбачаються вказівки на адресу відповідних комірки пам'яті. За цією адресою МП-86 (до того, як він буде заблокований сигналом BUSY) обчислює фізичну адресу комірки пам'яті й активізує її на запис або читання. Далі в обмін із пам'яттю вступає співпроцесор, котрий сприймає дані з пам'яті або записує їх у неї.

Коли за характером команди співпроцесор має зчитати з пам'яті більш одного слова або коли має записати в пам'ять будь-які дані, він робить запит на захоплення шини за допомогою сигналу RQ/GTO (еквівалент сигналу HOLD) і одержує дозвіл сигналом RQ/GT1 (еквівалент сигналу HLD А).

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

В асемблерній програмі команда WAIT може не фігурувати у явному вигляді. Вона автоматично встановлюється перед командою ESC при асемблювання програми.

ситуацій. У таких випадках співпрцесор робить запит на переривання сигналом INT і по шинах адреси, даних та стану інформує МП-86 про ситуацію, що виникла, та одержує від нього пораду.

Поняття про програмування співпроцесора

Система команд співпроцесора складається з 69 базових команд, які можуть мати по кілька різновидів. Ця система команд є ніби доповненням до системи команд МП-86. Усі команди співпроцесора мають свою мнемоніку та вкючаються програмістом у загальну програму, складену мовою Асемблера. Мнемонічною ознакою команд співпроцесора є те, що вони всі починаються з літери F. Далі йде мнемонічна назва команди, яка здебільше збігається з мнемонікою МП-86, наприклад, FADD, FSUB, FVUL, FDIV, FCOMP. Літера І, що стоїть інколи після F, означає, що операндами є цілі числа (наприклад: FIADD або FICOMP). Значна кількість команд не має прототипів у системі команд МП-86, наприклад, FSQRT -видобування квадратного кореня або FPTAN - обчислення тангенса, FLDZ - обнулення верхівки стека ST(0), FST - пересилання зі стеку співпроцесора до основної пам'яті.

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

FADD DWORD PTR ARRAY[SI].

Ця команда означає: додати до вмісту регістра, що є верхівкою стеку, подвійне (чотирибайтне) слово з масиву ARRAY; номер елемента масиву знаходиться в індексному регістрі SI.

Розглянемо як приклад програму підсумовування N елементів масиву з ім'ям ARRAY. Числа в масиві задані в КДФ (тобто, як 32-розрядні, чотирибайтові числа); сума у форматі ДДФ записується в основну пам'ять за адресою SUM у вигляді восьмибайтного слова (QWORD) MOV CX,N підготовка лічильника

FLDZ;підготовка місця для суми -

;обнулення регістра стека ST(0) XOR SI,SI;обнуленняя індексного регістра

MORE: FADD DWORD PTR ARRAY[SI]

;до вмісту ST(0) додати елемент;масиву

ADD SI,4 формування номера наступного

елемента масиву '

LOOP MORE;утворення циклу

FST QWORD PTR SUM

результат (слово з восьми байтів);пересилається зі стеку до адреси SUM

RET; вихід з підпрограми

Машинні коди команд співпроцесора можуть складати від двох до чотирьох байтів. Тут можуть бути дві ситуації: операнди знаходяться в регістрах стеку або один із них знаходиться в стеку, а другий - у пам'яті. У загальному випадку код команди має вигляд:

У першому байті обов'язково є п'ять бітів команди ESC. Поле X у першому байті та поле Y у другому містять код операції. Якщо один з операндів знаходиться в пам'яті, то його ефективна адреса формується звичайним шляхом; поле MOD указує на розмір зміщення, а поле R/M - на регістри, які беруть участь у формуванні адреси. Саме зміщення записується в третьому та четвертому байтах команди. Розглянемо як приклад команду

FLD DWORD PTR [SI+2AB9],

тобто завантажити в стек подвійне слово з адресою, заданою шляхом непрямої адресації через регістр SI зі зміщенням 2АВ9. Якщо вважати, що подвійне слово задане у форматі КДФ, то код операції буде X = 001; Y = 000; MOD = 10; R/M = 100. Отже, перші два байти будуть 11011001 та 10000100 і загальний код команди становитиме D9 84 В9 2А.

Якщо операція виконується над одним операндом (наприклад, видобування квадратного кореня), то він завжди розташовується у верхівці стеку ST(0). При цьому поле MOD - 11, а поле R/M служить для задавання коду операції, тобто є начебто продовженням поля Y.

Якщо ж обидва операнди містяться в стеку (один у його верхівці ST(0), а другий у регістрі ST(i), то MOD = 11, а в полі R/M записується номер регістра і.

1 Адже кожний з елементів масиву займає по 4 комірки пам'яті.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: