Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Materialy_Arhitektura.doc
Скачиваний:
22
Добавлен:
18.09.2019
Размер:
1.84 Mб
Скачать

57.Представлення чисел в форматі з фіксованою точкою (представлення беззнакових чисел, представлення знакових чисел в прямому та допоміжному кодах).

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

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

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

Аналіз цих формул показує:

1) мінімальне додатне число Аmin = 0,00 ... 1 для дробних та 1 для цілих чисел; числа за абсолютною величиною менше Аmin (одиниці молодшого розряду n-розрядної машинної сітки) називається машинним нулем;

2) максимальне позитивне число Аmax = 0,11 ... 1 (1-2-n) для дробних чисел (у всіх розрядах повинні бути записані одиниці) і 11 ... 1 (2n-1) для цілих чисел;

3) кількість різних чисел, які можна записати в n-розрядну сітку, так само 2n; кількість розрядів n, необхідних для запису довільного десяткового числа M одно

n = log2M, якщо log2M - ціле число;

в іншому випадку n одно найближчого цілого, більшого log2M.

Сучасні ЕОМ працюють в режимі з плаваючою точкою, але збережений і режим роботи з фіксованою крапкою, який використовується преімущемтвенно для представлення цілих чисел.

58. Особливості складання та віднімання цілих чисел (на прикладі персонального комп’ютера - пк).

У ПК є команди додавання і віднімання цілих чисел розміром в слово і байт. Спеціальних команд для додавання і віднімання подвійних слів немає, ці операції реалізуються через команди додавання і віднімання слів.

Складання і віднімання беззнаковаих чисел здійснюється за модулем 2 ^ 8 для байтів і 2 ^ 16 для слів. Це означає, що якщо в результаті складання з'явилася одиниця переносу, не вміщається в розрядну сітку, то вона відкидаються. Наприклад, при складання байтов 128 і 130 виходить число 258 = 100000010b, тому ліва двійкова одиниця відкидаються і залишається число 2 = 10b, яке й оголошується результатом складання.

Помилка тут не фіксується, але в прапор переносу CF записується 1 (якщо переносу не було, в CF заноситься 0). "Упіймати" таке спотворення суми можна тільки наступним аналізом прапора CF.

Спотворення результату відбувається і при віднімання від меншого числа більшого. І тут не фіксується помилка, однак першого числа дається

"позику одиниці" (у випадку байтов це число збільшується на 256, для слів - на 2 ^ 16), після чого і проводиться віднімання. Наприклад, віднімання байтов 2 і 3 зводиться до віднімання чисел 256 +2 = 258 і 3, в результаті чого виходить неправильна різниця 255 (а не -1). Для того щоб можна було виявити таку ситуацію, в прапор переносу CF заноситься 1 (якщо позика не було, в CF записується 0).

Сложение и вычитание знаковых целых чисел производится по тем же алгоритмам, что и для беззнаковых чисел (в этом одно из достоинств дополнительного кода): знаковые числа рассматриваются как соответствующие беззнаковые числа, произодится операция над этими беззнаковыми числами и полученный результат интерпретируется как знаковое число. Наприклад, складання байт чисел 1 і -2 відбувається так: беруться їх додаткові коди 1 і (256-2) = 254, обчислюється сума цих величин 1 254 = 255 і вона трактується як знакове число -1 (255 = 256-1) . Якщо при такому складання виникла одиниця переносу, то вона, як звичайно, відкидаються, а прапор CF отримує значення 1. Однак у даному випадку це відсікання не представляє інтерес - результат операції буде правильним, наприклад: 3 + (-2) => 3 254 (mod 256) = 257 (mod 256) = 1. Зате тут можлива інша неприємність: модуль суми (її мантісса) може перевершити допустиму кордон і "залізти" у знаковий розряд, зіпсувавши його. Наприклад, при складання байт чисел 127 і 2 виходить величина 129 = 100001001b, що представляє додатковий код числа -127 (= 256-129).

Хоча результат тут вийшов і неправильним, процесор не фіксує помилку, але зате заносить 1 в прапор переповнення OF (якщо "переповнювання

мантісси "не було, в OF записується 0). Аналізуючи потім цей прапор, можна" спіймати "таку помилку.

Таким чином, складання (віднімання) знакових і беззнакових чисел

проводиться по одному й тому ж алгоритму. При цьому ПК не "знає", які числа (зі знаком чи без) він складає, у будь-якому випадку він складає їх як беззнаковие числа і в будь-якому випадку формує прапори CF і OF. А ось як інтерпретувати складові та суму, на який з цих прапорів звертати увагу - це особиста справа автора програми.

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

вони виконуються за різними алгоритмами, різних машинах командами. Од -

нако і у цих операцій є ряд особливостей. При множення байтів (слів) перший сомножітель зобов'язаний перебувати в регістрі AL (AX), результатом ж множення є слово (подвійне слово), яке заноситься в регістр AX (регістри DX і AX). Тим самим при множення зберігаються всі цифри твори. При діленні байтів (слів) перший операндів (ділені) повинен бути словом (подвійним словом) і зобов'язаний перебувати в регістрі AX (регістрах DX і AX). Результатом поділу є дві величини розміром в байт (слово) - неповна приватне (div) і залишок від ділення (mod); неповна приватне записується в регістр AL (AX), а залишок - в регістр AH (DX).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]