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
Тип роботи:
Лабораторна робота
Предмет:
Організація та функціонування комп’ютерів

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

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

28.01.2013 17:35

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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