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

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

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

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

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

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

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

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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