Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Перевірка за допомогою демонстраційної програми правильності результатів, отриманих під час виконання індивідуального завдання у відповідності з п.4
Лабораторна робота № 3 МАШИННІ КОДИ. ДОДАВАННЯ ТА ВІДНІМАННЯ ЦІЛИХ ДВІЙКОВИХ ЧИСЕЛ
Мета роботи
В результаті виконання лабораторної роботи: · навчитись зображувати в прямому, зворотному та додатковому кодах цілі двійкові числа із знаком; · навчитись використовувати вказані коди для виконання операцій додавання та віднімання цілих двійкових чисел із знаком.
Теми для попереднього пророблення 2.1. Особливості зображення цілих додатних і від’ємних двійкових чисел в прямому, зворотному та додатковому кодах. 2.2. Правила додавання двійкових цифр. 2.3. Модифіковані зворотний і додатковий коди. Завдання до лабораторної роботи 3.1. Із таблиці 1, у відповідності з порядковим номером в журналі групи, вибрати значення X і Y, які подані одне – в додатковому, а друге – в зворотному коді, але для зображення обох використати поле довжиною 1 байт (мати на увазі, що далі в таблицях і тексті зображення знака числа відокремлюється від зображення значущої частини числа комою).
Таблиця 1 – Індивідуальні завдання (початок)
Таблиця 1 – Індивідуальні завдання (закінчення)
3.2.Для свого варіанта вручну отримати коди десятковий, двійковий, прямий, зворотний та додатковий для +X, –X, +Y і –Y і заповнити таблицю 2, як показано для варіанта 30 із таблиці 1.
Таблиця 2 – Приклад отримання кодів (для варіанта № 30 із таблиці 1)
Таблиця 3 (а) – Приклад отримання результатів (для варіанта № 30 із таблиці 1)
Таблиця 3 (б) – Приклад отримання результатів (для варіанта № 30 із таблиці 1)
3.3.Виконати вручну, з використанням однобайтового поля, додавання в додатковому і зворотному кодах двійкових чисел X і Y, використовуючи різні комбінації знаків у цих чисел, а саме (+X,+Y), (+X,–Y), (–X,–Y) і (–X,+Y). 3.4.Результати додавання, виконані в п.3.3, відтворити в таблиці 3, як показано для варіанта 30 із таблиці 1. 3.5.Для всіх комбінацій знаків у чисел X і Y отримати результати шляхом запускання демонстраційної програми. 3.6.Отримані після запускання демонстраційної програми результати порівняти з отриманими вручну.
Хід отримання результатів 4.1. Правила додавання двійкових цифр чисел А і В представлені в таблиці 4. Тут показані правила додавання двійкових цифр ai та bi однойменних розрядів чисел А і В з урахуванням можливого переносу Pі-1 із попереднього розряду. 4.2. Слід мати на увазі, що операція додавання виконується в модифікованих зворотному та додатковому кодах. Операція віднімання замінюється операцією додавання з від’ємним числом. Далі в тексті використані такі умовні позначення: пк – прямий код; зк – зворотний код; мзк – модифікований зворотний код; дк – додатковий код; мдк – модифікований додатковий код. При зображенні цілих чисел зі знаком використовуються один або два (для модифікованих кодів) старших двійкових розрядів для зображення кода знака (0 або 00 – для додатного числа і 1 або 11 – для від’ємного числа).
Таблиця 4 – Правила додавання двійкових цифр
4.3. Прямий двійковий код цілого числа із знаком відрізняється від прямого двійкового коду цілого числа без знака використанням одного старшого двійкового розряду для зображення кода знака (0 – для додатного числа і 1 – для від’ємного числа).
Наприклад:
А = +1011 [A]пк = 0,0001011 В = –11111 [B]пк = 1,0011111
4.4. Зворотний код цілого додатного двійкового числа співпадає з його прямим кодом. Зворотний код цілого від’ємного числа можна отримати із прямого коду відповідного цілого додатного числа, якщо в знаковому розряді вказати 1, а решту цифр прямого коду змінити на протилежні. Якщо маємо зворотний код цілого від’ємного числа, то можемо отримати прямий код відповідного цілого додатного числа, якщо в знаковому розряді вкажемо 0, а решту цифр зворотного коду змінимо на протилежні. В зворотному коді знаковий розряд і значуща частина числа вважаються єдиним цілим. Знак суми отримується автоматично під час додавання вмісту знакових розрядів доданків і одиниці переносу із значущої частини доданків, якщо одиниця переносу є. Особливістю використання зворотного коду при виконанні операції додавання цілих двійкових чисел із знаком є те, що при появі одиниці переносу із знакового розряду має бути виконана корекція суми. Для здійснення корекції необхідно виконати операцію додавання одиниці переносу зі значущою частиною числа.
Приклад 1: А = + 11101 (+29); В = – 01011 (–11)
0,11101 [A]зк +1,10100 [B]зк 10,10001 –> 0,10010 –> + 10010 (+18) Приклад 2: А = – 000110 (–6); В = – 010111 (–23)
1,111001 [A]зк + 1,101000 [B]зк 11,100001 –> 1,100010 –> 1, 011101 –> – 011101 (–29) При виконанні операції додавання з використанням зворотного коду отримуваний знак суми може не відповідати очікуваному, тобто замість знака “плюс” з’являється знак “мінус” або навпаки. Тому операцію додавання треба виконувати з використанням модифікованого зворотного коду, в якому під знак числа відводяться два двійкових розряди.
Приклад 3: А = – 10011 (–19) В = – 10001 (–17)
11,01100 [A]мзк + 11,01110 [B]мзк 110,11010
Зліва з’явилась одиниця переносу, тому має бути виконана корекція суми. Для здійснення корекції необхідно виконати операцію додавання одиниці переносу зі значущою частиною числа. Будемо мати:
110,11010 –> 10,11011
Відмінність цифр в знакових розрядах свідчить про те, що треба виконати модифікацію суми. Для цього отримане число разом із знаковими розрядами зрушують на один розряд вправо, а у звільненому лівому знаковому розряді дублюють значення отриманого після зсуву правого знакового розряду. Будемо мати:
10,11011 –> 11,011011 Зрештою будемо мати: 11,011011 –> 1,100100 –> – 100100 (–36) 4.5.Додатковий код цілого додатного двійкового числа співпадає з його прямим кодом. Додатковий код цілого від’ємного числа можна отримати із прямого коду відповідного цілого додатного числа, якщо в знаковому розряді вказати 1, а решту цифр прямого коду змінити на протилежні, а потім виконати операцію додавання отриманого коду з одиницею. Якщо маємо додатковий код цілого від’ємного числа, то можемо отримати прямий код відповідного цілого додатного числа, якщо виконаємо вказані вище дії, але в знаковий розряд впишемо 0. В додатковому коді знаковий розряд і значуща частина числа вважаються єдиним цілим. Знак суми отримується автоматично під час додавання вмісту знакових розрядів доданків і одиниці переносу із значущої частини доданків, якщо одиниця переносу є.
Приклад 4:
[А]пк = 1,110100 [A]дк = 1,001011 + 0,000001 = 1,001100 [A]дк = 1,001100 –> 0,110011 + 0,000001 = 0,110100 Особливістю використання додаткового коду при виконанні операції додавання цілих двійкових чисел із знаком є те, що поява одиниці переносу із знакового розряду не враховується.
Приклад 5:
А = +10101 В = +1110 D = –10101 E = –01110
[А]дк = 0,10101 [D]дк = 1,01011 +[В]дк = 0,01110 +[E]дк = 1,10010 [С]дк = 1,00011 [F]дк = 10,11101 –> 0,11101 При виконанні операції додавання з використанням додаткового коду отримуваний знак суми може не відповідати очікуваному, тобто замість знака “плюс” з’являється знак “мінус” або навпаки, як показано в прикладі 5. Тому операцію додавання треба виконувати з використанням модифікованого додаткового коду, в якому під знак числа відводяться два двійкових розряди, причому для зображення знака “плюс” використовується код 00, а для зображення знака “мінус”– код 11. Відмінність цифр в знакових розрядах, а саме якщо з’являться коди 01 або 10, свідчить про те, що треба виконати модифікацію суми. Для цього отримане число разом із знаковими розрядами зрушують на один розряд вправо, а у звільненому лівому знаковому розряді дублюють значення отриманого після зсуву правого знакового розряду.
Приклад 6: A = +10010 B = +11001
[A]мдк = 00,10010 +[B]мдк = 00,11001 [C]мдк = 01,01011 –> 00,101011 Перевірка: 100102 –> 1810 110012 –> 2510 1010112 –> 4310
Приклад 7: A = –01011 B = –01101
[A]мдк = 11,10101 +[B]мдк = 11,10011 [C]мдк = 11,01000 –> 0,10111 + 0,00001 = 0,11000 –> C = –11000
Перевірка: 10112 –> 1110 11012 –> 1310 110002 –> 2410 Приклади: +101001 (41) + (+110100 (52)) = +1011101 (93) –11001 (–25) + (+01001 (9)) = 11,00111 + 00,01001 = = 11,10000 –> 0,01111 + 0,00001 –> –10000 (–16) –00110 (–6) + (+10100 (20)) = 11,11010 + 00,10100 = 100,01110 –> 00,01110 (14) 4.6. Таким чином, основні правила додавання (віднімання) цілих чисел із знаком можна сформулювати так: а). Операція віднімання замінюється операцією додавання з від’ємним числом. б). Доданки повинні мати однакову кількість розрядів. Для вирівнювання розрядних сіток доданків треба дописувати нулі зліва до значущої частини числа. в). Приписані незначущі нулі змінюють своє значення при перетвореннях кодів за загальними правилами. г). Знакові розряди чисел враховуються при додаванні нарівні зі значущими розрядами. д). При появі одиниці переносу із старшого знакового розряду, в разі використання зворотного коду, ця одиниця підсумовується зі значущою частиною числа. При використанні додаткового коду одиниця переносу не враховується. е). Знак результату формується автоматично. є). Результат представляється в тому коді, в якому представлені доданки.
Перевірка за допомогою демонстраційної програми правильності результатів, отриманих під час виконання індивідуального завдання у відповідності з п.4 5.1. Спочатку треба вручну отримати результати для свого індивідуального завдання і заповнити всі позиції в таблицях 2 і 3, як вказано в п.3.2 для варіанта 30 із таблиці 1. 5.2. Перевірити правильність заповнення всіх клітинок в таблицях 2 і 3 за допомогою демонстраційної програми, текст якої розміщений нижче. 5.3. Демонстраційну програму треба запустити на виконання в одному з середовищ, яке підтримує програмування на мові Pascal. 5.4. Текст демонстраційної програми.
program summirovan; uses crt; var a,b:integer; {Введенные числа} {Те же числа, но в кодах} a_pr,b_pr:word; a_ok,b_ok:word; a_dk,b_dk:word; d :char; function plusdk(a,b:word):word; {Сложение в дополнительном коде} var trans:word; {Бит переноса} digit:word; {Текущий бит} result:word; {Для хранения промежуточного результата } {при вычислении бита переноса} c:word; {Сумма} i:byte; {Счетчик} begin trans:=0; for i:=0 to 7 do begin digit:=(a and (1 shl i)) xor (b and (1 shl i)) xor (trans shl i); if digit=0 then c:=c and (255 xor (1 shl i)) else c:=c or (1 shl i); result:=(a and (1 shl i))and(b and(1 shl i)); result:=result or ((b and(1 shl i))and(trans shl i)); result:=result or ((a and (1 shl i))and(trans shl i)); if result<>0 then trans:=1 else trans:=0; end; plusdk:=c; {Возвращение результата} end; function plusok(a,b:word):word; {Сложение в обратном коде} var trans,digit,result:word; c:word; i:byte; begin trans:=0; for i:=0 to 7 do begin digit:=(a and (1 shl i)) xor (b and (1 shl i)) xor (trans shl i); if digit=0 then c:=c and (255 xor (1 shl i)) else c:=c or (1 shl i); result:=(a and (1 shl i)) and (b and (1 shl i)); result:=result or ((b and (1 shl i))and(trans shl i)); result:=result or ((a and (1 shl i))and(trans shl i)); if result<>0 then trans:=1 else trans:=0; end; if trans=1 then c:=plusok(c,1); {Перенос из знакового разряда } {прибавляется к младшему разряду} plusok:=c; end; function bdtos(a:word):string; {Преобразование битов числа в строку} var i:byte; s:string; begin s:=''; for i:=7 downto 0 do s:=s+chr(ord(((1 shl i) and a)<>0)+48); bdtos:=s; end; function prtoi(a:word):integer; {Преобразование из прямого кода в integer} begin if a<127 then prtoi:=a else prtoi:=-(a and 127); end; function itopr(a:integer):word; {Преобразование из integer в прямой код} begin if a>=0 then itopr:=a else itopr:=abs(a) or (1 shl 7); end; function prok(a:word):word;{Преобразование из прямого кода в обратный } {и наоборот} begin if a<127 then prok:=a else prok:=(not a) or (1 shl 7); end; function prdk(a:word):word; {Преобразование из прямого кода в дополнительный } {и наоборот} begin if a<127 then prdk:=a else prdk:=plusdk((not a) or (1 shl 7),1); end; begin while true do begin clrscr; write('Введите A и B через пробел: '); readln(a,b); a_pr:=itopr(a); b_pr:=itopr(b); a_ok:=prok(a_pr); b_ok:=prok(b_pr); a_dk:=prdk(a_pr); b_dk:=prdk(b_pr); writeln(' [A]пк = ',bdtos(a_pr)); writeln(' [B]пк = ',bdtos(b_pr)); writeln(' [A]ок = ',bdtos(a_ok)); writeln(' [B]ок = ',bdtos(b_ok)); writeln(' [A]дк = ',bdtos(a_dk)); writeln(' [B]дк = ',bdtos(b_dk)); writeln('Результат в обратном коде:'); writeln(' [A]oк+[B]oк = ',bdtos(plusok(a_ok,b_ok))); writeln('Результат в дополнительном коде:'); writeln(' [A]дк+[B]дк = ',bdtos(plusdk(a_dk,b_dk))); write('Результат в прямом коде:'); writeln(bdtos(prdk(plusdk(a_dk,b_dk)))); writeln('Результат в 10-м коде:'); writeln(' [A]дес+[B]дес = ',prtoi(prdk(plusdk(a_dk,b_dk)))); gotoxy(30,25); textcolor(15); writeln('Нажмите: Enter - чтобы продолжить и '); write(' 1 - чтобы выйти'); d:=readkey; if (d='1') then halt; end; end.
Контрольні запитання
6.1. Скільки бітів в одному та двох байтах? 6.2. Чи відрізняються прямий, зворотний і додатковий коди у додатного та у від’ємного числа? 6.3. Враховується чи ні одиниця переносу із старшого знакового розряду при використанні кодів зворотного та додаткового під час виконання операції додавання? 6.4. В чому особливість модифікованих кодів? 6.5. Що треба виконати, якщо в знакових розрядах при використанні модифікованих кодів під час виконання операції додавання з’являється значення 01 або 10?
Зміст звіту
7.1. Звіт треба оформити в зошиті для звітів або на аркушах формату А4. 7.2. Звіт може бути роздрукований. 7.3. При оформленні звіту треба використати українську мову. 7.4. В звіті мають бути вказані: 1) номер лабораторної роботи; 2) тема лабораторної роботи; 3) мета її виконання; 4) індивідуальне завдання; 5) результати виконання індивідуального завдання; 6) особливості функціонування демонстраційної програми і результати, отримані при її виконанні; 7) відповіді на контрольні запитання; 8) висновки по даній лабораторній роботі. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 176. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |