Добавил:
інстаграм _roman.kob, курсові роботи з тєрєхова в.в. для КІ Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Комп.логіка (лаб.метод)2016 розраха.docx
Скачиваний:
27
Добавлен:
31.05.2020
Размер:
426.54 Кб
Скачать

Лабораторна робота № 2. І. Представлення чисел в різних кодах і операції над ними. Подання числових даних у пам'яті еом

Теоретичний матеріал.

Для подання інформації в пам'яті ЕОМ (як числової, так і не числової) використовується двійковий спосіб кодування.

Елементарна комірка пам'яті ЕОМ має довжину 8 біт (байт). Кожен байт має свій номер (його називають адресою). Найбільшу послідовність біт, яку ЕОМ може обробляти як єдине ціле, називають машинним словом. Довжина машинного слова залежить від розрядності процесора і може бути рівної 16, 32, 64 бітам і т.д.

Кодування символів

Для кодування символів достатньо одного байта. При цьому можна уявити 256 символів (з десятковими кодами від 0 до 255). Набір символів персональних ЕОМ, сумісних з IBM PC, частіше за все є розширенням коду ASCII (American Standard Code for Information Interchange - стандартний американський код для обміну інформацією). В даний час використовуються і двобайтові представлення символів.

Двійково-десяткове кодування

В деяких випадках при поданні чисел в пам'яті ЕОМ використовується змішана двійково-десяткова "система числення", де для зберігання кожного десяткового знака потрібен напівбайт (4 біта) і десяткові цифри від 0 до 9 представляються відповідними двійковими числами від 0000 до 1001. Наприклад, упакований десятковий формат, призначений для зберігання цілих чисел з 18-ю значущими цифрами і займає в пам'яті 10 байт (старший з яких знаковий), використовує саме цей варіант.

Основні способи представлення чисел

Застосовуються два основні способи представлення чисел - з фіксованою і плаваючою комою. Більшість універсальних ЕОМ працюють з числами, представленими з плаваючою комою, а більшість спеціалізованих - з фіксованою комою.

Проте цілий ряд машин працює з числами в цих двох форматах.

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

Прямий код.

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

знак: "+" відповідає 0

знак "-" відповідає 1

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

[Х]пк - позначимо таким чином зображення числа "X" в прямому вигляді.

Зауваження.

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

  2. При виконанні операції множення окремо і незалежно знаходяться модулі добутків кодів, а знак знаходиться як результат операції додавання по модулю два:

  1. [X]nK*[Y]nK = sign Z. |Z|

  2. |Z| = |X|*|Y|

  3. sign Z = sign X Å sign Y або Sz = Sx Å Sy

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

Доповнюючий (додатковий) код.

Доповнюючим називається код, в якому для додатнього числа в знаковому розряді пишеться "0", в цифрових - модуль числа, а для від'ємного в знаковому розряді пишеться "1", в цифрових - доповнення числа до одиниці.

Це також правило переводу з доповнюючого коду в прямий код.

Діапазони представлених чисел: Х+min = 0,0...0 - додатній нуль

Х+max = 0,11... 1 = 1-2-n - максимальне додатне число. X-min = 1,11... 1 = 2-2-n - мінімальне від'ємне число Х-max = 1,0...0 - найбільше (по модулю) від'ємне число

Обернений код

Оберненим називається код, для якого в знаковому розряді додатнього числа пишеться "0", в цифрових - модуль числа, а для від'ємного - в знаковому розряді пишеться одиниця, в цифрових - інвертовані розряди початкового числа.

Діапазон чисел:

Х+min = 0,0...0 - додатній нуль

Х+max = 0,11... 1 = 1-2-n - максимальне додатне число. X-min = 1,11... 1 = 2-2-n+1 - мінімальне від'ємне число Х-max = 1,0...0 = 1 - найбільше (по модулю) від'ємне число

У оберненому коді є два зображення нуля:

"Додатний" нуль: ]ок = 0,0.0 і "від'ємний" нуль: ]ок =1,11.11

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

Зауважимо, що отримання оберненого коду простіше, ніж доповнюючого. Це є порозрядно виконувана мікрооперція інверсії коду. Як стане ясно з схемного рішення, ця мікрооперація виконується так само швидко, як і передача коду.

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

У додатковому коді діапазон значень величин залежить від кількості біт пам'яті, відведених для їх зберігання. Наприклад, величини типу Integer (всі назви типів даних тут і нижче представлені в тому вигляді, в якому вони прийняті в мові програмування Turbo Pascal. В інших мовах такі типи даних теж є, але можуть мати інші назви) лежать в діапазоні від -32768 (-215) до 32767 (215 - 1) і для їх зберігання відводиться 2 байти (16 біт); типу LongInt - в діапазоні від -231 до 231 - 1 і розміщуються в 4 байтах (32 біта); типу Word - в діапазоні від 0 до 65535 (216 - 1) (використовується 2 байта) і т.д.

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

Взагалі, розряди нумеруються справа наліво, починаючи з 0. Нижче показана нумерація біт в двохбайтному машинному слові

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

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

Наприклад, якщо число 3710 = 1001012 оголошено величиною типу Integer (шістнадцятибітове зі знаком), то його прямим кодом буде 0000000000100101, а якщо величиною типу LongInt (тридцятидвохбітове зі знаком), то його прямий код буде 00000000000000000000000000100101. Для більш компактного запису частіше використовують шістнадцяткове представлення коду. Отримані коди можна переписати відповідно як 002516 і 0000002516.

Додатковий код цілого від'ємного числа може бути отриманий за наступним алгоритмом:

записати прямий код модуля числа;

інвертувати його (замінити одиниці нулями, нулі - одиницями);

додати до інверсного коду одиницю.

Наприклад, запишемо додатковий код числа -37, інтерпретуючи його як величину типу LongInt (тридцятидвохбітове зі знаком):

прямий код числа 37 є 00000000000000000000000000100101;

інверсний код 11111111111111111111111111011010;

додатковий код 11111111111111111111111111011011 або FFFFFFDB16.

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

1). інвертувати код;

2). додати до коду числа 1;

3). перевести в десяткову систему числення. Отримане число записати зі знаком мінус.

Приклади. Запишемо числа, задані додатковими кодами:

0000 0000 0001 0111. Оскільки в старшому розряді записаний нуль, то результат буде позитивним. Це код числа 23.

1111 1111 1100 00002. Тут записаний код негативного числа. Виконуємо алгоритм:

1). 0000 0000 0011 11112, 2). 0000 0000 0011 11112 +12 =0000 0000 0100 00002 3) 10000002 = 6410.

Відповідь: -64.

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