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

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

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

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

Рік:
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маємашинний код 1110aaaaaaaaaaaa. Відповідно, код операції дорівнює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; JNZADR Z = 0 A( 0  1001 JZADR Z = 1 A = 0  1010 JP ADR S = 0 A > 0  1011 JMADR S = 1 A <0  1100 JNCADR C = 0 A( 216 – 1  1101 JCADR 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; JNZLOOP 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 100xxxxxxxxx, де х – Довільна послідовність 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 110xxxxxxxxxде х – Довільна послідовність 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-й крок 000000001010 0000000000001010 0000000000001010 0000000000001010 000000000001   2-й крок 000000001011 0000000000001010 1111 1111 1111 1011 0011 000000001011 000000000010 S; C  3-й крок 000000000010 1011 0000 0000 0110 1111 1111 1111 1011 1011 0000 0000 0110 000000000110 S; C  4-й крок 000000001011 0000000000001010 0000000000001010 0000000000001011 000000000111 S; C  5-й крок 000000001100 0000000000001010 0000000000001010 0001 0000 0000 1100 0000 0000 1000 S; C  6-й крок 0000 0000 1000 0111 1100 0000 0000 0000000000001010 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 00010000 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. Оформити та захиститизвіт з лабораторноїроботи. Висновок: на лабораторній роботі я дослідив інструкції переходів та зсувів, навчився організовувати цикли та склав власну програму, у якій використовувались попередньо здобуті знання.
Антиботан аватар за замовчуванням

22.03.2018 19:03-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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