Дослідження інструкцій переходів і зсувів. Організація циклів

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

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

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

Рік:
2011
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Організація та функціонування комп’ютерів

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт з лабораторної роботи № 3 з дисципліни: “Організація та функціонування комп’ютерів” на тему: “ Дослідження інструкцій переходів і зсувів. Організація циклів. ” Мета роботи: 1. Засвоїти використання основних інструкцій зсуву і переходів у системі команд навчального комп'ютера DeComp. 2. Навчитись організовувати цикли необхідної стуктури і використовувати їх у програмах. Теоретичні відомості: Інструкції, з якими ми будемо знайомитися у даній роботі складають дві групи: 1) інструкції керування виконанням програми: інструкція зупинки (HALT); інструкції умовних переходів (JNZ, JZ, JP, JM, JNC та JC); інструкція безумовного переходу (JMP); 2) інструкції зсувів (вліво (Left) та вправо (Right)): інструкції логічного зсуву (LSL та LSR); інструкції арифметичного зсуву (ASL та ASR); інструкції циклічного зсуву (ROL та ROR); інструкції циклічного зсуву через перенос C (RCL та RCR). Розглянемо інструкції переходів. Їх головне призначення – зміна звичайного порядку виконання інструкцій. У всіх інструкціях, за винятком інструкцій переходів, на останньому кроці адреса наступної інструкції визначається шляхом додавання 1 до ЛАІ. У інструкціях переходів 12 розрядів адресної частини містять нову адресу наступної інструкції. В результаті наступною після інструкції переходу буде не та інструкція, яка знаходиться у пам’яті зразу після інструкції переходу, а інструкція, яка може знаходитись у будь-якій іншій комірці пам’яті, на яку вкаже адреса у інструкції переходу. Інструкція безумовного переходу JMP ADR має машинний код 1110 aaaa aaaa aaaa. Відповідно, код операції дорівнює 1110, а решта розрядів – адресна частина. Інструкція безумовного переходу JMP просто записує до ЛАІ значення своєї адресної частини і програма буде змушена виконати інструкцію, що записана у комірці пам’яті за цією адресою. Призначення інструкцій умовного переходу (JNZ, JP тощо) дещо інше: у залежності від виконання чи не викогаггя умови, зазначеної у алгоритмі програми, перехід або буде здійснюватись, або не буде. Контроль виконання умови здійснює Регістр Ознак шляхом встановлення чи не встановлення відповідного тригера. Якщо умова виконується, тоді наступною буде виконуватися інструкція, яка розміщена у комірці пам’яті, номер якої вказаний у адресній частині коду інструкції. Якщо умова не виконується, тоді наступною буде виконуватися інструкція, яка знаходиться відразу в сусідній комірці пам’яті з коміркою інструкції переходу. У навчальному комп’ютері DeComp маємо такі інструкції умовних переходів (результат – число А знаходиться в акумуляторі): Двійковий код інструкції Мнемонічний запис інструкції Значення ознаки, яка перевіряється Значення результату, що розміщений в акумуляторі  1000; JNZ ADR Z = 0 A ( 0  1001 JZ ADR Z = 1 A = 0  1010 JP ADR S = 0 A > 0  1011 JM ADR S = 1 A <0  1100 JNC ADR C = 0 A ( 216 - 1  1101 JC ADR C = 1 A ( 216 - 1   Організація програмних циклів Для організації циклу засобами навчального комп’ютера DeComp в одній з комірок пам’яті необхідно розмістити лічильник циклів. Лічильник циклів це число, яке може мати значення N (якесь число) або 0 (const = N або const = 0). Відповідно, у циклі необхідно кожний раз лічильник зменшувати (або збільшувати) на 1 і за допомогою інструкції умовного переходу перевіряти, чи потрібно зробити цикл ще раз. Наприклад, у комірці пам’яті за адресою 1010 розміщений лічильник - const = K = 15, у комірці пам’яті за адресою 1110 – константа = 1 (const = 1), яка буде обслуговувати цей лічильник. Тоді програма обслуговування циклу: LOOP 1: . . . – мітка (адреса) попередньої частини програми; LOAD 10 - вибрати значення з комірки 10 і розмістити його у акумуляторі; SUB 11 - із значення, що є у акумуляторі, відняти 1; JNZ LOOP 1 – перехід на LOOP 1, якщо у результаті виконання попередньої операції ознака Z ≠ 0, тобто вміст акумулятора не дорівнює 0, інакше – перехід на наступну aдресу – LOOP 2. LOOP 2 . . . . Це є лічильник "на 0", тобто процедура LOOP 1 виконується K = 15 разів і кожний раз виконується перевірка числа таких виконань шляхом зменшення значення у лічильнику (комірка пам’яті – 10). Коли у лічильнику значення стане рівним 0, програма почне виконувати процедуру LOOP 2. Особливості виконання операцій зсуву - LSL, LSR - логічні зсуви (розряд, що виходить за межі аккумулятора, потрапляє у ознаку переносу С). - ASL, ASR - арифметичні зсуви (не змінюється знак. У ознаку переносу розряд потрапляє не зі старшого, тобто - знакового розряду, а з попереднього - старшого розряду числа). - ROL, ROR - циклічні зсуви ( розряди обертаються, не потрапляючи у ознаку переносу С). - RCL, RCR - циклічні зсуви через ознаку С (розряди обертаються через ознаку переносу С). Завдання і хід роботи: Вивчити теоретичні відомостями до лабораторної роботи № 3. Дослідити у потактовому режимі інструкції ROL, RCL, JP - для непарних номерів із списку групи, ROR, RCR, JC - для парних номерів із списку групи. Виписати результати та значення прапорців ознак. По списку я 3-тій, отже моє завдання - дослідити іструкції ROL, RCL, JP. Інструкції ROL - циклічні зсуви (розряди обертаються, не потрапляючи у ознаку переносу С). Для того, щоб іструкція ROL працювала, у комірку з адресою 0000 0000 00000, я заніс код інструкції, що має такий вигляд – 1111 100X XXXX XXXX (Х – довільні послідовності нулів і одиниц, які не впливають на виконання програми), а у Акумулятор - код 1101 1001 0100 0001, саме цей код буде зсуватися в процесі виконання програми. № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції з Лічильника Адреси Інструкції і занесення її до Регістра Адреси  2 РА( РД 1111 1000 0000 0000 значення числа комірки, 1-ої інструкції, (з даним адресом) занесено до Регістра Даних  3 РД(РІ 1111 1000 0000 0000 декодування інструкції у Регістрі Інструкцій  4 Зсуд даних акумулятора в ліву стророну 1011 0010 1000 0011 код, що росміщений в Акумуляторі, циклічно зміщено в ліву сторону  5 А( РО  O S O перевірка коду в регістрі ознак   Врезультаті виконання інструкцією операції циклічного зміщення вліво, я отримав такий код - 1011 0010 1000 0011 (попередній код 1101 1001 0100 0001) . Після провірки отриманого резульрату, в Регістрі Ознак встановиллися такі значення O S O, S – ознака того, що результат є < 0 (тобто - від’ємне число) і, як можна побачити, дана інструкція дійсно здійснюється без потрапляння у ознаку переносу С. Інструкції RСL - циклічні зсуви вліво через С. Для того, щоб іструкція RСL працювала, у комірку з адресою 0000 0000 00000, я заніс код інструкції , що має такий вигляд – 1111 110X XXXX XXXX (Х – довільні послідов- ності нулів і одиниц, які не впливають на виконання програми), а у Акумулятор – код 1101 0100 0001 0000, саме цей код буде зсуватися в процесі виконання програми. № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції з Лічильника Адреси Інструкції і занесення її до Регістра Адреси  2 РА( РД 1111 1100 0000 0000 значення числа комірки, 1-ої інструкції, (з даним адресом) занесено до Регістра Даних  3 РД(РІ 1111 1100 0000 0000 декодування інструкції у Регістрі Інструкцій  4 Зсуд даних акумулятора в ліву стророну 1010 1000 0010 0000 код, що росміщений в Акумуляторі, циклічно зміщено в ліву сторону  5 А( РО  O S С перевірка коду в регістрі ознак   Врезультаті виконання інструкцією операції циклічного зміщення вліво, я отримав такий код - 1010 1000 0010 0000 (попередній код 1101 0100 0001 0000) . Після провірки отриманого резульрату, в Регістрі Ознак встановиллися такі значення O S С, S – ознака того, що результат є < 0 (тобто - від’ємне число); С – ознака того, що при виконанні арифметичної операції виникло перенесення. Отже дана інструкція виконується з потрап- лянням в ознаку С. Інструкції умовних переходів JP – умовний перехід на ADR, якщо S = 0. Оскільки регіср S, з самого початку встановлений на S = 0, то можна беспосередньо перейти до занесення інструкції. Для цього, в комірку з адресою 0000 0000 0000, я вніс код інструкції 1010 0000 0000 0011, в трьох нижчих розрядах коду 0000 0000 0011, я вніс адресу комірки, в яку буде відбуватися умовний перенхід. Для більшої наочності, до цієї комірки можна занести будь-який код, наприклад код числа 15 (0000 0000 0000 1111). № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції з Лічильника Адреси Інструкції і занесення її до Регістра Адреси  2 Дані комірка, з визначеним РА( РД 1010 0000 0000 0011 значення числа комірки, 1-ої інструкції, (з даним адресом) занесено до Регістра Даних  3 РД( РІ 1010 0000 0000 0011 декодування інструкції у Регістрі Інструкцій  4 РІ( ЛАІ 0000 0000 0011 перенесення коду адреси з Регістра Інструкції, до Лічильника Адреси Інструкції  5 ЛАІ ( РА 0000 0000 0011 перенесення коду адреси з Лічильника Адреси Інструкції, до Регістра Адреси   Врезультаті виконання інструкції, коп’ютер перейшов з комірки з адресою 0000 0000 0000, до комірки з адресою 0000 0000 0011.Слід наголосити на тому, що перехід не відбудеться, якщо в Регістрі Ознак встановиться регістр S. Скласти програму, яка реалізуватиме оператор IF (умову перевірки вибрати самостійно). Закодувати її, ввести у симулятор та виконати її дослідження у покроковому режимі. Текст програми оформити згідно з прикладом у теоретичній частині даних методичних вказівок. Программа 1 - формулювання задачі: відняти від числа В (з акумулятора), число А (з будь-якої комірки). Якщо результат Z ≠ 0, то записати його в сьому комірку; а, якщо результат віднімання Z = 0, то відповідь беспосередньо записати в восьму комірку. блок-схема алгоритма: Початок А, В, 6 SUB В - A JNZ Z = 0 ні так STORЕ Z STORЕ Z HELT HELT - інформація про вхідні дані і їх попереднє розташування у комірках пам’яті: Для початку, до пам’яті навчальното комп’ютера слід занести число А = 1 (0000 0000 0000 0001) в комірку з адресою (0000 1001 0000), а в Акумулятор число В = 3 (0000 0000 0000 0011) або (0000 0000 0001). Саме ці числа – А і В, будуть брати участь в відніманні - призначення комірок, що використовуються: - комірка з адресою 0000 0000 0000, містить інструкцію віднімання. - комірка з адресою 0000 1001 0000, містить код числа А. - комірка з аресою 0000 0000 0001, містить інструкцію JNZ і реалізує операцію if. - комірка з аресою 0000 0000 0010, інструкція збереження STORЕ, при Z = 0. - комірка з адресою 0000 0000 0010, реалізує зупинку, при Z = 0. - комірка з адресою 0000 0000 1111, інструкція збереження STORЕ, при Z ≠ 0. - комірка з адресою 0000 0001 0000, інструкція зупинки, коли Z ≠ 0. - текст програми: Адреса комірки пам’яті у десятковому коді Код інструкції (двійковий) Мнемонічний формат інструкції Коментар до груп інструкцій, що відповідають блокам алгоритму програми  0000 0000 0000 0011 0000 0000 0011  SUB інструкцію віднімання від числа В (з акумулятора), число А (з адре- сою 0000 0000 0011).  0000 0000 0001 1000 0000 0000 1111  JNZ реалізує операцію if; якщо Z = 0, то програма іде далі по комірках , додаючм до попереднього коду цифру 1; якщо Z ≠ 0 то відбувається перехід до комірки з адресою 0000 0000 1111.  1)Якщо Z ≠ 0: 0000 0000 1111 0001 0000 0000 0111  STOR інструкція збереження  0000 0001 0000 0111 1100 0000 0000 HELT інструкція зупинки  2)Якщо Z = 0: 0000 0000 0010 0001 0000 0000 1000  STOR інструкція збереження  0000 0000 0011 0111 1100 0000 0000  HELT інструкція зупинки   Дослідження у покроковому режимі, дало такі результати: Коли Z ≠ 0 (В = 0000 0000 0000 0011, А = 0000 0000 0000 0001). РА РД А РІ ЛАІ РО  1-й крок 0000 1001 0000 0000 0000 0000 0001 0000 0000 0000 0010 0011 0000 1001 0000 0000 0000 0001 - - -  2-й крок 0000 0000 0001 1000 0000 0000 1111 0000 0000 0000 0010 1000 0000 0000 1111 0000 0000 1111 - - -  3-й крок 0000 0000 0111 0000 0000 0000 0010 0000 0000 0000 0010 0001 0000 0000 0111 0000 0001 0000 - - -  4-й крок 0000 0001 0000 0111 1100 0000 0000 0000 0000 0000 0010 0111 1100 0000 0000 0000 0001 0000 - - -   Коли Z = 0 (В = 0000 0000 0000 0001, А = 0000 0000 0000 0001). РА РД А РІ ЛАІ РО  1-й крок 0000 1001 0000 0000 0000 0000 0001 0000 0000 0000 0000 0011 0000 1001 0000 0000 0000 0001 Z - -  2-й крок 0000 0000 0001 1000 0000 0000 1111 0000 0000 0000 0000 1000 0000 0000 1111 0000 0000 0010 Z - -  3-й крок 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 1000 0000 0000 0011 Z - -  4-й крок 0000 0000 0011 0111 1100 0000 0000 0000 0000 0000 0000 0111 1100 0000 0000 0000 0000 0011 Z - -   Розробити алгоритм і cкласти програму в інструкціях симулятора DeComp, що для довільного числа "А" з комірки пам"яті за адресою "N" підраховує кількість"1" - для непарних номерів із списку групи, і підраховує кількість "0" - для парних номерів із списку групи. Програма виконується в автоматичному режимі. Программа 2 формулювання задачі: для довільного числа "А" з комірки пам’яті за адресою "N" підраховує кількість"1" - для непарних номерів із списку групи. блок-схема алгоритма: Початок Y = 0000 0000 0001 0001, Т = 0000 0000 0000 0001 Х = 0000 0000 0000 0000 , К = 0000 0000 0000 0001 А = 1000 0001 0001 0001 LOAD Y SUB T STORE Y JZ Z = 1 Так ні LOAD X ADD K LOAD А HELT STORЕ Х RCL А JMP STORЕ А JC C = 1 ні JMP - інформація про вхідні дані і їх попереднє розташування у комірках пам’яті: Для початку, до пам’яті навчальното комп’ютера слід занести числа Y = 0000 0000 0001 0001 та Т = 0000 0000 0000 0001, відніманням яких, програма буде регулювати кількіст операцій. Також до пам’яті слід занести числа Х = 0000 0000 0000 0000 , К = 0000 0000 0000 0001, призначені для підрахунку кількості одиниць в вибраному двійковому коді. Потрібно занести і число А, код якого буде оброблятися (підрахунок кількості одиниць). - призначення комірок, що використовуються: - комірка з адресою 0000 0000 0001, містить код операції LOAD (читання числа Y). - комірка з адресою 0000 0001 0010, містить код числа Y. - комірка з аресою 0000 0000 0010, містить код операції SUB (віднімання Y – Т). - комірка з аресою 0000 0001 0011, містить код числа Т. - комірка з адресою 0000 0000 0011, містить код операції STORЕ (збереження результату віднімання в числі Y). - комірка з адресою 0000 0000 0100, містить код операції JZ (реалізує операцію if, через ознаку Z ). - комірка з адресою 0000 1100 1000, містить код операції HELT (зупинка). - комірка з адресою 0000 0000 0101, містить код операції LOAD (читання числа А). - комірка з адресою 0000 0001 0000, містить код числа А. - комірка з адресою 0000 0000 0110, містить код операції RCL (зсув вліво числа А, через ознаку С). - комірка з адресою 0000 0000 0111, містить код операції STORЕ (збереження результату зсуву в числі А ). - комірка з адресою 0000 0000 1000, містить код операції JC (реалізує операцію if, через ознаку С). - комірка з адресою 0000 0000 1001, містить код операції JMP (безумовний перехід на адресу). - комірка з адресою 0000 0001 1110, містить код операції LOAD (читання числа Х). - комірка з адресою 0000 0001 0110, містить код числа Х. - комірка з адресою 0000 0001 1111, містить код операції ADD (додавання числа Х та К) - комірка з адресою 0000 0001 0111, містить код числа К. - комірка з адресою 0000 0010 0000, містить код операції STORЕ (збереження результату додавання в число Х). - комірка з адресою 0000 0010 0001, містить код операції JMP (безумовний перехід на адресу). - текст програми: Адреса комірки пам’яті у десятковому коді Код інструкції (двійковий) Мнемонічний формат інструкції Коментар до груп інструкцій, що відповідають блокам алгоритму програми  0000 0000 0001 0000 0000 0001 0010 LOAD Y Завдяки цій групі команд, відбувається регулювання кількості операцій перевірки розрядів числа А.  0000 0000 0010 0011 000 0001 0011 SUB T   0000 0000 0011 0000 0000 0000 0011 STORE Y   0000 0000 0100 1001 0000 1100 1000 JZ Реалізує операцію if, через ознаку Z і визначає, чи програма має зупинитися, чи далі провіряти розряди. Якщо Z = 1, то програма виконує перевірку далі, аколи Z = 0, то програма зупиняється.  1) Коли Z = 1. 0000 0000 0101 0000 0000 0001 0000 LOAD А Завдяки цій групі команд, відбувається зсув вліво числа А, через ознаку С. Саме ця операція, допомагає визначити значення розряду числа А.  0000 0000 0110 1111 1100 0000 0000 RCL А   0000 0000 0111 0001 0000 0001 0000 STORЕ А   0000 0000 1000 1101 0000 0001 1110 JC Реалізує операцію if, через ознаку С. Також визначає, чи є перенос С = 1 (значення розряду 1), чи переносу нема С = 0 (значення розряду 0) і відповідно розпо- діляє, чи програма переходить на іншу адресу, чи виконується далі  А) Якщо С = 1. 0000 0001 1110 0000 0000 0100 0110 LOAD X Завдяки цій групі команд, відбувається нарахування кількості одиниць в числі А, додаванням до Х, числа 1 (К).  0000 0001 1111 0010 0000 0100 0111 ADD K   0000 0010 0000 0001 0000 0100 0110 STORЕ Х   0000 0010 0001 1110 0000 0000 0000 JMP   Б) Якщо С = 0. 0000 0000 1001 1110 0000 0000 0000 JMP безумовний перехід на початок програми  Коли Z = 0. 0000 1100 1000 0111 1100 0000 0000 HELT зупинка програми   Висновок:Виконавши дану лабораторну роботу, я засвоїв використання основних інструкцій зсуву і переходів у системі команд навчального комп'ютера DeComp, навчився організовувати цикли необхідної стуктури і використовувати їх у програмах.
Антиботан аватар за замовчуванням

17.10.2013 11:10-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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