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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра CКС Звіт з лабораторної роботи № 3 з дисципліни: “Організація та функціонування комп’ютерів” на тему: “ Дослідження інструкцій переходів і зсувів. Організація циклів. ” 2010 Тема: Дослідження інструкцій переходів і зсувів. Організація циклів. Мета роботи: 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.1. Розглянемо інструкції переходів. Їх головне призначення – зміна звичайного порядку виконання інструкцій. У всіх інструкціях, за винятком інструкцій переходів, на останньому кроці адреса наступної інструкції визначається шляхом додавання 1 до ЛАІ. У інструкціях переходів 12 розрядів адресної частини містять нову адресу наступної інструкції. В результаті наступною після інструкції переходу буде не та інструкція, яка знаходиться у пам’яті зразу після інструкції переходу, а інструкція, яка може знаходитись у будь-якій іншій комірці пам’яті, на яку вкаже адреса у інструкції переходу. Інструкція безумовного переходу JMP ADR має машинний код 1110 aaaa aaaa aaaa. Відповідно, код операції дорівнює 1110, а решта розрядів – адресна частина. Мікропрограма виконання інструкції JMP має наступний вигляд: ЛАІ ( РА; РА ( РД; РД ( РІ, декодування; РІ ( ЛАІ – перехід на вказану адресу відбувається без будь-яких попередніх умов. Як видно, інструкція безумовного переходу JMP просто записує до ЛАІ значення своєї адресної частини і програма буде змушена виконати інструкцію, що записана у комірці пам’яті за цією адресою. Інструкція JMP фактично є реалізацією оператора GOTO у мовах програмування Pascal, Basic та ін. Призначення інструкцій умовного переходу (JNZ, JP тощо) дещо інше: у залежності від виконання чи не викогаггя умови, зазначеної у алгоритмі програми, перехід або буде здійснюватись, або не буде. Контроль виконання умови здійснює Регістр Ознак шляхом встановлення чи не встановлення відповідного тригера. (див. методичні матеріали до лабораторної роботи № 2). Якщо умова виконується, тоді наступною буде виконуватися інструкція, яка розміщена у комірці пам’яті, номер якої вказаний у адресній частині коду інструкції. Якщо умова не виконується, тоді наступною буде виконуватися інструкція, яка знаходиться відразу в сусідній комірці пам’яті з коміркою інструкції переходу. Фактично інструкції умовного переходу дозволяють реалізувати оператори розгалуження IF та циклів FOR або WHILE. Наприклад, фрагменту програми на мові Pascal if (a < b) then c:= a; else c:= b; при реалізації його у навчальному комп’ютері DeComp (причому, змінна a знаходиться у 10-й комірці, змінна b – у 11-й, а змінна c – у 12-й) відповідатиме такий фрагмент програми у машинних кодах: № комірки пам’яті Двійковий код інструкції Мнемонічний запис інструкції Коментар  0000 0000 0000 0000 0000 0000 1010 LOAD 10; завантажити до акумулятора змінну a  0000 0000 0001 0011 0000 0000 1011 SUB 11; відняти від змінної a змінну b  0000 0000 0010 1100 0000 0000 0110 JNC 06; якщо C = 0 (a>b), перейти до c:=b  0000 0000 0011 0000 0000 0000 1010 LOAD 10; завантажити до акумулятора змінну a  0000 0000 0100 0001 0000 0000 1100 STORE 12; записати змінну a на місце змінної c  0000 0000 0101 0111 1100 0000 0000 HALT; зупинити програму  0000 0000 0110 0000 0000 0000 1011 LOAD 11; завантажити до акумулятора змінну b  0000 0000 0111 0001 0000 0000 1100 STORE 12; записати змінну b на місце змінної c  0000 0000 1000 0111 1100 0000 0000 HALT; зупинити програму   Як видно з програми, оператор IF (a < b) реалізується за допомогою інструкцій віднімання SUB та умовного переходу за умови відсутності переносу C - JNC: якщо при відніманні від змінної a (розміщеної у акумуляторі) змінної b (розміщеної у 11-й комірці) не виникає переносу, це означає, що a > b, а значить, необхідно “перескочити” фрагмент, де виконується c:= a (блок інструкцій LOAD, STORE та HALT у 3-й, 4-й та 5-й комірках), і почати виконувати фрагмент c:= b (блок інструкцій LOAD, STORE та HALT у 6-й, 7-й та 8-й комірках). Отже, у навчальному комп’ютері 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   При дослідженні інструкцій переходів у потактовому режимі видно, що їх хід відрізняється від розглянутого у прикладі, наведеному у лабораторній робті № 2. Для прикладу, мікропрограма інструкції JM матиме вигляд: № Мнемонічний запис мікрооперації Коментар  1 ЛАІ ( РА; вибір адреси 1-ої інструкції і занесення її до регістру РА  2 РА ( РД; вибір коду інструкції з РА і занесення його до регістру РД  3 РД ( РІ; декодування іперевірка регістру ознак РО  4 РІ ( ЛАІ якщо S = 1, інакше 5)  5 ЛАІ + 1 ( ЛАІ якщо S = 0   1.2. Організація програмних циклів Для організації циклу засобами навчального комп’ютера 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. 1.3. Особливості виконання операцій зсуву - LSL, LSR - логічні зсуви (розряд, що виходить за межі аккумулятора, потрапляє у ознаку переносу С). - ASL, ASR - арифметичні зсуви (не змінюється знак. У ознаку переносу розряд потрапляє не зі старшого, тобто - знакового розряду, а з попереднього - старшого розряду числа). - ROL, ROR - циклічні зсуви ( розряди обертаються, не потрапляючи у ознаку переносу С). - RCL, RCR - циклічні зсуви через ознаку С (розряди обертаються через ознаку переносу С). Порядок виконання роботи: Вивчити теоретичні відомостями до лабораторної роботи № 3. Дослідити у потактовому режимі інструкції ROL, RCL. JP - для непарних номерів із списку групи, ROR, RCR, JC - для парних номерів із списку групи. Виписати результати та значення прапорців ознак. інструкція ROL – циклічний зсув вліво ( розряди обертаються, не потрапляючи у ознаку переносу С). Код інструкції 1111 100x xxxx xxxx, де х – Довільна послідовність 0 чи 1 (на виконання інструкції значення бітів не впливають). Для початку виконання інструкції потрібно занести до акумулятора число (у нашому випадку число 1),надати нульового значення ЛАІ,а в 0-ву комірку занести код інструкції. № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції і занесення її до Регістра Адреси  2 РА ( РД 1111 1000 0000 0000 вибір коду інструкції з РА і занесення його до Регістра Даних  3 РД ( РІ 1111 1000 0000 0000 декодування інструкції у Регістрі Інструкцій  4 А >> ( А 0000 0000 0000 0010 Зсув числа вліво на один розряд  5 А ( РО 0000 0000 0000 0010 встановлення прапорців регістру ознак  6 ЛАІ+1 ( ЛАІ 0000 0000 0001 підготувати адресу наступної інструкції   інструкція RCL – циклічний зсув вліво ( розряди обертаються, потрапляючи у ознаку переносу С). Код інструкції 1111 110x xxxx xxxxде х – Довільна послідовність 0 чи 1 (на виконання інструкції значення бітів не впливають). Для початку виконання інструкції потрібно занести до акумулятора число (у нашому випадку число 1),надати нульового значення ЛАІ,а в 0-ву комірку занести код інструкції. № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції і занесення її до Регістра Адреси  2 РА ( РД 1111 1100 0000 0000 вибір коду інструкції з РА і занесення його до Регістра Даних  3 РД ( РІ 1111 1100 0000 0000 декодування інструкції у Регістрі Інструкцій  4 А >> ( А 0000 0000 0000 0010 Зсув числа вліво на один розряд  5 А ( РО 0000 0000 0000 0010 встановлення прапорців регістру ознак  6 ЛАІ+1 ( ЛАІ 0000 0000 0001 підготувати адресу наступної інструкції   інструкція JP – умовний перехід на певну комірку, якщо число у акумуляторі додатнє (S=0). Код інструкції 1010 аааа аааа аааа, де а – адрес комірки,на яку буде злійснюватись перехід. Для початку виконання інструкції потрібно занести до акумулятора число (у нашому випадку число 1),надати нульового значення ЛАІ, а в 0-ву комірку занести код інструкції. № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції і занесення її до Регістра Адреси  2 РА ( РД 1010 0000 0000 0101 вибір коду інструкції з РА і занесення його до Регістра Даних  3 РД ( РІ 1010 0000 0000 0101 декодування інструкції у Регістрі Інструкцій  4 РІ ( ЛАІ 0000 0000 0101  умовний перехід на 5-ту комірку, якщо S=0, інакше  5 ЛАІ+1 ( ЛАІ 0000 0000 0000 0010 якщо S = 1   Скласти програму, яка реалізуватиме оператор IF (умову перевірки вибрати самостійно). Закодувати її, ввести у симулятор та виконати її дослідження у покроковому режимі, Текст програми оформити згідно з прикладом у теоретичній частині даних методичних вказівок. Умова програми: a > b № комірки пам’яті Двійковий код інструкції Мнемонічний запис інструкції Коментар  0000 0000 0000 0000 0000 0000 1010 LOAD 10; завантажити до акумулятора змінну a  0000 0000 0001 0011 0000 0000 1011 SUB 11; відняти від змінної a змінну b  0000 0000 0010 1011 0000 0000 0110 JM 06; якщо S=1 (a>b), перейти до c:=b  0000 0000 0011 0000 0000 0000 1010 LOAD 10; завантажити до акумулятора змінну a  0000 0000 0100 0001 0000 0000 1100 STORE 12; записати змінну a на місце змінної c  0000 0000 0101 0111 1100 0000 0000 HALT; зупинити програму  0000 0000 0110 0000 0000 0000 1011 LOAD 11; завантажити до акумулятора змінну b  0000 0000 0111 0001 0000 0000 1100 STORE 12; записати змінну b на місце змінної c  0000 0000 1000 0111 1100 0000 0000 HALT; зупинити програму   Як видно з програми, оператор IF (a > b) реалізується за допомогою інструкцій віднімання SUB та умовного переходу за умови перевірки ознаки S - JM : якщо при відніманні від змінної a (розміщеної у акумуляторі) змінної b (розміщеної у 11-й комірці) результат не є від’ємний , це означає, що a > b, а значить, необхідно “перескочити” фрагмент, де виконується c:= a (блок інструкцій LOAD, STORE та HALT у 3-й, 4-й та 5-й комірках), і почати виконувати фрагмент c:= b (блок інструкцій LOAD, STORE та HALT у 6-й, 7-й та 8-й комірках). Результат виконання програми міститься у 12-ій комірці. До 10-ї комірки занесемо число 5, а до 11-ї комірки – число 10. № кроку РА РД А РІ ЛАІ РО  1-й крок 0000 0000 1010 0000 0000 0000 1010 0000 0000 0000 1010 0000 0000 0000 1010 0000 0000 0001   2-й крок  0000 0000 1011 0000 0000 0000 1010 1111 1111 1111 1011 0011 0000 0000 1011 0000 0000 0010 S; C  3-й крок  0000 0000 0010 1011 0000 0000 0110 1111 1111 1111 1011 1011 0000 0000 0110 0000 0000 0110 S; C  4-й крок 0000 0000 1011 0000 0000 0000 1010 0000 0000 0000 1010 0000 0000 0000 1011 0000 0000 0111 S; C  5-й крок 0000 0000 1100 0000 0000 0000 1010 0000 0000 0000 1010 0001 0000 0000 1100 0000 0000 1000 S; C  6-й крок 0000 0000 1000 0111 1100 0000 0000 0000 0000 0000 1010 0111 1100 0000 0000 0000 0000 1000 S; C   Розробити алгоритм і cкласти програму в інструкціях симулятора DeComp, що для довільного числа "А" з комірки пам"яті за адресою "N" підраховує кількість"1" - для непарних номерів із списку групи, і підраховує кількість "0" - для парних номерів із списку групи. Програма виконується в автоматичному режимі. так ні так ні № комірки пам’яті Двійковий код інструкції Мнемонічний запис інструкції Коментар  0000 0000 0000 0000 0000 0000 1110 LOAD 14; завантажити до акумулятора змінну a  0000 0000 0001 1111 1100 0000 0000 RCL Зсуваємо число на один розряд вліво  0000 0000 0010 1100 0000 0000 0110 JNC 06; Умовний перехід на 6 комірку, якщо С=0.Інакше виконується наступний оператор  0000 0000 0011 0000 0000 0000 1011 LOAD 11; Завантаження нашого лічильника до акумулятора  0000 0000 0100 0010 0000 0000 1100 ADD 12; Додоаємо до нашого Лічильника 1  0000 0000 0101 0001 0000 0000 1011 STORE 11; Запис нового значення лічильника  0000 0000 0110 0000 0000 0000 1101 LOAD 13; Завантаження лічильника циклу До акумулятора  0000 0000 0111 0011 0000 0000 1100 SUB 12; Віднімаємо від нашого Значення 1  0000 0000 1000 0001 0000 0000 1101 STORE 13; Запис нового значення лічильника  0000 0000 1001 1000 0000 0000 0001 JNZ 1 Перевіряємо умову виконання циклу  0000 0000 1010 0111 1100 0000 0000 HALT Припиняємо програму  Для початку виконання програми потрібно занести відповідні інстукції у комірки пам’яті , починаючи з 0-ої. В 11-тій комірці буде міститись результат виконання програми, у 12-ту комірку потрібно занести число 1, у 13-ку – число 16 (лічильник циклу). У 14-ту комірку потрібно занести число N. Оформити та захистити звіт з лабораторної роботи. Висновок: на лабораторній роботі я дослідив інструкції переходів та зсувів, навчився організовувати цикли та склав власну програму, у якій використовувались попередньо здобуті знання.
Антиботан аватар за замовчуванням

23.03.2013 18:03-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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