Міністерство освіти і науки України
Національний університет «Львівська політехніка»
Кафедра СКС
/
ЗВІТ
з лабораторної роботи № 5
з дисципліни «Організація та функціонування комп’ютерів»
на тему: «Дослідження виконання арифметичних операцій з числами у форматі з фіксованою комою у симуляторі DeComp»
Львів – 2016
Тема: Дослідження виконання арифметичних операцій з числами у форматі з фіксованою комою у симуляторі DeComp.
Мета роботи:
Вивчити форми подання і застосування додатних та від’ємних чисел у арифметиці з фіксованою комою;
Навчитись розробляти алгоритми і здійснити їх реалізацію у інструкціях процесора навчального комп'ютера DeComp виконання арифметичних операцій додавання та віднімання над двійковими числами з фіксованою комою у модифікованих кодах;
Навчитись розробляти алгоритми і здійснити їх реалізацію у інструкціях процесора навчального комп'ютера DeComp виконання арифметичної операції множення двійкових чисел без знаку.
Теоретична частина.
Додавання і віднімання двійкових чисел з фіксованою комою
Простота виконання арифметичних дій є важливою особливістю двійкової системи числення. Але у дійсності, при виконанні арифметичних операцій у конкретному комп’ютері потрібно додатково враховувати не тільки знаки чисел, що обробляються, але і діапазон та форму подання чисел.
Відомо, що одним з можливих шляхів виконання операції віднімання є заміна знаку числа, яке віднімається, на протилежний і додавання його до зменшуваного.
А - В = А + ( - В)
Таким чином операцію арифметичного віднімання замінюють операцією алгебраїчного додавання, яку можна виконати за допомогою двійкових суматорів. Нагадаємо, що від’ємні числа у комп’ютері подаються у прямому, доповняльному і оберненому кодах.
Числа, що зберігаються у прямому коді, перед виконанням обчислень перетворюються у потрібний – доповняльний або обернений - код і після виконання обчислень знову перетворюються у прямий код.
При реалізації заміни віднімання додаванням, другий доданок у наведеному виразі переводиться у доповняльний код шляхом інвертування та додавання одиниці у молодший розряд. (Треба пам’ятати, що доповняльний код додатного числа співпадає з прямим кодом).
A –B = A + B +1
При додаванні двох двійкових чисел, за абсолютною величиною менших одиниці, код суми може за абсолютною величиною перевищити одиницю або стати рівним їй. У такому випадку відбудеться переповнення розрядної сітки, що призведе до неправильного результату. У таких випадках результату не існує. Переповнення може відбутися у тих випадках, коли доданки мають однакові знаки. Ознакою переповнення розрядної сітки слугує протилежність знаку суми, що отримана, знакам доданків. Звідси витікає, що для отримання коректного результату при додаванні двійкових чисел з фіксованою комою обов’язковою є умова, щоб кожний з доданків і їх сума за абсолютною величиною були менше одиниці.
Множення двійкових чисел без знаку
Множення двійкових чисел виконують за правилами, аналогічними для десяткових чисел, тобто визначають проміжні добутки, а потім їх додають. Але, важливо зазначити, що у цьому процесі значно полегшується процес визначення проміжних добутків. Насправді виконуються тільки два правила множення двійкового числа на двійкову цифру:
1). Якщо ця двійкова цифра (розряд множника) дорівнює 1, то двійкове множене просто копіюється без змін у якості проміжного добутку;
2). Якщо цей розряд множника дорівнює 0, то проміжний добуток дорівнює 0.
Ці правила ілюструє приклад 4. Дії виконуються наступним шляхом: у першому розряді множника стоїть 1, тому у якості першого проміжного добутку копіюється значення множеного. У наступному зліва розряді множника стоїть 0, і, відповідно, другий проміжний добуток дорівнює 0000. Далі, дії повторюються.
Хід виконання роботи:
Розробити алгоритм і написати програму додавання довільних 16-розрядних двійкових чисел із знаком, поданих у форматі з фіксованою комою у модифікованому доповняльному коді у інструкціях навчального комп’ютера DeComp.
Виконаємо підготовку до дослідження:
Адр.28 – Число А = 13;
Адр.29 – Число Б = 1;
Адр.30 – Число В = Результат;
Адр.31 – Маска 1 = 1100 0;
Адр.32 – Маска 2= 0011 1;
Адр.33 – Інкремент (Число 1).
ні
так
ні
так
Перед виконанням програми змінні у пам’яті комп’ютера записані у такому вигляді:
Адреса комірки
Дані в двійковому коді
Позначення змінної
Коментар
40
0000 0000 0000 1010
A
Перший доданок в прямому модифікованому коді
41
1100 0000 0000 1001
B
Другий доданок в прямому модифікованому коді
42
1100 0000 0000 0000
М
Маска, що призначена для визначення знаку числа.
43
0000 0000 0000 0001
К
Службова одиниця.
44
0000 0000 0000 0000
S
Змінна для збереження результату додавання .
45
1111 1111 1111 1111
О
Ознака неправильного результату.
№ комірки
Код Інструкції
Мнемонічний формат інструкції
Коментар інструкції
1
0000 0000 0001 1100
LOAD 28
Перевірка числа А на від’ємність
2
0100 0000 0001 1111
AND 31
3
0011 0000 0011 1111
SUB 31
4
1000 0000 0000 1000
JNZ 8
5
0000 0000 0001 1100
LOAD 28
Переведення числа А у доповняльний код
6
0110 0000 0010 0000
XOR 32
7
0010 0000 0010 0001
ADD 33
8
0000 0000 0001 1101
STORE 28
9
0100 0000 0001 1111
LOAD 29
Перевірка числа Б на від’ємність
10
0011 0000 0001 1111
AND 31
11
1000 0000 0001 1111
JNZ 16
12
0000 0000 0001 1101
LOAD 29
Переведення Числа Б у доповняльний код
13
0110 0000 0010 0000
XOR 32
14
0010 0000 0010 0001
ADD 33
15
0001 0000 0001 1101
SRORE 28
16
0000 0000 0001 1100
LOAD 28
Виконання додавання двох чисел
17
0010 0000 0001 1101
ADD 29
18
0001 0000 0001 1110
STORE 30
19
0000 0000 0001 1110
LOAD 30
Перевірка результату на від’ємність
20
0100 0000 0001 1111
ADD 31
21
1000 0000 0001 1011
SUB 31
22
1000 0000 0001 1011
JNZ 27
23
0000 0000 0001 1110
LOAD 30
Переведення результату у прямий код
24
0110 0000 0010 0000
XOR 32
25
0010 0000 0010 0001
ADD 33
26
0001 0000 0001 1110
SRORE 30
27
0111 1100 0000 0000
HALT
Припинення виконання
Виконати дослідження програми, розробленої у пункті 2, у покроковому режимі.
№
PA
РА
А
РІ
ЛАІ
РО
1
0000 0001 1100
0000 0000 0000 1101
0000 0000 0000 1101
0000 0000 0001 1100
0000 0000 0001
000
2
0000 0001 1111
1100 0000 0000 0000
0000 0000 0000 0000
0100 0000 0001 1111
0000 0000 0010
100
3
0000 0011 1111
1100 0000 0000 0000
0100 0000 0000 0000
0011 0000 0001 1111
0000 0000 0011
001
4
0000 0000 0011
1000 0000 0000 1000
0100 0000 0000 0000
1000 0000 0000 1000
0 000 0000 1000
001
5
0000 0000 1101
0000 0000 0000 0001
0000 0000 0000 0001
0000 0000 0001 1101
0000 0000 1001
001
6
0000 0001 1111
1100 0000 0000 0000
0000 0000 0000 0000
0100 0000 0001 1111
0000 0000 1010
100
7
0000 0001 1111
1100 0000 0000 0000
0100 0000 0000 0000
0011 0000 0001 1111
0000 0000 1011
001
8
0000 0000 1011
1000 0000 0001 0000
0100 0000 0000 0000
1000 0000 0001 0000
0000 0001 0000
001
9
0000 0001 1100
0000 0000 0000 1101
0000 0000 0000 1101
0000 0000 0001 1100
0000 0001 0001
001
10
0000 0001 1101
0000 0000 0000 0001
0000 0000 0000 1110
0010 0000 0001 1101
0000 0001 0010
000
11
0000 0001 1110
0000 0000 0000 1110
0000 0000 000 1110
0001 0000 0001 1110
0000 0001 0011
000
12
0000 0001 1110
0000 0000 0000 1110
0000 0000 0000 1110
0000 0000 0001 1110
0000 0001 0100
000
13
0000 0001 1111
1100 0000 0000 0000
0000 0000 0000 0000
0100 0000 0001 1111
0000 0001 0101
100
14
0000 0001 1111
1100 0000 0000 0000
0100 0000 0000 0000
0011 0000 0001 1111
0000 0001 0110
001
15
0000 0001 0110
1000 0000 0001 1011
0100 0000 0000 0000
1000 0000 0001 1011
0000 0001 1011
001
16
0000 0001 1011
0111 1100 0000 0000
0100 0000 0000 0000
0111 1100 0000 0000
0000 0001 1011
001
Розробити алгоритм і написати програму множення довільних двійкових чисел без знаку. Варіант виконання вибрати з таблиці:
№
варіанту
Варіант
Хто виконує
1
Метод множення 1
1-ша підгрупа, непарні номери із списку
2
Метод множення 2
1-ша підгрупа, парні номери із списку
3
Метод множення 3
2-га підгрупа, непарні номери із списку
4
Метод множення 4
2-га підгрупа, парні номери із списку
Виконаємо перевірку до дослідження:
Адр.16 – Число А=9;
Адр.17 – Число Б=13;
Адр.18 – Результат;
Адр.19 – Лічильник цикл;
Адр.20 – Інкремент (число 1);
ні
так
ні
так
№ комірки
Код інструкцї
Мнемонічний формат інструкції
Коментарі інструкції
0
0000 0000 0001 0000
LOAD 16
Перевірка крайнього біта
1
1111 1110 0000 0000
RCR
2
0001 0000 0001 0000
STORE 16
3
0000 0000 0001 0010
LOAD 18
4
1100 0000 0000 0110
JNC 6
5
0010 0000 0001 0001
ADD 17
Додавання множника
6
1111 1010 0000 0000
ROR
Зсув СДП
7
0001 0000 0001 0010
STORE 18
8
0000 0000 0001 0011
LOAD 19
Зменшення лічильника циклу
9
0011 0000 0001 0100
SUB 20
10
0001 0000 0001 0011
STORE 19
11
1000 0000 0000 0000
JNZ 0
Перевірка умови виходу
12
0111 1111 1111 1111
HALT
Зупинка
Виконати дослідження програми, розробленої у пункті 4, у покроковому режимі.
№
РА
РД
А
РІ
ЛАІ
РО
1
0000 0001 0000
0000 0000 0000 1001
0000 0000 0000 1001
0000 0000 0001 000
0000 0000 0001
000
2
0000 0000 0001
1111 1110 0000 0000
0000 0000 0000 0100
1111 1110 0000 0000
0000 0000 0010
001
3
0000 0001 0000
0000 0000 0000 0100
0000 0000 0000 0100
0001 0000 0001 0000
0000 0000 0011
001
4
0000 0001 0010
0000 0000 0111 0101
0000 0000 0111 0101
0000 0000 0001 0010
0000 0000 0100
001
5
0000 0000 0100
1100 0000 0000 0110
0000 0000 1000 0010
0010 0000 0001 0001
0000 000 0110
001
6
0000 0001 0001
0000 0000 0000 1101
0000 00000 1000 0010
0010 0000 0001 0001
0000 0000 0110
000
n
0000 0000 1100
0111 1100 0000 0000
0000 0000 0000 0000
0111 1100 0000 0000
0000 0000 1100
100
Висновок: Під час виконання даної лабораторної роботи я вивчив форми подання і застосування додатних і від’ємних чисел у форматі з фіксованою комою. Навчився розробляти алгоритми і реалізовувати їх у інструкціях процесора навчального симулятора DeComp виконання арифметичних операцій додавання та віднімання над двійковими числами з фіксованою комою у модифікованих кодах, а також я начився розробляти алгоритми і реалізовувати їх у інструкціях процесора навчального симулятора DeComp виконання арифметичних операцій множення двійкових чисел без знаку.