Набір інструкцій навчального комп’ютера. Загальний порядок виконання інструкцій

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
КН
Кафедра:
Кафедра КСА

Інформація про роботу

Рік:
2019
Тип роботи:
Лабораторна робота
Предмет:
ООФК

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра СКС / Звіт з лабораторної роботи №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.1 Інструкції звертання до пам’яті LOAD ADR – завантажити (від ригг. Load – завантажувати). Машинний код цієї риггерто – 0000 aaaa aaaa aaaa; виконання – (ADDR) → Акумулятор. Ця інструкція здійснює читання 16-розрядного числа з комірки пам’яті, на яку вказує поле адреси ADR, і розміщує його у акумуляторі. Перші найстарші 4 розряди (старша риггер) містять код операції “завантаження” з пам’яті – 0000, а наступні 12 розрядів – адресу комірки, з якої відбуватиметься читання. 2) STORE ADR – зберегти (від ригг. Store – зберігати) Машинний код – 0001 aaaa aaaa aaaa; виконання – Акумулятор ( (ADDR)). Ця інструкція здійснює протилежну до інструкції LOAD дію, тобто 16-розрядне значення вмісту акумулятора записує у комірку пам’яті, на яку вказує поле адреси ADR. Код операції інструкції “збереження” до пам’яті – 0001, а наступні 12 розрядів – адреса комірки пам’яті. 1.2. Інструкції арифметичних операцій ADD ADR – арифметичне додавання (від ригг. Addition –додавання) Машинний код – 0010 aaaa aaaa aaaa; виконання – Акумулятор + (ADDR) ( Акумулятор. Ця інструкція виконує додавання вмісту акумулятора і числа з комірки пам’яті, на яку вказує адреса ADR, та записує результат назад до акумулятора. Перші 4 розряди машинного коду містять код операції додавання – 0010, а решта 12 розрядів – адресу у пам’яті 2-го операнда, що буде додаватись. Знову звернемо увагу на центральну позицію риггертора, який постачає одне з двох чисел для додавання та зберігає результат. Можна не переживати, що результат знищить одне з 2-х чисел, яке перед виконанням дії додавання було записано з пам’яті до риггертора, бо воно залишилося у пам’яті за своєю адресою. Проте, якщо операнд був записаний в аккумулятор як результат виконання попередньої інструкції і не був збережений у пам’яті, то тоді він пропаде – буде “затертий” новим значенням риггертора. 2) SUB ADR – віднімання (від англ. Subtraction – віднімання). Машинний код – 0011 aaaa aaaa aaaa; виконання: Акумулятор – (ADDR) → Акумулятор. Ця інструкція виконує віднімання від вмісту акумулятора значення вмісту комірки пам’яті з адресою, що вказана у полі ADR, і записує результат назад до риггертора. Код операції віднімання – 0011, а решту 12 розрядів займає адреса комірки, вміст якої буде відніматися. Інші властивості цієї інструкції співпадають із властивостями інструкції додавання ADD. 1.3. Призначення Регістру Ознак Відповідно до обмежень, які закладені у архітектурі любого комп’ютера, у тому числі і нашого навчального – симулятора DeComp, результат виконання арифметичних і більшості інших інструкцій необхідно аналізувати для визначення його певних особливостей. Що саме: - потрібно відрізняти додатні і від’ємні числа; - потрібно визначати стан, коли результат виконання інструкції дорівнює нулю; - потрібно визначати переповнення розрядної сітки риггертора. Для фіксації цих станів існує регістр ознак у процесорі, який має три тригери: Z, S i C. На панелі навчального комп’ютера він розміщений біля риггертора. Прапорець Z (Zero – нуль) встановлюється у 1 (світиться), якщо результат операції дорівнює 0. Зрозуміло, що для команди ADD ця ознака встановиться лише у випадку, якщо до 0 додати 0, або якщо додаються два однакових числа з протилежними знаками. Прапорець S (Sign – знак) встановлюється в 1, якщо результат операції – від’ємне число. Знову ж таки, інструкція ADD не може дати від’ємного результату за винятком чисел у доповняльному коді, яких ми поки-що не розглядаємо. Зрозуміло, якщо віднімати від меншого числа більше інструкцією SUB, отримаємо ознаку від’ємного результату S. Прапорець C (Carry – перенос) встановлюється в 1, коли у результаті арифметичної операції (додавання чи віднімання) виникає перенос із старшого розряду результату або при виконанні операції зсуву вправо чи вліво крайній розряд числа вийшов за межі розрядної сітки. Так, наприклад, перенос виникне і, відповідно, встановиться риггер C, якщо додати два 16-ти розрядних числа у 16-ти розрядному процесорі. Порядок виконання роботи 2. Описати призначення прапорців Регістру Ознак. Прапорці Регістру Ознак необхідні для того, щоб проаналізувати виконання арифметичних дії и деяких інструкції на наявність певних особливостей. Прапорець Z (у перекладі з англійської Zero - нуль) активується (отримує значення 1) тоді, коли результат операції дорівнює 0. Прапорець S (у перекладі з англійської Sign – знак) активується (отримує значення 1) тоді, коли результатом операції стало від’ємне число. Прапорець C (у перекладі з англійської Carry – перенос) активується (отримує значення 1) тоді, коли у результаті арифметичної операції розряд числа виходить за межі розрядної сітки. 3.Ввести у симулятор та виконати дослідження у по тактовому режимі програми додавання двох чисел, яка була підготовлена у роботі №1. Записати результати – мікропрограму виконання з необхідними поясненнями. Програма, яку ми робили у лабораторній роботі №1, була призначена для додавання двох чисел (у моєму варіанті числа 18 і 28). Дослідження програми у потактовому режимі № п/п Код, що обробляється Мнемонічний запис Коментар до кожної інструкції  1 0000 0000 0000 ЛАІ→РА Вибір адреси першої інструкції та її запис до Регістру Адреси  2 0000 0000 0000 1010 РА→РД Зчитування та занесення вмісту комірки (інструкції) до Регістру Даних  3 0000 0000 0000 1010 РД→РІ Декодування інструкції до Регістру Інструкцій  4 0000 0000 1010 РІ→РА Початок виконання інструкції. Регістр Інструкцій вказує до якої комірки треба звернутись  5 0000 0000 0001 0010 РА→РД Зчитування та занесення вмісту комірки (число) до Регістру Даних  6 0000 0000 0001 0010 РД→А Зчитування та занесення числа до Акумулятор  7 0000 0000 0001 ЛАІ→ЛАІ+1 Вибір адреси наступної (другої) інструкції  8 0000 0000 0001 ЛАІ→РА Запис адреси другої інструкції до Регістру Адреси  9 0010 0000 0000 1011 РА→РД Вибір коду інструкції ADD 11 і його запис до Регістру Даних  10 0010 0000 0000 1011 РД→РІ Декодування інструкції у Регістру Інструкцій  11 0000 0000 1011 РІ→РА Вибір адреси другого числа  12 0000 0000 0001 1100 РА→РД Запис двійкового значення числа до Регістру Даних  13 0000 0000 0010 1110 А+РД→А Виконання арифметичної дії та запис результату до Акумулятор  14 000 А→РО Встановлення прапорців Регістру Ознак  15 0000 0000 0010 ЛАІ→ЛАІ+1 Вибір наступної (третьої) інструкції  16 0000 0000 0010 ЛАІ→РА Запис адреси третьої інструкції до Регістру Адреси  17 0001 0000 0000 1100 РА→РД Вибір коду інструкції STORE 12 і його запис до Регістру Даних  18 0001 0000 0000 1100 РД→РІ Декодування інструкції до РІ  19 0000 0000 1100 РІ→РА Вибір адреси комірки, до якої буде записано результат арифметичної дії  20 0000 0000 001 1110 А→РД Запис результату додавання з Акумулятора до Регістру Даних  21 0000 0000 1100 РД→РА Зчитування результату додавання та його запис до конкретної комірки  22 0000 0000 0011 ЛАІ→ЛАІ+1 Вибір наступної (четвертої) інструкції  23 0000 0000 0011 ЛАІ→РА Запис адреси четвертої інструкції до Регістру Адреси  24 0111 1100 0000 0000 РА→РД Зчитування вмісту комірки (інструкція) і його запис до Регістру Даних  25 0111 1100 0000 0000 РД→РІ Декодування інструкції до Регістру Інструкцій   4. Ввести у симулятор та виконати дослідження у покроковому режимі програми, яка відніматиме два числа A і B для значень, коли A=B, A>B, A<B, вибравши довільні відповідні значення. Виписати результати виконання дослідження і значення прапорців ознак у таблицю, взірець якої поданий у роботі №1. Поясніть отримані результати. Для того щоб виконати це завдання, необхідно скласти програму, яка призначена для віднімання двох чисел. Сама програма має наступний вигляд: Машинний код Мнемонічний запис Коментар  0000 0000 0000 0110 LOAD 6 Зчитування першого числа з пам’яті до акумулятора  0011 0000 0000 0111 SUB 7 Віднімання числа що знаходиться в 6 комірці пам’яті від числа, яке записано у акумуляторі. Результат записується в акумулятор  0001 0000 0000 1000 STORE 8 Запис числа із акумулятора до 7-ї комірки памяті  0111 1100 0000 0000 HALT Зупинити роботу процесора   А) А=В Вношу до комірок числа,які я обрав. Вводимо у комірки 6(0000 0000 0000 0110) та 7(0000 0000 0000 0111) число 17(0000 0000 0001 0001 ). Після цього вписуємо у ЛАІ комірку пам’яті в якій записана перша інструкція і натискаємо на кнопку «ПУСК». РА РД А РІ ЛАІ РО  1-й крок 0000 0000 0110 0000 0000 0001 0001 0000 0000 0001 0001 0000 0000 0000 0110 0000 0000 0001 000  2-й крок 0000 0000 0111 0000 0000 0001 0001 0000 0000 0000 0000 0011 0000 0000 0111 0000 0000 0010 100  3-й крок 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 1000 0000 0000 0011 100  4–й крок 0000 0000 0011 0111 1100 0000 0000 0000 0000 0000 0000 0111 1100 0000 0000 0000 0000 0011 100  Оскільки результатом віднімання є число 0, то активувався прапорець Z (Zero). Через це в РО можна побачити наступне значення: 100. В) А>B Вношу до комірок 6 та 7 числа 17 та 7 відповідно. Після цього вписуємо у ЛАІ комірку пам’яті в якій записана перша інструкція і натискаємо на кнопку «ПУСК». РА РД А РІ ЛАІ РО  1-й крок 0000 0000 0110 0000 0000 0001 0001 0000 0000 0001 0001 0000 0000 0000 0110 0000 0000 0001 000  2-й крок 0000 0000 0111 0000 0000 0000 0111 0000 0000 0000 1011 0011 0000 0000 0111 0000 0000 0010 000  3-й крок 0000 0000 1000 0000 0000 0000 1010 0000 0000 0000 1011 0001 0000 0000 1000 0000 0000 0011 000  4–й крок 0000 0000 0011 0111 1100 0000 0000 0000 0000 0000 1011 0111 1100 0000 0000 0000 0000 0011 000   Оскільки результатом віднімання є додатне число, то жоден прапорець не активувався. Через це в РО можна побачити наступне значення: 000. С) A<B Зараз мені потрібно відняти від меншого числа більше. Для цього використовую числа 7 і 17. Вношу до комірок числа, з якими буду працювати. Вводимо у комірки 6 та 7 числа 7 та 17 відповідно. Після цього вписуємо у ЛАІ комірку пам’яті в якій записана перша інструкція і натискаємо на кнопку «ПУСК». РА РД А РІ ЛАІ РО  1-й крок 0000 0000 0110 0000 0000 0000 0111 0000 0000 0000 0111 0000 0000 0000 0110 0000 0000 0001 000  2-й крок 0000 0000 0111 0000 0000 0001 0001 1111 1111 1111 0111 0011 0000 0000 0111 0000 0000 0010 011  3-й крок 0000 0000 1000 1111 1111 1111 0111 1111 1111 1111 0111 0001 0000 0000 1000 0000 0000 0011 011  4–й крок 0000 0000 0011 0111 1100 0000 0000 1111 1111 1111 0111 0111 1100 0000 0000 0000 0000 0011 011  Оскільки результатом арифметичної операції є від’ємне число, то активувалось два прапорці: S та C. Через це в РО ми бачимо 011. 5. Ввести у симулятор та виконати дослідження у потактовому режимі 3-х окремих інструкції – LOAD, STORE i SUB. Пояснити необхідну підготовку числових даних, виписати порядок виконання інструкцій у вигляді мікропрограм із вказанням реальних значень регістрів і поясненням дій, що виконуються у кожному такті. LOAD (0000 aaaa aaaa aaaa, де aaaa aaaa aaaa – адреса комірки, з якої дані будуть перенесені до акумулятор). Зробимо так, щоб мікропрограма зчитувала вміст 7-ї комірки(0000 0000 0000 0111). Для цього треба попередньо занести до комірки число. Я обрав число 17(0000 0000 0001 0001). Після того як ми занесли число, до 0-ї комірки, треба вписати інструкцію зчитування. Ось її вигляд: 0000 0000 0000 0111. Після цього, можна переходити до виконання. Для цього вносимо до ЛАІ адресу першої інструкції (0000 0000 0000), встановлюємо потактовий режим і натискаємо клавішу «ПУСК». Отримуємо наступну мікропрограму: № п/п Код, що обробляється Мнемонічний запис Коментар до кожної інструкції  1 0000 0000 0000 ЛАІ→РА Зчитування адреси інструкції  2 0000 0000 0000 0111 РА→РД Зчитування вмісту комірки (інструкція) і занесення його до РД  3 0000 0000 0000 0111 РД→РІ Декодування вмісту комірки і занесення його у РІ  4 0000 0000 0111 РІ→РА Вибір адреси комірки, у якій знаходиться число  5 0000 0000 0001 0001 РА→РД Зчитування і занесення вмісту комірки (число) до РД  6 0000 0000 0001 0001 РД→А Занесення числа до акумулятору  7 0000 0000 0001 ЛАІ→ЛАІ+1 Завершення виконання інструкції   Після виконання інструкції в акумуляторі побачимо таке значення: 0000 0000 0001 0001 (число 17). Число є вмістом 7-ї комірки, з якої і відбувалось зчитування. Отже мікропрограма працює правильно. STORE (0001 aaaa aaaa aaaa, де aaaa aaaa aaaa– адреса комірки, до якої буде записано число з акумулятора). Зробимо так, щоб мікропрограма записувала вміст акумулятора до 7-ї комірки. Але оскільки вміст акумулятор і комірки співпадає (значення 0000 0000 0000 0000), то ми не зможемо дізнатись чи працює мікропрограма. Тому ми вводимо до комірки будь-яке число. Хай це буде 1024 (0000 0100 0000 0000). Таким чином, тепер у 7-ї комірці є двійкове значення числа 1024. Після виконання мікропрограми, до 7-ї комірки буде записано значення, що знаходиться в акумуляторі, тобто число 0 (0000 0000 0000 0000). Отже, якщо мікропрограма працює коректно, то після її виконання вміст 7-ї комірки буде дорівнювати 0 (0000 0000 0000 0000). Заносимо інструкцію до комірки з номером 0. Інструкція має наступний вигляд: 0001 0000 0000 0011. Коли інструкція була занесена, можна переходити до виконання. Для цього вносимо до ЛАІ адресу першої інструкції (0000 0000 0000), встановлюємо потактовий режим і натискаємо клавішу «ПУСК». Отримуємо наступну мікропрограму: № п/п Код, що обробляється Мнемонічний запис Коментар до кожної інструкції  1 0000 0000 0000 ЛАІ→РА Зчитування адреси інструкції  2 0001 0000 0000 0011 РА→РД Зчитування вмісту комірки (інструкція) і занесення його до РД  3 0001 0000 0000 0011 РД→РІ Декодування вмісту комірки і занесення його у РІ  4 0000 0000 0011 РІ→РА Вибір адреси комірки, у яку буде записане число  5 0000 0000 0000 РА→А Зчитування числа з акумулятора  6 0000 0000 0000 А→РД Запис числа з акумулятор до РД  7 0000 0000 0001 ЛАІ→ЛАІ+1 Завершення виконання інструкції  Після виконання інструкції в 7-ї комірці бачимо значення: 0000 0000 0000 0000 (число 0). Число 0 є вмістом акумулятора. Отже вміст акумулятор був записаний до 7-ї комірки. Це означає, що мікропрограма працює коректно. SUB (0011 aaaa aaaa aaaa, де aaaa aaaa aaaa – адреса комірки, у якій знаходиться від’ємник) Зробимо так, щоб мікропрограма віднімала число, вказане у 7-ї комірці, від вмісту акумулятора. Але спочатку необхідно внести якесь число до акумулятора. Робимо це за допомогою мікропрограми STORE яку ми розглядали вище. Запишемо до акумулятор число. Хай це буде 17. Тепер ми можемо виконати віднімання. Спочатку задаємо від’ємник у комірку під номером 7. Хай це буде число 11 (0000 0000 0000 1011). У результаті віднімання (17 – 11) ми повинні отримати число 6 (0000 0000 0000 0110). Якщо після виконання інструкції ми отримаємо це число, то в такому випадку мікропрограма працює коректно. Заносимо інструкцію до комірки з номером 0. Інструкція має наступний вигляд: 0011 0000 0000 0111. Якщо інструкція була занесена, можна переходити до виконання. Для цього вносимо до ЛАІ адресу першої інструкції (0000 0000 0000), встановлюємо потактовий режим і натискаємо клавішу «ПУСК». № п/п Код, що обробляється Мнемонічний запис Коментар до кожної інструкції  1 0000 0000 0001 ЛАІ→РА Зчитування адреси інструкції  2 0011 0000 0000 0111 РА→РД Занесення вмісту комірки (інструкція) до РД  3 0011 0000 0000 0111 РД→РІ Декодування інструкції до РІ  4 0000 0000 0000 0111 РІ→РА Зчитування адреси від’ємника  5 0000 0000 0000 1011 РА→РД Зчитування значення від’ємника та його запис до РД  6 0000 0000 0000 0110 РД+А→А Виконання арифметичної дії та запис результату до акумулятор  7 000 А→РО Встановлення відповідних прапорців до РО  8 0000 0000 0000 0001 ЛАІ→ЛАІ+1 Завершення виконання інструкції   У результаті віднімання ми отримали число 6 (0000 0000 0000 0110), яке зберігається в акумуляторі. Отже мікропрограма працює коректно. Висновок На цій лабораторній роботі я засвоїв порядок виконання програм у комп’ютері. Ознайомився з форматом та набором інструкцій симулятора навчальної ЕОМ, ознайомився з потактовим режимом роботи навчального комп’ютера і навчився досліджувати хід виконання окремих інструкцій.
Антиботан аватар за замовчуванням

12.11.2019 21:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!