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

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

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

Рік:
2011
Тип роботи:
Лабораторна робота
Предмет:
Архітектура комп'ютерів

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

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра АСУ Лабораторна Робота №1 з дисципліни: «Архітектура комп’ютерів» Загальна структура мікролабораторії і процесора. Львів - 2011 Мета: Вивчити структуру мікролаборатоії і процесора, і після чого написати програму за вказівками поданими нижче. Мікролабораторія являє собою мікрокомп'ютер на базі однокристального мікропроцесора "КР580ИК80А ". У мікропроцесорі є такі 8-бітні регістри : А-акумулятор, в якому знаходиться результат виконання довільної арифметико-логічної 8-бітної операції; F-регістр прапорців (ознак); В, С, D, Е, H, L-регістри загального призначення. Вони об'єднуються у 16-бітні регістри по парах:AF, BC,DE, HL. Команда може займати від одного до трьох байтів: перший байт -код операції, другий та третій - 8-бітний або 16-бітний операнд (в залежності від операції). Після виконання арифметико-логічної команди в мікропроцесорі встановлюються ознаки результату, які зберігаються у двійковому вигляді і називаються прапорцями. У більшості мікропроцесорів існують стандартні прапорці : CARRI-перенос за межі регістра; ZERO - нульовий результат; PARITY- результат має парну кількість одиничок; SIGN - знак числа (старший біт результату); На прапорці не впливають команди пересилки, розгалуження та вводу-виводу. Завдяки існуванню прапорців обчислювальний процес може розгалужуватись трьома видами команд: 1. Умовними переходами на мітку в залежності від стану прапорців 2. Умовними викликами підпрограм; 3. Поверненнями з підпрограм за станом прапорців. Мнемоніка розгалужуюгих команд: Команди розгалуження розділяються на умовні переходи (J), умовні виклики (С), умовні повернення (R): JC, СС, RC - перехід виконується, якщо встановлений прапорець переносу; JNC, CNC, RNC - виконується, якщо немає переносу; JZ, CZ, RZ - виконується, якщо нуль; JNZ, CNZ, RNZ- виконується, якщо не нуль; JP, СР, RP - виконується, якщо результат додатній; JM, CM, RM - виконується, якщо результат від'ємний; JPO, СРО, RPO - виконується, якщо встановлений прапорець парності; JPE, CPE, RPE - виконується, якщо не встановлений прапорець парності. На стан прапорців не впливають такі команди: команди переходу; команди виклику підпрограм; команди повернень з підпрограм, а також: "ІNX" - 16- бітного інкременту; "DCX" - 16- бітного декременту; Вводу "IN", виводу "ОUТ" ; Регістрові пересилки "MOV', "SHPL"; "ХСНG"-обміну регістрових пар "DE" і "HL" "XTHL"- обміну верхівки стека і "HL"; "MVI"-завантаження регістра; "LXI"- завантаження регістрової пари; "PUSH" - опускання в стек регістрової пари; "POP"- виймання із стека регістрової пари; "NOP" порожня команда; "LDA" та "LDAX"- читання з пам'яті в акумулятор за безпосередньою адресою або за адресою, яка знаходиться в регістровій парі; "STA" та "STAX"- аналогічні команді-запису –акумулятора в пам'ять; "LHLD" - читання двох байт по безпосередній адресі та завантаження їх у регістрову пару "HL"; "SHLD"- запис "HL" в пам'ять (протилежна команда). Решта команд встановлюють прапорці відповідно з їх призначенням: "INR", "DCR" - восьмибітного інкременту та декременту : арифметичні команди ADD, ADC, ADI, SUB, SBB, SUI; логічні команди ANA, ORA, XRA; команди порівняння CMP, CPI; - команди зсуву через перенос та спеціальні команди RAL, RAR- додавання регістрових пар до пари HL - DAD; У мікропроцесорі існують спеціальні 16- бітні регістри : SP - вказівник стеку; PC - програмний лічильник. У "PC" знаходиться адреса команди, де на даний момент виконується програма. Стек - це організація даних за принципом - останій увійшов, першим вийшов. У "SP" знаходиться адреса верхівки стека. Якщо у стек записуються дані (командою "PUSH") або адреса (командами виклику підпрограм), то "SP" зменшується на 2, тобто стек зростає від кінця пам'яті до початку. Пам'ять розділено на постійну і оперативну, у постійній пам'яті знаходиться монітор - програма, на яку передається управління після натиснення клавіші "СБРОС". Монітор дозволяє вводити і запускати в абсолютному шістнадцятковому коді програму користувача, а також має тестову програму, яка грає мелодію. В оперативній пам'яті (її початок знаходиться за адресою #8000) розміщені програми користувача, стек та робочі комірки монітора . Для введення програми її треба перед тим відтранслювати з допомогою таблиці кодів. Трансляція виконується в такій послідовності: записується в 16-ій формі адреса команди, код операції, операнди (якщо передбачені). Після того програма готова виконати наступні дії: Натиснути "СБРОС" ; Набрати на клавіатурі адресу початку програми (8000); Натиснути клавішу "УСТ. АДР" . Набрана адреса повинна з'явитись на чотирьох лівих індикаторах. Якщо адреса не з'явилась, або з'явилась з помилкою, то повторити з пункту 1. Набирати на двох правих індикаторах коди програми і даних, натискаючи після кожного байту клавішу "ЗАП". Перевірити введені коди, рухаючись по пам'яті за допомогою клавіш "АД-", "АД+". Якщо знайдено код з помилкою, набрати вірне значення і натиснути "ЗАП". Якщо адреса коду, яка висвічується на чотирьох лівих індикаторах не співпадає з адресою, яка вказана у тексті програми, то повторити ввід з пункту 1. 6. Встановити адресу початку програми і натиснути "ПУСК". У лабораторній роботі необхідно ввести і виконати програму, яка вводить дані з перемикачів, обробляє їх і виводить результат на світлодіоди. Процесор отримує і видає інформацію назовні через інтерфейс вводу/виводу - мікромодуль "КР580ВВ55А". Інтерфейс має три 8- бітні порти, до яких під'єднані клавіатура (крім клавіші "СБРОС"), світлодіоди, перемикачі, гучномовець. Обмін з інтерфейсом йде через акумулятор за допомогою команд "IN","OUT". Перед тим, як працювати з інтерфейсом, його потрібно запрограмувати за допомогою керуючого коду, що вказує, які порти повинні працювати на ввід, а які - на вивід. Завдання Виконати програму для всіх 11 пунктів таблиці 1, які змінюють байти #8006, #8007, #8008. Після кожного запуску перевіряти, як впливають стани перемикачів на світлодіоди, записувати стани світодіодів в звіт. Необхідно виконати 11 запусків програми приведеної в таблиці 1, які відрізняються байтами 8006-8008, які подані в таблиці 2. Таблиця 1 Адреса Програма Коментар  8000 MVI A,#81 3E,8l Завантажити в акумулятор код для програмування інтерфейса  8002 OUT#FB D3,FB Вивести вміст акумулятора на програмуючий порт інтерфейса  8004 Ml: IN#FA DB,FA Ввід у акумулятор стан перемикачів з порту #FA  8006 NOP 00 Порожні команди для резервування місця під інші команди  8007 NOP 00   8008 NOP 00   8009 OUT #F9 D3,F9 Вивід вмісту акумулятора на порт світло діодів  800В JMP M1 СЗ,04э80 Безумовний перехід. Замість мітки записується її адреса у вигляді: молодший байт, старший байт  Таблиця 2 Байти з адресою Результат Коментар   8006 8007 8008    1 NOP NOP NOP 0 0 0 0 x1 x2 x3 0 Порожня операція  2 XRI #1F NOP 0 0 0 1 ẍ1 ẍ2 ẍ3 1 Сума акумулятора по MOD 2 з байтом #1F  3 RLC RLC NOP 0 0 x1 x2 x3 0 0 0 Циклічний зсув акумулятора вліво на 2 біта  4 RRC RRC NOP x3 0 0 0 0 0 x1 x2 Циклічний зсув акумулятора вправо на 2 біта  5 STC RAL NOP 0 0 0 x1 x2 x3 0 1 Встановлення прапорця переносу і зсув акумулятора вліво через перенос  6 STC RAR NOP 1 0 0 0 0 x1 x2 x3 Встановлення прапорця переносу і зсув акумулятора вправо через перенос  7 MVI C #0A ORA C 0 0 0 0 1 0 1 0 Завантажити у регістр "С" число #0А (00001010) і диз'юнкція регістра "С" з акумулятором  8 MVI C #0A ANA С 0 0 0 0 x1 0 x1 0 Завантажити у регістр "С" число #0А (00001010) і кон'юнкція регістра "С" з акумулятором  9 MVI С #0A XRA C 0 0 0 0 ẍ1 x2 ẍ3 0 Завантажити у регістр "С" число #0А (00001010) і сума по MOD 2 регістра "С" з акумулятором  10 MVI C #0A ADD С 0 0 0 1 1 0 0 0 Завантажити у регістр "С" число #0А (00001010) і додавання акумулятора з регістром "С"  11 MVI C #0A SUВ C 0 0 0 0 0 1 0 0 Завантажити у регістр "С" число #0А (00001010) і віднімання акумулятора з регістром "С"   Результати роботи програми описати у вигляді станів світлодіодів. Наприклад, перший пункт таблиці виглядає так: 0 0 0 0 X1 X2 X3 0 - світлодіод згасає незалежно від стану перемикачів - світлодіод світиться незалежно від стану перемикачів Xj - стан світлодіода залежить від стану перемикача у прямому напрямку Yj - стан світлодіода залежить від стану перемикача у зворотньому напрямку. Результати роботи 0 0 0 X1 X2 X3 0 Висновок: Виконуючи дану лабораторну роботу, я ознайомився з мікропроцесорною лабораторією та написав програму що змінює задані байти. Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра АСУ Лабораторна Робота №2 з дисципліни: «Архітектура комп’ютерів» Складання простих програм на прикладі програмування звукових ефектів Виконав Ст. гр. КН-32 Прийняв Стрямець С.П. Львів – 2011 Мета: Написати програму, що створює гудки певної частоти, проекспериментувати з програмою і на основі результатів зробити висновки. У мікропроцесорній лабораторії гучномовець приєднано до молодшого біта порта світло-діодів. Якщо змінювати по послідовному каналу десятки разів на секунду стан молодшого біта порту з одиниці на нуль і навпаки, то в гучномовці буде звук певної частоти. Наприклад, нота «ля» 1-ої октави-це коливання фізичного тіла (камертон, струна) 440 раз в секунду, тобто 440 Гц. Програмним шляхом можна змінювати часові затримки між командами (імпульсами) і тим самим змінювати висоту звуку. Завдання 1 Програма, яка видає гудок певної частоти. Адреса Програма Код Коментар  8000 NOP 00 Зарезервоване місце  8001 NOP 00 Порожні команди  8002 MVI A, #81 3E,81 Завантажити в акумулятор код для програмування інтефейсу  8004 OUT #FB D3,FB Вивести вміст акумулятора на програмний порт інтерфейсу  8006 M1: INR A 3C Інвертування молодшого біта шляхом збільшення на одиницю  8007 MVI C, #FF 0E,03 Завантажити в регістр “С” період затримки між імпульсами, вираженими у часі виконання команд “DCR” та “JNZ”  8009 M2: DCR C 0D Зменшення лічильника циклів затримки на одиницю  800A JNZ M2 C2,09,80 Перехід на початок циклу  800D OUT #F9 D3,F9 Вивід молодшого біта акумулятора на гучномовець  800F NOP 00 Зарезервоване місце для подальших етапів роботи  8010 JMP M1 C3,06,80 Перехід на підготовку до виконання наступного імпульсу   Завдання 2 Адреса Програма Код Коментар  8000 NOP 00 Зарезервоване місце  8001 NOP 00 Порожні команди  8002 MVI A, #81 3E,81 Завантажити у акумулятор код для програмування інтерфейсу  8004 OUT #FB D3,FB Вивести вміст акумулятора на програмний порт інтерфейсу  8006 M1: INR B 04 інкремент регістра В (інвертувати молодший біт регістру В)  8007 MOV A, B 78 Вміст регістра В передати в акумулятор А  8008 MOV C, B 48 Підготовка до затримки  8009 M2: DCR C 0D Зменшення лічильника циклів затримки на одиницю  800A JNZ M2 C2,09,80 Реалізація затримки  800D OUT #F9 03,F9 Вивід інвертованого імпульсу на гучномовець  800F NOP 00 Зарезервоване місце для подальших етапів роботи  8010 JNZ M1 C2,06,80 Перехід на підготовку до видачі наступного імпульсу  Завдання 3 Програма, яка видає короткий гудок і зупиняється. Адреса Програма Код Коментар  8000 +MVI E, #FF 1E,FF Завантажити у регістр “Е” кількість імпульсів, яку треба видати на гучномовець  8002 MVI A, #81 3F,81 Завантажити в акумулятор код для програмування інтерфейсу  8004 OUT #FB D3,FB Вивести вміст акумулятора на програмуючий порт інтерфейсу  8006 M1: INR A 3C Інвертування молодшого біта шляхом збільшення на одиницю  8007 MVI C, #FF 0E,FF Завантажити у регістр “С” період затримки між імпульсами, вираженими у часі виконання команд “DCR” та “INZ”  8009 M2: DCR C 0D Зменшення лічильника циклів затримки на одиницю  800A JNZ M2 C2,09,80 Перехід на початок циклу, якщо не нуль  800D OUT #F9 D3,F9 Вивід інвертованого імпульсу на гучномовець  800F DCR E 1D Зменшити лічильник імпульсів на одиницю  8010 JNZ M1 C2,06,80 Перехід на підготовку до видачі наступного імпульсу, якщо не нуль  8013 HLT 76 Зупинка процесора   Завдання 4 Підпрограма, яка видає гудок у залежності від коду натиснутої клавіші. Адреса Програма Код Коментар  8100 M3: CALL #0216 CD,16,02 Опитати клавіатуру  8103 RLC 07 Збільшити код клавіші в 4 рази  8104 RLC 07   8105 MOV B, A 47 Зберегти його у “В” як параметр частоти  8106 CALL #8000 0D,00,80 Викликати підпрограму для видачі звуку  8109 JMP M3 C3,00,81 Зробити нескінчений цикл  Підпрограма  8000 MVI E, #FF 1E,FF Завантажити у регістр “Е” кількість імпульсів, яку треба видати на гучномовець  8002 MVI A, #81 3E,81 Завантажити в акумулятор код для програмування інтерфейсу  8004 OUT #FB 03,FB Вивести вміст акумулятора на програмуючий порт інтерфейсу  8006 M1: INR A 3C Інвертування молодшого біта шляхом збільшення на одиницю  8007 MOV C, B 48 Переслати у регістр “С” параметри затримки  8008 NOP 00 Порожня команда  8009 M2: DCR C 0D Зменшення лічильника циклів затримки на одиницю  800A JNZ M2 C2,09,80 Перехід на початок циклу, якщо не нуль  800D OUT #F9 03,F9 Вивід інвертованого імпульсу на гучномовець  800F DCR E 1D Зменшити лічильник імпульсів на одиницю  8010 JNZ M1 C2,06,80 Перехід на підготовку до видачі наступного імпульсу, якщо не нуль  8013 RET C9 Безумовне повернення з підпрограми   Висновок: Виконуючи дану лабораторну роботу, я навчився програмувати прості програми на основі програмування звукових ефектів. Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра АСУ Лабораторна Робота №3 з дисципліни: «Архітектура комп’ютерів» Робота з підпрограмами на прикладі програм знаходження добутку двох 8-бітних чисел Виконав Ст. гр. КН-32 Прийняв Стрямець С.П. Львів – 2011 Мета: Використовуючи програму для знаходження добутку двох 8-бітних чисел виконати наступні два завдання. У мікропроцесорі “КР580ИК80А” не існує операції множення чисел. Отже, коли треба знайти добуток двох чисел, треба використовувати підпрограми множення. Вам необхідно скласти таку підпрограму, встановлювати її, та виконати для двох прикладів, окремих для кожного студента. Вся необхідна інформація для складання програми знаходиться у роботах N1 та N2. Завдання 1 Підпрограма множення Адреса Програма Код Коментар  8000 MVI C,09 0E,09 Завантажити #9 у лічильнику тактів множення;  8002 LXI H,0000 21,00,00 Обнулити регістри результату;  8005 DCRC 0D Зменшити лічильник тактів;  8006 JZ 8012 C8 Повернутися з підпрограми, якщо результат дорівнює нулю;  8009 DAD H 29 Зсув регістрів результату “HL” вліво, використовуючи команду подвійного додавання (HL:=HL+HL);  800A RAL 17 Зсув першого множника вліво через прапорець переносу;  800B JNC 8005 D2,05,80 Перехід до пункту 3, якщо немає переносу;  800E DAD D 19 До результату додати другий множник, використовуючи команду подвійного додавання;  800F JMP 8005 C3,05,80 Перейти до пункту 3.  8012 RET C9 Повернення з підпрограми  Розподіл регістрів: A- перший множник; C- лічильник тактів; D- нульове значення; E- другий множник; HL - результат множення. Завдання 2 Скласти по пунктах основну програму, яка звертається до підпрограми множення і розмістити її за адресою #8100: Адреса Програма Код Коментарі  8100 MVI A,09 3E,09 Завантажитти пеший множник командою “MVI”;  8102 LXI D,05 11,05,80 Завантажити другий множник та регістр “D” командою “LXI”;  8105 CALL 8000 CD,00,80 Викликати підпрограму множення;  8108 SHLD 8200 22,00,82 Результат, отриманий у регістрах “H” (старша частина) і “L” (молодша частина), записати за вільною адресою, використовуючи команду “SHLD”;  8113 HLT 76 Зупинити процесор.   Висновок: Виконуючи дану лабораторну роботу, я навчився працювати з підпрограмами знаходження добутку двох 8-бітних чисел. Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра АСУ Лабораторна Робота №4 з дисципліни: «Архітектура комп’ютерів» Робота з прапорцями на прикладі програми ділення чисел. Виконав Ст. гр. КН-32 Прийняв Стрямець С.П. Львів – 2011 Мета: Використовуючи за приклад програму для ділення чисел, та прапорці, виконати наступне завдання. Завдання Програма, яка виконує ділення числа, завантаженого у регістр "L" на 8-бітне число, яке введене з клавіатури. Адреса Програма Код Коментар  8000 CALL #0216 CD,16,02 Прочитати з клавіатури дільник;  8003 MOV E,A 5F Занести його в регістр "Е";  8004 MVI L #08 2E,08 Завантажити в регістр "L" ділене;  8006 MVI A #81 3E,81 Завантажити в акумулятор код програмування інтерфейса для виводу на світлодіоди;  8008 OUT #FB D3,FB Вивести його на програмуючий порт;  800A MVI B #00 06,00 Онулити регістр "В";  800C MVI D #00 16,00 Онулити регістр "D";  800E MVI H #00 26,00 Онулити регістр "НГ;  8010 MVI C #08 0E,08 Завантажити у "С" кількість тактів ділення: #8;  8012 DAD H 29 Зсунути "HL" вліво;  8013 MOV A,H 7C Переслати "H" в акумулятор;  8014 SUB E 93 Відняти від "А" дільник;  8015 JM #8019 DA,19,80 Якщо результат від'ємний - встановиться прапорець переносу, перейти до пункту 15;  8018 MOV H,A 67 Інакше переслати результат віднімання у "Н";  8019 CMC 3F Інвертувати біт переносу (CMC);  801A MOV A,D 7A Переслати в акумулятор вміст регістра "D";  801B RAL 17 Зсунути акумулятор через перенос вліво;  801C MOV D,A 57 Скопіювати акумулятор в регістр "D";  801D DCR C 0D Зменшити лічильник тактів;  801E JNZ #8012 C2,12,80 Перехід, якщо не нуль, до пункту 10;  8021 OUT #F9 D3,D9 Вивести результат ділення на порти світлодіодів;  8023 DCX B 0B Організувати затримку результату на світлодіодах - зменшити 16-бітний регістр "ВС";  8024 MAV A,B 78 Переслати вміст "В" в акумулятор;  8025 ORA C B1 Диз'юнкція з регістром "С";  8026 JNZ #8023 C2,23,80 Якщо не нуль, то перейти на цикл затримки - пункт 22;  8029 JMP #8000 C3,00,80 Перейти до прункту 1;   Висновок: На даній лабораторній роботі я навчився працювати з прапорцями на прикладі програми ділення чисел. Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра АСУ Лабораторна Робота №5 з дисципліни: «Архітектура комп’ютерів» Операції над стеком. Виконав Ст. гр. КН-32 Прийняв Стрямець С.П. Львів – 2011 Тема: Мета: Необхідно написати програму яка методом перебору знаходить оптимальний хід для гри “Сірники”. У будь-якому мікропроцесорі для роботи зі стеком існує спеціальний регістр - вказівник стека (SP), який містить адресу верхівки стека. Стек - це така організація пам'яті, де для читання або запису даних не треба явно вказувати їх адресу. Прочитати дані після декількох операцій запису можна тільки у зворотному порядку: останнім прийшов - першим вийшов. У дійсності, адреса, за якою процесор читає та записує дані при роботі із стеком, знаходяться у регістрі "SP". Якщо при виконанні зустрічається команда "РUSH" опустити в стек, то процесор зменшує (SP) на два, та розміщує дані у пам'яті за його адресою, по команді "POP" процесор виконує зворотні дії: читає дані за адресою (SP) у регістрі і збільшує вміст (SP) на два. За одну операцію "PUSH" або "POP" пересилаються два спарених 8-бітних регістри. За допомогою стека реалізовано апарат виклику та повернення з підпрограм: адреса команди, на яку слід повернутись, засилаються у стек, а при поверненні витягаються та передаються у програмний лічильник (PC). Завдання У лабораторній роботі треба виконати програму, яка знаходить методом перебору найкращий хід в забавку "сірники", дотримуючись при виборі мінімаксної стратегії (розглядається в теорії ігор). Умова гри: машина і людина беруть по черзі сірники із загальної купи, за один раз можна брати від одного до трьох сірників, програє той, хто бере останній сірник. Вхідні дані до підпрограми: в акумуляторі - кількість сірників на N-му ході (задавати не більше #0F) Вихідні дані підпрограми: у регістрі "D" - оптимальна кількість взятих машиною сірників; в акумуляторі - значення функції виграшу. Константи підпрограми: у регістр "В" завантажується максимальна кількість сірників, яку можна взяти (задавати 3, 4, 5, 6). Підпрограма для знаходження оптимального ходу Адреса Програма Код Коментар  8100 PUSH H E5 Підготувати регістри до процесу знаходження ходу: опустити у стек вміст регістрової пари «HL»  8101 PUSH B C5 Опустити у стек вміст регістрової пари «ВС».  8102 MOV C,A 4F Звільнити акумулятор, переслати у «С» з «А» кількість сірників, яка є на столі.  8103 MVI B #04 06,04 Підготувати початкові значення. Завантажити у «В» максимально можливу кількість сірників, яку будемо пробувати брати (див.умову).  8105 MVI H #00 26,00 Завантажити у «Н» початкове значення функції виграшу, що дорівнює нулю.  8107 MOV A,C 79 Головний процес (спроба ходу): переслати в акумулятор кількість сірників, яка є на столі  8108 SUB B 90 Відняти від вмісту акумулятора кількість сірників, яку спробуємо взяти.  8109 JC #811F DA,1F,81 Перехід до п. 19, якщо результат від’ємний (встановився carry).  810C JZ #8128 CA,28,81 Якщо результат віднімання дорівнює нулю, то взяли останній сірник, тобто програли – перехід до п.26.  810F CPI #01 FE,01 Порівняти результат з одиницею.  8111 JZ #8120 CA,20,81 Якщо при порівнянні отримали нуль, то виграли – перехід до п.28.  8114 CALL #8100 CD,00,81 Знайти оптим. хід та значення ф-ції виграшу для противника (рекурія цієї підпрограми).  8117 CMA 2F Інвертувати отриману функцію виграшу противника.  8118 INR A 3C Збільшити результат на одиницю з метою переводу у від’ємне число.  8119 CMP H DC Перевірити, чи зроблений хід кращий за попередні: порівняти результат з максимальним значенням функції виграшу у «Н «.  811A JC #811F DA,1F,81 Перехід до п. 19, якщо цей хід не кращий (Н>А).  811D MOV H,A 67 Подія: знайшли нове максимальне значення функції виграшу, яке треба зберегти в «Н».  811E MOV L,B 68 Запам’ятати в «L» кількість сірників, що спробували брати, і яка привела до кращого ходу  811F DCR B 05 Продовження перебору ходів: зменшуємо кількість сірників, яку будемо пробувати брати (вміст «В»).  8120 JNZ #8107 C2,07,81 Якщо результат зменшення не нуль, то повторити процес з п.6;  8123 POP B C1 Інакше підготуватись до виходу з підпрограми: витягнути зі стека регістрову пару «ВС».  8124 MOV A,H 7C Переслати знайдене максимальне значення функції виграшу в акумулятор.  8125 MOV D,L 55 Переслати . в «D» кількість сірників, яка відповідає знайденому максимальному значенню функції виграшу.  8126 POP H E1 Витягнути зі стека регістрову пару «HL».  8127 RET C9 Повернутись з підпрограми.  8128 MVI A,#81 3E,81 Програв: встановити в акумуляторі значения функції виграшу, яке дорівнює #81.  812A JMP #8119 C3,19,81 Продовжувати пошук. Перейти до п. 15.  812D MVI H,#83 26,83 Виграв: підготуватись до закінчення пошуку ходу – завантажити в»Н» максимальне значення функції виграшу, яке дорівнює #83.  812F MOV L,B 68 Переслати в «L» кількість взятих сірників, що привели до виграшу.  8130 JMP #8123 C3,23,81 Перейти до закінчення пошуку – п.21.   Головна програма Адреса Програма Код Коментар  8000 MVI A,0E 3E,0E Завантажити в акумулятор кількість сірників, що залишились на столі після: N-ro ходу.  8002 CALL #8100 CD,00,81 Знайти оптимальний хід (викликати підпрограму).  8005 MVI A,#81 3E,81 Підготуватись до виводу ходу – завантажити у акумулятор код програмування інтерфейсу.  8007 OUT #FB D3,FB Запрограмувати інтерфейс для виводу на світлодіоди.  8009 MOV A,D 7A З регістра «D» переслати у акумулятор кількість взятих програмою сірників (оптимальний хід).  800A OUT #F9 D3,F9 Вивести отримане значення на світлодіоди.  800C HLT 76 Зупинити процесор.  Висновок: Виконуючи дану лабораторну роботу я написав програму «Сірники» яка знаходить оптимальний хід. Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра АСУ Лабораторна Робота №6 з дисципліни: «Обмін даними через пам'ять. Виконав Ст. гр. КН-32 Прийняв Стрямець С.П. Львів – 2011 Мета: Використовуючи нижче подану демонстраційну програму перебирання сегментів, написати програму яка б виводила певну букву. Обмін інформацією між мікропроцесорною системою та зовнішнім середовищем може здійснюватись не лише через інтерфейс вводу-виводу, а й через оперативну пам’ять. Таким чином, під час запису даних у деякі комірки пам’яті інформація одночасно може потрапляти і на пристрій вводу-виводу. У складних мікропроцесорних системах функцію передачі даних між системою і зовнішнім пристроєм, локальною мережею або іншою мікропроцесорною системою здійснює контролер прямого доступу до пам’яті, який працює паралельно з процесором. У лабораторній роботі також є можливість здійснювати вивід через пам’ять, але без допомоги контролера ПДП. Пристроєм виводу є цифрові індикатори, звернутися до будь-якого з індикаторів можна через комірки за адресою #83F8-#83FF. Кожен індикатор має вісім окремих сегментів, які світяться залежно від даних, які записані у вказані комірки. Стан сегменту залежного від стану відповідного біта даних. У процесі роботи потрібно запустити програму, та визначити, за який сегмент відповідає кожен біт. Після цього потрібно вивести дві букви на два довільних індикатори, використовуючи команди "MV1 М "безпосереднє завантаження комірки пам’яті, адреса якої знаходиться у регістровій парі "НL.". Можливо також використати команду "STA'' прямий запис акумулятора у пам’ять за адресою яка вказана після команди. У кожного студента повинен бути свій варіант букв. Можливі букви: G,H,J,L,P,Q,U,B,r,n,y,b. ДЕМОНСТРАЦІЙНА ПРОГРАМА ПЕРЕБИРАННЯ СЕГМЕНТІВ: Адреса Програма Коментар  
Антиботан аватар за замовчуванням

31.03.2013 02:03-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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