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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра ЕОМ Звіт з лабораторної роботи № 3 з дисципліни: “Організація та функціонування комп’ютерів” на тему: “ Інструкцій переходів і зсувів. Організація циклів.” Тема: Дослідження інструкцій переходів і зсувів. Організація циклів. Мета роботи: 1. Засвоїти використання основних інструкцій зсуву і переходів у системі команд навчального комп'ютера DeComp. 2. Навчитись організовувати цикли необхідної стуктури і використовувати їх у програмах. 1. Теоретичні відомості Інструкції, з якими ми будемо знайомитися у даній роботі складають дві групи: 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 має наступний вигляд: ЛАІ ( РА; РА ( РД; РД ( РІ, декодування; РІ ( ЛАІ – перехід на вказану адресу відбувається без будь-яких попередніх умов. Як видно, інструкція безумовного переходу JMP просто записує до ЛАІ значення своєї адресної частини і програма буде змушена виконати інструкцію, що записана у комірці пам’яті за цією адресою. Інструкція JMP фактично є реалізацією оператора GOTO у мовах програмування Pascal, Basic та ін. Призначення інструкцій умовного переходу (JNZ, JP тощо) дещо інше: у залежності від виконання чи не викогаггя умови, зазначеної у алгоритмі програми, перехід або буде здійснюватись, або не буде. Контроль виконання умови здійснює Регістр Ознак шляхом встановлення чи не встановлення відповідного тригера. Якщо умова виконується, тоді наступною буде виконуватися інструкція, яка розміщена у комірці пам’яті, номер якої вказаний у адресній частині коду інструкції. Якщо умова не виконується, тоді наступною буде виконуватися інструкція, яка знаходиться відразу в сусідній комірці пам’яті з коміркою інструкції переходу. Фактично інструкції умовного переходу дозволяють реалізувати оператори розгалуження IF та циклів FOR або WHILE. Наприклад, фрагменту програми на мові Pascal if (a < b) then c:= a; else c:= b; Організація програмних циклів Для організації циклу засобами навчального комп’ютера 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 - циклічні зсуви через ознаку С (розряди обертаються через ознаку переносу С). 2. Порядок виконання роботи: Дослідити у потактовому режимі інструкції ROL, RCL, JP. Виписати результати та значення прапорців ознак. Інструкція ROL: № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції і занесення її до Регістра Адреси  2 РА ( РД 1111 1010 0000 0000 вибір коду інструкції з РА і занесення його до Регістра Даних  3 РД ( РІ 1111 1010 0000 0000 декодування інструкції у Регістрі Інструкцій  4 A ( А 1110 0000 0000 0001 Циклічний зсув вмістимого акумулятора  5 ZSC(А) ( РО S встановлення прапорців регістру ознак  В даному випадку у Регістрі Ознак 1 набуло значення S. Це і є наслідком виконання інструкція циклічного зсуву ROL. Інструкція RCL: № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0000 вибір адреси 1-ої інструкції і занесення її до Регістра Адреси  2 РА ( РД 1111 1110 0000 0000 вибір коду інструкції з РА і занесення його до Регістра Даних  3 РД ( РІ 1111 1110 0000 0000 декодування інструкції у Регістрі Інструкцій  4 A ( А 0000 0000 0000 0111 Зсув через регістр С вмістимого акумулятора  5 ZSC(А) ( РО C встановлення прапорців регістру ознак  В даному випадку у Регістрі Ознак 1 набуло значення С. Це і є наслідком виконання інструкція циклічного зсуву RСL. Інструкція JP: № Мнемонічний запис Код, що обробляється Коментар  1 ЛАІ ( РА 0000 0000 0001 вибір адреси 1-ої інструкції і занесення її до Регістра Адреси  2 РА ( РД 1010 0000 0000 0000 вибір коду інструкції з РА і занесення його до Регістра Даних  3 РД ( РІ 1010 0000 0000 0000 декодування інструкції у Регістрі Інструкцій  5 РІ( ЛАІ 0000 0000 0000 Перехід на інструкцію 0, якщо S=1  В даному випадку у Регістрі Ознак 1 набуло значення S. Це і є умовою виконання інструкція умовного переходу JP. 2. Скласти програму, яка реалізуватиме оператор IF (умову перевірки вибрати самостійно). Закодувати її, ввести у симулятор та виконати її дослідження у покроковому режимі. If (a=b) then c:=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 1001 0000 0000 0100 JZ 04; якщо Z = 0 (a=b), перейти до c:=a+b  0000 0000 0011 0111 1100 0000 0000 HALT; зупинити програму  0000 0000 0100 0000 0000 0000 1010 LOAD 10; завантажити до акумулятора змінну a  0000 0000 0101 0010 0000 0000 1011 ADD 11; записати змінну a на місце змінної c  0000 0000 0110 0001 0000 0000 1100 STORE 12; записати змінну a+b на місце змінної c  0000 0000 0111 0111 1100 0000 0000 HALT; зупинити програму  3. Розробити алгоритм і cкласти програму в інструкціях симулятора DeComp, що для довільного числа "А" з комірки пам"яті за адресою "N" підраховує кількість"1" - для непарних номерів із списку групи, і підраховує кількість "0" - для парних номерів із списку групи. Програма виконується в автоматичному режимі. № комірки пам’яті Двійковий код інструкції Мнемонічний запис інструкції Коментар  0000 0000 0000 0000 0000 0001 0100 LOAD 20; завантажити до акумулятора змінну a  0000 0000 0001 1111 0000 0000 1011 LSL Логічний зсув вмісту акумулятора  0000 0000 0010 1100 0000 0000 0001 JZ 01; Перехід до комірки 1 якщо Z=1  0000 0000 0011 0001 0000 0001 0100 STORE 20; Записати дані з акумулятора в 20  0000 0000 0100 0000 0000 0001 0101 LOAD 21; Загрузити з комірки 21 в акумулятор  0000 0000 0101 0010 0000 0001 0110 ADD 22; Додати до акумулятора значення комірки 22  0000 0000 0110 0001 0000 0001 0101 STORE 21; Записати значення з акумулятора в комірку 21  0000 0000 0111 0000 0000 0001 0111 LOAD 23 Загрузити в акумулятор значення комірки 23  0000 0000 1000 0011 0000 0001 0100 SUB 20 Відняти значення комірки 20  0000 0000 1001 1101 0000 0000 0000 JC 0 ЯкщоС=1 перейти на до комірки 0  0000 0000 1010 0111 1100 0000 0000 HALT; зупинити програму   й Так Ні Так Ні Висновок: я засвоїв використання основних інструкцій зсуву і переходів у системі команд навчального комп'ютера DeComp. Навчився організовувати цикли необхідної стуктури і використовувати їх у програмах.
Антиботан аватар за замовчуванням

04.05.2013 10:05-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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