DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра 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:53

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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