Разное

СРС2 > Основи машинної арифметики з двійковими числами

Тема: Виконання арифметичних дій з двійковими числами. Коди чисел. Прямий, зворотній і додатковий коди. Особливості складання чисел у зворотному та додатковому кодах. Модифіковані коди.

Теорія

1. Коди чисел

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

1) Розряди числа в коді жорстко зв’язані с певною розрядною сіткою.

2) Для запису коду знаку в розрядній сітці відводиться фіксований, строго визначений розряд.

Наприклад, якщо за основу представлення коду взято один байт, то для представлення числа буде відведено 7 розрядів, а для записи коду знаку один розряд.

Прямий код. Прямий код двійкового числа співпадає по зображенню із записом самого числа. Значення знакового розряду для позитивних чисел дорівнює 0, а для від’ємних чисел 1.

Знаковим розрядом звичайно є крайній розряд в розрядній сітці. Надалі при записі коду знаковий розряд від цифрових домовимося відокремлювати комою. Якщо кількість розрядів коду не зазначено будемо припускати, що під запис коду виділено один байт.

Приклад. У випадку, коли для запису коду виділений один байт, для числа +1101 прямий код 0,0001101, для числа -1101 прямий код 1,0001101.

Зворотний код. Зворотний код для невід’ємного числа збігається з прямим кодом. Для від’ємного числа всі цифри числа замінюються на протилежні (1 на 0, 0 на 1), а в знаковий розряд заноситься одиниця.

Приклад.

Для числа +1101 прямий код 0,0001101; зворотний код 0,0001101. Для числа -1101 прямий код 1,0001101; Зворотний код 1,1110010.

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

Приклад.

Для числа +1101:

Прямий код Зворотний код Додатковий код
0,0001101 0,0001101 0,0001101

Для числа -1101:

Прямий код Зворотний код Додатковий код
1,0001101 1,1110010 1,1110011

2. Особливості складання чисел у зворотному та додатковому кодах

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

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

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

Приклад

Скласти двійкові числа X й Y в зворотному та додатковому кодах.

а) X= 111, Y= -11;

1) Складемо числа, користуючись правилами двійкової арифметики:

    

2) Складемо числа, використовуючи коди:

Прямий код Складання в зворотномукоді Складання в додатковому коді

Так як результат додавання являється кодом додатного числа (знак 0), то (X+Y)звор=(X+Y)дод=(X+Y)пр.

б) X= -101,Y= -11;

1) Складемо числа, користуючись правилами двійкової арифметики:

    

2) Складемо числа, використовуючи коди:

Прямий код Додавання в зворотномукоді Додавання в додатковому коді

Так як сума являється кодом від’ємного числа (знак 1), то необхідно перевести результати в прямий код: – з зворотного коду (X+Y)звор=1,1110100 (X+Y)пр=1,0001011; – з додаткового коду (X+Y)дод=1,1110101 (X+Y)пр=1,0001010+0,0000001=1,0001011. Таким чином, X+Y= -1011 й отриманий результат співпадає з звичайним записом.

3. Модифіковані зворотний й додатковий коди

При переповненні розрядної сітки, відбувається перенесення одиниці в знаковий розряд. Це призводить до неправильного результату, при чому додатне число, що вийшло в результаті арифметичної операції може сприйматися як від’ємне (тому що у знаковому розряді “1”) і навпаки.

Наприклад: 

Тут X і Y – коди додатних чисел, але ЕОМ сприймає результат їх складання як код від’ємного числа (“1” в знаковому розряді). Для виявлення переповнення розрядної сітки вводяться модифіковані коди.

У модифікованому зворотному і модифікованому додатковому кодах під знак числа відводиться не один, а два розряди: “00” відповідає знаку “+”, “11” – знаку “-“. Будь-яка інша комбінація (“01” або “10”), що вийшла в знакових розрядах слугує ознакою переповнення розрядної сітки. Додавання чисел в модифікованих кодах нічим не відрізняється від складання в звичайних зворотному і додатковому кодах.

Розглянемо попередній приклад, виконавши додавання в модифікованому зворотному коді:

    

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

