Міністерство освіти та науки України
Національний університет „Львівська політехніка”
Кафедра СКС
Звіт
з лабораторної роботи № 2
з дисципліни: “Організація та функціонування комп’ютерів”
на тему: “ Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій. ”
Тема: Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій.
Мета: 1. Засвоїти порядок виконання програм у комп’ютері. Ознайомитися з форматом та набором інструкцій симулятора навчальної ЕОМ. Засвоїти формати і способи використання інструкцій звертання до пам’яті та інструкцій арифметичних операцій;
2. Засвоїти призначення регістра ознак процесора;
3. Ознайомитися з потактовим режимом роботи навчального комп’ютера.
4. Засвоїти базовий порядок виконання інструкції навчального комп’ютера та навчитися досліджувати хід виконання окремих інструкцій.
Усі інструкції навчального комп’ютера за призначенням можна розділити на такі групи:
1) інструкції звертання до пам’яті (LOAD та STORE);
2) арифметичні інструкції (ADD та SUB);
3) логічні інструкції (AND, OR, XOR та NOT);
4) інструкції вводу/виводу (INPUT та OUTPUT);
5) інструкції керування виконанням програми:
а) інструкція зупинки (HALT);
б) інструкції умовних переходів (JNZ, JZ, JP, JM, JNC та JC);
в) інструкція безумовного переходу (JMP);
6) інструкції зсувів (вліво (Left) та вправо (Right)):
а) інструкції логічного зсуву (LSL та LSR);
б) інструкції арифметичного зсуву (ASL та ASR);
в) інструкції циклічного зсуву (ROL та ROR); г) інструкції циклічного зсуву через тригер ознаки переносу C (RCL та RCR).
Інструкції звертання до пам’яті:
1) LOAD ADR - завантажити (від англ. Load - завантажувати).
Дивимося на рис. 2.3: машинний код цієї інстркції – 0000 aaaa aaaa aaaa; виконання – (ADDR) Акумулятор. Ця інструкція здійснює читання 16-розрядного числа з комірки пам’яті, на яку вказує поле адреси ADR, і розміщує його у акумуляторі. Перші найстарші 4 розряди (старша тетрада) містять код операції “завантаження” з пам’яті – 0000, а наступні 12 розрядів – адресу комірки, з якої відбуватиметься читання. Наприклад, для того, щоб прочитати число з 15-ї або 2041-ої комірки пам’яті і записати його до акумулятора, необхідно використати :
Мнемонічний запис
Машинний код
LOAD 15
0000 0000 0000 1111
LOAD 2041
0000 1111 1111 1001
2) STORE ADR - зберегти (від англ. Store - зберігати) Машинний код – 0001 aaaa aaaa aaaa; виконання – Акумулятор
(ADDR)). Ця інструкція здійснює протилежну до інструкції LOAD дію, тобто 16-розрядне значення вмісту акумулятора записує у комірку пам’яті, на яку вказує поле адреси ADR. Код операції інструкції “збереження” до пам’яті – 0001, а наступні 12 розрядів – адреса комірки пам’яті. Наприклад, щоб записати значення вмісту акумулятора до 148-ї або 2043 комірки, необхідно використати такі машинні коди:
Мнемонічний запис
Машинний код
STORE 148
0001 0000 1001 0100
STORE 2043
0001 1111 1111 1011
Якщо нам потрібно у пам’яті перенести число з однієї комірки до іншої, однією командою цього зробити не можна. Потрібно скористатись послідовно двома командами - LOAD та STORE, причому акумулятор буде посередницьким пунктом, через який відбудеться передача. Так, програма з двох інструкцій:
Мнемонічний запис
Машинний код
LOAD 28
0000 0000 0001 1100
STORE 56
0001 0000 0011 1000
виконує переміщення 16-розрядного числа, яке знаходилось у 28-й комірці пам’яті, до 56-ї комірки. Відзначимо, що інструкція читання (завантаження) LOAD не знищує числа у 28-ій комірці. Після виконання у цій програмі інструкції запису (збереження) STORE, код
26
числа з 28-ої комірки пам’яті буде скопійований до 56-ої комірки, а у акумуляторі залишиться те саме 16-розрядне число з 28-ї комірки.
Інструкції арифметичних операцій:
1) ADD ADR – арифметичне додавання (від англ. Addition -додавання) Машинний код – 0010 aaaa aaaa aaaa; виконання – Акумулятор + (ADDR)
Акумулятор. Ця інструкція виконує додавання вмісту акумулятора і числа з комірки пам’яті, на яку вказує адреса ADR, та записує результат назад до акумулятора. Перші 4 розряди машинного коду містять код операції додавання – 0010, а решта 12 розрядів – адресу у пам’яті 2-го операнда, що буде додаватись. Знову звернемо увагу на центральну позицію акумулятора, який постачає одне з двох чисел для додавання та зберігає результат.
Можна не переживати, що результат знищить одне з 2-х чисел, яке перед виконанням дії додавання було записано з пам’яті до акумулятора, бо воно залишилося у пам’яті за своєю адресою. Проте, якщо операнд був записаний в акумулятор як результат виконання попередньої інструкції і не був збережений у пам’яті, то тоді він пропаде – буде “затертий” новим значенням акумулятора. Нехай нам потрібно додати 3 числа, які знаходяться у 21-й, 22-й та 23-й комірках пам’яті, а результат необхідно зберегти в 25-й комірці. Відповідна програма у мнемонічних кодах матиме вигляд:
Машинний код
Мнемонічний запис
Коментар
0000 0000 0001 0101
LOAD 21
зчитування 1-го операнда з пам’яті до акумулятора
0010 0000 0001 0110
ADD 22
додавання вмісту акумулятора (числа з 21-ої комірки) і вмісту 22-ої комірки пам’яті. Тепер у акумуляторі знаходиться перший проміжний доданок
0010 0000 0001 0111
ADD 23
додавання першого проміжного доданку, що знаходиться у акумуляторі, з вмістом 23-ої комірки пам’яті. Тепер у акумуляторі – другий проміжний доданок – результат додавання трьох чисел
0001 0000 0001 1001
STORE 25
збереження результату у 25-й комірці пам’яті. Числовий код результату копіюється до 25-ї комірки і він же залишається у акумуляторі. У машинних кодах ця програма матиме наступний вигляд
2) SUB ADR – віднімання (від англ. Subtraction - віднімання). Машинний код – 0011 aaaa aaaa aaaa; виконання: Акумулятор – (ADDR)
Акумулятор. Ця інструкція виконує віднімання від вмісту акумулятора значення вмісту комірки пам’яті з адресою, що вказана у полі ADR, і записує результат назад до акумулятора. Код операції віднімання – 0011, а решту 12 розрядів займає адреса комірки, вміст якої буде відніматися. Інші властивості цієї інструкції співпадають із властивостями інструкції додавання ADD.
Хід виконання роботи
1. Ознайомитись з теоретичними відомостями до лабораторної роботи № 2.
2. Описати призначення прапорців Регістру Ознак;
Z (Zero - нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0.
S (Sign - знак) встановлюється в 1, якщо результат операції – від’ємне число.
C (Carry - перенос) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки.
3. Ввести у симулятор і виконати дослідження у потактовому режимі програми додавання двох чисел, яка була підготована у роботі № 1. Записати результати – мікропрограму виконання з необхідними поясненями.
Записав програму в пам’ять комп’ютера. Переходжу в потатковий режим, виконую програму, записую вихідні дані.
Команда LOAD
№
п/п
Код, що обробляється
Мнемонічний запис інструкції
Коментар до кожної інструкції
1
0000 0000 0000
ЛАІ →РА
Вибір адреси 1-ої інструкції і занесення її до Регістра Адреси.
2
0000 0000 0000 1010
Пам. РА→РД
Вибір коду інструкції з РА і занесення його до Регістра Даних.
3
0000 0000 0000 1010
РД→РІ
Декодування інструкції у Регістрі Інструкцій
4
0000 0000 1010
РІ→РА
Вибір адреси 1-го операнда.
5
0000 0000 0010 0101
Пам. РА→РД
Вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних .
6
0000 0000 0010 0101
РД→А
Запис першого операнда до Акумулятора.
7
0000 0000 0001
ЛАІ+1→ЛАІ
Вибір адреси 2-ї інструкції.
Команда STORE
№
п/п
Код, що обробляється
Мнемонічний запис інструкції
Коментар до кожної інструкції
16
0000 0000 0010
ЛАІ →РА
Вибір адреси 1-ої інструкції і занесення її до Регістра Адреси.
17
0001 0000 0000 1100
Пам. РА→РД
Вибір коду інструкції з РА і занесення його до Регістра Даних.
18
0001 0000 0000 1100
РД→РІ
Декодування інструкції у Регістрі Інструкцій
19
0000 0000 1100
РІ→РА
Вибір адреси 1-го операнда.
20
0000 0000 0011 1110
А→РД
Вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних .
21
0000 0000 0011 1110
РД→ Пам.РА
Запис першого операнда до Акумулятора.
22
0000 0000 0011
ЛАІ+1→ЛАІ
Вибір адреси 2-ї інструкції.
Команда HALT
№
п/п
Код, що обробляється
Мнемонічний запис інструкції
Коментар до кожної інструкції
23
0000 0000 0011
ЛАІ →РА
Вибір адреси 4-ої інструкції і занесення її до Регістра Адреси.
24
0111 1100 0000 0000
Пам. РА→РД
Вибір коду інструкції з РА і занесення його до Регістра Даних.
25
0111 1100 0000 0000
РД→РІ
Декодування інструкції у Регістрі Інструкцій (Завершення виконання)
4. Ввести у симулятор та виконати дослідження у покроковому режимі програми DeComp, яка відніматимен два числа А і В для значеннь, коли А=В, А>В, А<В, вибравши довільнівідповідні значення. Виписати результати виконання дослідження і значення прапорців ознак у таблицю, взірець якої поданий у роботі №1. Поясніть отримані дані.
Записав програму у пам’ять, яка виконує віднімання чисел А та В при умовах, що: 1) А=В; 2) A>B; 3)A<B. Вмикаю покроковий режим і проводжу дослідження.
А=В=7 (
11
10
=
1011
2
)
№
РА
РД
А
РІ
ЛАІ
РО(ZSC)
1
0000 0000 1010
0000 0000 0000 1011
0000 0000 0000 1011
0000 0000 0000 1010
0000 0000 0001
0 0 0
2
0000 0000 1011
0000 0000 0000 0101
0000 00000000 0000
0011 0000 0000 1011
0000 0000 0010
1 0 0
3
0000 0000 1100
0000 0000 0000 0000
0000 00000000 0000
0001 0000 0000 1100
0000 0000 0011
1 0 0
4
0000 0000 0011
0111 1100 0000 0000
0000 0000 0000 0000
0111 1100 0000 0000
0000 0000 0011
1 0 0
У випадку 1 спостерігаю віднімання однакових чисел. Прапорець Z вказує на нульовий результат.
А-В. А=7; В=5. (
7
10
=
0111
2
=
5
10
=
0101
2
)
№
РА
РД
А
РІ
ЛАІ
РО(ZSC)
1
0000 0000 1010
0000 0000 0000 0111
0000 0000 0000 0111
0000 0000 0000 1010
0000 0000 0001
0 0 0
2
0000 0000 1011
0000 0000 0000 0101
0000 0000 0000 0010
0011 0000 0000 1011
0000 0000 0010
0 0 0
3
0000 0000 1100
0000 0000 0000 0010
0000 00000000 0010
0001 0000 0000 1100
0000 0000 0011
0 0 0
4
0000 0000 0011
0111 1100 0000 0000
0000 0000 0000 0010
0111 1100 0000 0000
0000 0000 0011
0 0 0
У випадку 2 спостерігаю віднімання від більшого числа менше. Отже, всі прапорці неактивні.
А-В. А=5; В=7.
№
РА
РД
А
РІ
ЛАІ
РО(ZSC)
1
0000 0000 1010
0000 0000 0000 0101
0000 0000 0000 1001
0000 0000 0000 1010
0000 0000 0001
0 0 0
2
0000 0000 1011
0000 0000 0000 0111
1111 1111 1111 1110
0011 0000 0000 1011
0000 0000 0010
0 1 1
3
0000 0000 1100
1111 1111 1111 1110
1111 1111 1111 1110
0001 0000 0000 1100
0000 0000 0011
0 1 1
4
0000 0000 0011
0111 1100 0000 0000
1111 1111 1111 1110
0111 1100 0000 0000
0000 0000 0011
0 1 1
У випадку 3 спостерігаю віднімання від меншого числа більше. Прапорці S i C активні. S показує, що результат від’ємний. C повідомляє, що в результаті віднімання відбулося переповнення розрядності сітки. Ц е сталося тому, що процeсор переводить від’ємник у доповняльний код.
5. В нести в симулятор та виконати дослідження у потактовому режимі трьох окремих інтрукцій- LOAD, SCORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті.
Інструкція LOAD (Машинний код: 0000 аааа аааа аааа), зчитує дані з комірки пам’яті з адреси «аааа аааа аааа» і записує їх до акумулятора. Вона обробляє лише один аперанд, що повинен бути заздалегідь підготовлений Проводимо підготовку до дослідження.
Записую у 0-ву комірку інструкцію LOAD 01 (0000 0000 0000 0001), а у 1-шу – чило
5(0000 0000 0000 0101). У лічильнику Адрес інструкцій вибираю початок програми з 0-ї комірки, переключаюсь на потактовий рижим роботи і виконую дослідження.
№
п/п
Код, що обробляється
Мнемонічний запис інструкції
Коментар до кожної інструкції
1
0000 0000 0000
ЛАІ →РА
Вибір адреси інструкції і занесення її до Регістра Адреси.
2
0000 0000 0000 0001
Пам. РА→РД
Вибір коду інструкції з РА і занесення його до Регістра Даних.
3
0000 0000 0000 0001
РД→РІ
Декодування інструкції у Регістрі Інструкцій
4
0000 0000 1010
РІ→РА
Вибір адреси операнда.
5
0000 0000 0001
Пам. РА→РД
Вибір коду операнда з пам’яті і запис його до Регістру Даних .
6
0000 0000 0010 0101
РД→А
Запис першого вмісту РД до А.
7
0000 0000 0001
ЛАІ+1→ЛАІ
Визначення адреси наступної інструкції.
Інструкція STORE 01 (Машинний код: 0001 0000 0000 0001), записує з акумулятора число в комірку з адресою «аааа аааа аааа». Інструкція обробляє однин операнд, що повинен бути підготовлений заздалегідь.
Проводимо підготовку до дослідження.
Записую у 0-ву комірку інструкцію STORE 01 (0001 0000 0000 0001), а у 1-шу – чило
5(0000 0000 0000 0101). У лічильнику Адрес інструкцій вибираю початок програми з 0-ї комірки, переключаюсь на потактовий рижим роботи і виконую дослідження.
№
п/п
Код, що обробляється
Мнемонічний запис інструкції
Коментар до кожної інструкції
1
0000 0000 0000
ЛАІ →РА
Вибір адреси інструкції і занесення її до Регістра Адреси.
2
0001 0000 0000 0001
Пам. РА→РД
Вибір коду інструкції з РА і занесення його до Регістра Даних.
3
0001 0000 0000 0001
РД→РІ
Декодування інструкції у Регістрі Інструкцій
4
0000 0000 0001
РІ→РА
Вибір адреси операнда.
5
0000 0000 0000 0101
А→РД
Вибір коду операнда з пам’яті і запис його до Регістру Даних .
6
0000 0000 0000 0101
РД→Пам.РА
Запис першого вмісту РД до Пам’яті.
7
0000 0000 0001
ЛАІ+1→ЛАІ
Визначення адреси наступної інструкції.
Внстукція SUB 01 (Машинний код: 0011 0000 0000 0001), віднімає два числа(від того, що міститься в акумуляторі віднімає число, що знаходиться у комірці з адресю «аааа аааа аааа»). Дана інструкція обробляє два операнда, які повинні бути заздалегідь підготовлені.
Проводимо підготовку до дослідження.
Записую у 0-ву комірку інструкцію SUB 01 (0011 0000 0000 0001), у 1-шу комірку – чило
5(0000 0000 0000 0101), а у акумулятор – число 8(0000 0000 0000 1000). У лічильнику Адрес інструкцій вибираю початок програми з 0-ї комірки, переключаюсь на потактовий рижим роботи і виконую дослідження.
№
п/п
Код, що обробляється
Мнемонічний запис інструкції
Коментар до кожної інструкції
1
0000 0000 0000
ЛАІ →РА
Вибір адреси 1-ї інструкції і занесення її до Регістра Адреси.
2
0001 0000 0000 0001
Пам. РА→РД
Вибір коду інструкції з РА і занесення його до Регістра Даних.
3
0001 0000 0000 0001
РД→РІ
Декодування інструкції у Регістрі Інструкцій
4
0000 0000 0001
РІ→РА
Вибір адреси 1-го (2-й операнд – у акумуляторі).
5
0000 0000 0000 0101
Пам. РА→РД
Вибір коду 1-го операнда з пам’яті і запис його до Регістру Даних .
6
0000 0000 0000 0101
РД+А→А
Виконання операції віднімання(додавання з перетворенням коду від’ємника з прямого на доповняльний).
7
0 0 0
А→РО
Встановлення прапорців регістру ознак.
8
0000 0000 0001
ЛАІ→ЛАІ
Підготовка адреси нової інструкції.
Висновок
При виконанні даної лабораторної роботи я засвоїв, як працюють програми у комп’’ютері. Ознайомився з форматом та командами в навчальному ЕОМ. Також я ознайомився з початковим режимом роботи симулятора DeComp, досліджувати хід виконання певних інструкцій. Зрозумів значення регістру ознак