Розглянемо ще один приклад. Приклад. Дані два числа: X=101001 й Y= -11010. Скласти їх в модифікованому додатковому коді.

1) Переведемо X та Y в модифікований додатковий код:

Звичайний запис Модифікованийзворотнийкод Модифікований додатковийкод
X= +101001Y= -011010

2) Виконаємо складання:

    

Переповнення немає (в знакових розрядах “00”), тому отриманий результат – вірний (X+Y=1111)

Варіанти завдань

I) Записати число в прямому, зворотному й додатковому кодах:

1) -11101; 2) -101001; 3) -1001110; 4) 110010; 5) -101101; 6) -1011001; 7) -1001010;

8) 110100; 9) -110101; 10) 11010; 11) -110101; 12) -1010001; 13) -1011110; 14) 111010;

15) -1011101; 16) -1011011; 17) -1101010; 18) 1101010; 19) -1010101; 20) -11010; 21) -111001; 22) -1011001; 23) -1001111; 24) 110110; 25) -1010101.

II) Перевести X та Y в прямий, зворотний і додатковий коди. Скласти їх в зворотному і додатковому кодах. Результат перевести в прямий код. Перевірити отриманий результат, користуючись правилами двійкової арифметики.

1) X= -11101;    Y= -100110; 2) X= 1110100;    Y= -101101; 3) X= -10110;    Y= -111011;
4) X= 1111011;    Y= -1001010; 5) X= -11011;    Y= -10101; 6) X= -10100;    Y= -110011;
7) X= 1101011;    Y= -1011010; 8) X= -11001;    Y= -10111; 9) X= -10100;    Y= 1001101;
10) X= -101010;    Y= 1001111; 11) X= -101101;    Y= -100110; 12) X= 1110101;    Y= -101101;
13) X= -11110;    Y= -111011; 14) X= 1111011;    Y= -1001011; 15) X= -110101;    Y= -10101.
16) X= -10101;    Y= -110011; 17) X= 1001011;    Y= -1011010; 18) X= -11001;    Y= -10101;
19) X= -10101;    Y= 1000101; 20) X= -101010;    Y= 1001011; 21) X= -101001;    Y= -100110;
22) X= 1010101;    Y= -101101; 23) X= -10110;    Y= -111011; 24) X= 1011011;    Y= -1001111;
25) X= -111101;    Y= -10101.

III) Складіть X і Y в модифікованому зворотному і модифікованому додатковому восьмирозрядних кодах. У разі появи ознаки переповнення збільшити число розрядів в кодах і повторити підсумовування. Результат перевести в прямий код і перевірити, користуючись правилами двійковій арифметики.

1) X= 11110;    Y= -111001; 2) X= -11010;    Y= -100111; 3) X= -11001;    Y=-100011;
4) X= -10101;    Y= 111010; 5) X= -1101;    Y= -111011. 6) X= 10100;    Y= 111101;
7) X= 10110;    Y= -111011; 8) X= -11110;    Y= -100101; 9) X= -10001;    Y=-101011;
10) X= 110110;    Y= 110101; 11) X= 11110;    Y= -111011; 12) X= -11010;    Y= -100101;
13) X= -110001;    Y=-100011; 14) X= -10101;    Y= 111000; 15) X= -1101;    Y= -110011.
16) X= 101100;    Y= 111101; 17) X= 10110;    Y= -111001; 18) X= -11010;    Y= -100101;
19) X= -10011;    Y=-101011; 20) X= 100110;    Y= 110101; 21) X= 11110;    Y= -101011;
22) X= -11011;    Y= -100101; 23) X= -110001;    Y=-101011; 24) X= -10101;    Y= 111001;
25) X= -1101;    Y= -110011.

Будь-яка інформація (числа, команди, записи і т. п.) представляється в ЕОМ у вигляді двійкових кодів фіксованої або змінної довжини. Окремі елементи двійкового коду, що мають значення 0 або 1, називають розрядами або бітами. Двійковий код, що складається з 8 розрядів носить назву байта. Для запису чисел також використовують 32-розрядний формат (машинне слово), 16-розрядний формат (півслова) і 64-розрядний формат (подвійне слово).


Комментарии: