ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

         
     
    Аналітичний огляд книги "Програмування на мові асемблера для мікропроцесорів 8080 і 8085 "
         

     

    Інформатика, програмування
    ВСТУП
    Інтенсивний розвиток мікроелектроніки та підвищення ступеня інтеграції відкрили новий напрямок в ВТ - створення мікропроцесорів і мікрокомп'ютерів. З'явилися ви числівники системи з малим рівнем споживання енергії та універсальними можливостями, які дозволяють вирішувати завдання управління об'єктами різної фізичної природи. На основі їх застосування знижуються витрати на автоматизацію основних технічних і допоміжних процесів. У результаті буде вирішена задача комплексної автоматизації виробництва в усіх галузях. Це дозволить збільшити продуктивність праці, зменшити собівартість продукції, що випускається і значно скоротити ручні операції в промисловості. Однак для широкого розвитку робіт в даному напрямку необхідно готувати значна кількість інженерів - системотехніків, які вміють створювати і застосовувати мікропроцесори і мікрокомп'ютери. Крім того, слід випускати і багато інженерів - математиків, що розробляють відповідне програмне забезпечення. Для їх навчання необхідно мати навчальні посібники, присвячені апаратних і програмних засобів сучасної обчислювальної техніки.
    Попри те, що випущено значну кількість літератури, присвяченої розробці та застосування мікропроцесорів і мікрокомп'ютерів, а також опис програмних засобів, пропонована книга становить певний інтерес комплексним підходом і методичної цілісністю.
    На огляд представлено книгу американських авторів Левенталя Л. і Сейвілла У. "Програмування на мові асемблер для мікропроцесорів 8080 і 8085". Книга перекладена з англійської, надрукована у 1987р. у видавництві Радіо і зв'язок. Видання містить у собі 488 сторінок.
    Для початку розглянемо зміст цієї книги щоб зробити остаточний аналіз за її переваг і недоліків, а також конкретизувати до якої групи ця книга призначена. На огляд коротко будуть представлені частині цієї книжки, потім зупинимо свою увагу на певній чолі.
    Книга складається з двох частин: огляду питань програмування мовою асемблера і набору підпрограм. Перша частина добре проілюстрована великим числом прикладів, що дозволяють швидко засвоїти основні навички програмування для розглянутих мікропроцесорів. Підпрограми, наведені у другій частині книги, можуть задовольняти потреби більшості програмістів у стандартних процедурах.
    Ця книга, можна сказати, є як би довідковим посібником для програмістів, які працюють на мові асемблера. Вона містить короткий огляд питань програмування мовою асемблера для конкретного мікропроцесора та набір корисних підпрограм. У цих підпрограма використовувалися стандартні угоди за форматом, документовані оформлення та методів передачі параметрів. При цьому дотримувалися правила найбільш поширених асемблером; крім того, описані призначення, процедура, параметри, результати, час виконання та вимоги до пам'яті.


    Розділ 1. ЗАГАЛЬНІ МЕТОДИ ПРОГРАМУВАННЯ
    Служить введенням в програмування для даного процесора; в ній наводяться основні відмінності цього процесора від інших мікропроцесорів і міні-ЕОМ. У цій главі описуються загальні методи написання програм на мові асемблера для мікропроцесора 8080 і 8085. Вона містить способи виконання наступних операцій:
     завантаження і збереження регістрів;
     запам'ятовування даних в пам'яті;
     арифметичні та логічні операції;
     робота з розрядами;
     перевірка розрядів;
     перевірка на певні значення;
     числові порівняння;
     організація циклів (повторюваних послідовностей операцій);
     обробка масивів;
     пошук в таблиці;
     робота з символами;
     перетворення кодів;
     арифметичні операції підвищеної точності;
     множення і ділення;
     обробка списків;
     обробка структур даних.
    В окремих розділах описуються передача параметрів підпрограм, загальні методи написання драйверів вводу-виводу і програм обробки переривань, а також прийоми, що дозволяють прискорити виконання програм і зменшити використовувану ними пам'ять.
    Для тих, хто знайомий з програмуванням на мові асемблера на інших обчислювальних машинах, тут дається короткий огляд особливостей процесорів 8080 і 8085.
    1. Арифметичні та логічні операції дозволені тільки між акумулятором і байтом безпосередніх даних або між акумулятором і регістром загального призначення. Проте один регістр загального призначення в дійсності вказує на адресу в пам'яті; це регістр М, який насправді звертається до адреси в пам'яті, що міститься в регістрах Н і L. Таким чином, команда ADD M , наприклад, означає: додати до акумулятора вміст байта пам'яті, що адресується через регістри H і L.
    2. Акумулятор і регістри Н і L є спеціальними регістрами. Вони є єдиними регістрами, які можуть бути прямо завантажені або записані в пам'ять. Акумулятор є єдиним регістром, який може бути інвертований, зрушено, непрямо завантажений з використанням адреси в парі регістрів В або D, побічно записаний в пам'ять за адресою, що міститься в парі регістрів В або D, або використаний в командах IN і Оut . Регістри Н і L становлять єдину пару, яка може бути використана побічно в арифметичних командах, при записі в пам'ять даних, заданих безпосередньо в команді, або при завантаженні і запису в пам'ять інших регістрів, відмінних від акумулятора. Регістри Н і L є також єдиною парою, яка може бути передана в лічильник команд або покажчик стека. Більш того, ці регістри використовуються як акумулятор подвійної довжини при складанні 16-розрядних чисел (команда DAD ). Регістри D і Е є в деякому сенсі також спеціальними, оскільки однією командою ( XCHG ) можна поміняти їх вміст з вмістом регістрів Н і L. Таким чином, регістри в 8080 і 8085 вельми асиметричні, і програміст повинен акуратно вибирати, для яких даних і адрес якими регістрами користуватися.
    3. Часто для одних і тих самих фізичних регістрів використовуються декілька імен. Для багатьох команд A, B, C, D, E, H і L є 8-розрядними регістрами. Для інших команд регістри В і С (В-старший за значенням), D і Е (D-старший за значенням) або Н і L (Н-старший за значенням) є 16-розрядної парою регістрів. Терміни пара регістрів В, регістри В і С і пара регістрів НД мають одне і теж значення; подібні ж варіанти існують для регістрів D і Е і H і L. Зауважимо, що пара регістрів і два одиночних регістра фізично одне й те саме, і вони не можуть служити одночасно для різних цілей. Регістри Н і L фактично майже завжди застосовують для непрямого адреси з-за наявності команд, що мають доступ до регістру М, і таких спеціальних команд, як SPHL , PCHL , XTHL і XTHG . Завдяки тому, що існує команда XCHG , для другого адреси беруть регістри D і Е, а не В і С. Регістри В і С використовують зазвичай як окремі 8-розрядні регістри для тимчасового зберігання даних.
    4. Вплив різних команд на прапори вельми непослідовно. До деяких особливо незвичайним дій відносяться наступні:
    логічні команди очищають прапор переносу;
    команди зсуву не діють на інші прапори, крім прапора переносу;
    команди завантаження, записи, пересилання, збільшують на 1 пари регістрів і зменшують на 1 пари регістрів взагалі не впливають на прапори;
    16-розрядне складання діє тільки на прапор переносу.
    5. Відсутній непряма адресація через пам'ять і індексація. Відсутність непрямої адресації через пам'ять компенсується завантаженням непрямого адреса в регістри Н і L. Дійсна непряма адресація, таким чином, є двухшаговим процесом. При бажанні завантажити чи записати в пам'ять акумулятор можна завантажити непрямий адреса в регістри В і С або D і Е. Відсутність індексної адресації компенсується додаванням пари регістрів за допомогою команди DAD . Ця команда додає пару регістрів до Н і L. Таким чином, індексація потребує декількох кроків:
    завантажити індекс у пару регістрів,
    завантажити базовий адреса в іншу пару (однієї з пар регістрів повинні бути Н і L), в) використовуючи команду DAD , скласти дві пари і г) використовувати суму як непрямий адреса (за допомогою звернення до регістру М). Індексація в 8080 і 8085 - довгий і незручний процес.

    6. Ні прапора переповнення при отриманні доповнення до двох, так що треба визначати таке переповнення програмним шляхом. З цього випливає, що важко працювати з числами із знаком.
    7. Багато звичайні команди відсутні, але можуть бути легко змодельовані за допомогою реєстрових команд. Прикладами є очищення акумулятора (з використанням SUB A або XRA A ), логічний зсув акумулятора вліво (за допомогою ADD A ), очищення прапора переносу ( ANA A або ORA A ) та перевірка акумулятора ( ANA A або ORA A ). Команда ANA A і ORA A очищають прапор переносу і встановлюють інші прапори відповідно до вмістом акумулятора. Причому завантаження регістра не діє на прапори.
    8. Ні відносних переходів. Фактично, єдиною командою переходу, яка не вимагає абсолютної адреси, є PCHL , за якою завантажується лічильник команд з регістрів Н і L і, таким чином, проводиться непрямий перехід.
    9. Є два окремих набору команд збільшення та зменшення на 1. Команди DCR і INR застосовуються до 8-розрядних регістрів і діють на всі прапори, за винятком прапора переносу. Команди DCX і INX застосовуються до 16-різним парам регістрів і взагалі не діють на прапори. Можна використовувати 16-розрядні пари регістрів як звичайні лічильники, але єдиним способом перевірки пари на 0 є використання команди логічне АБО до двох регістрів разом з акумулятором.
    10. Ні арифметичних або логічних зрушень. Єдиними командами зрушення є команди циклічного зсуву з прапором перенесення або без нього. Інші зрушення можуть бути змодельовані за допомогою команд циклічного зсуву ( RRC, RLC, RAR і RAL ) і команд складання ( ADD A, ADC A і DAD H ). Прапор перенесення може бути встановлений за допомогою STC , а очищений за допомогою ANA A (або ORA A ).
    11. Акумулятор є єдиним регістром, який може бути зміщений, інвертований або використаний для вводу або виводу. Єдиними командами, які безпосередньо оперують з регістрами загального призначення, є команди MOV (пересилання вмісту в інший регістр або з іншого регістру), MVI (завантаження безпосереднього операнда), DCR (зменшує на 1) і INR (збільшення на 1). Ці команди можуть оперувати також з регістром М, тобто байтом з пам'яті, що адресуються через регістри Н і L.
    12. В стек або з стека можуть бути передані тільки пари регістрів. Однією з таких пар є слово стану процесора ( PSW ), яке містить акумулятор (старший байт) і прапори (молодший байт). Команди CALL і RETURN передають адреса в стек або з нього.
    13. У мікропроцесорі 8080 відсутня читається прапор системи переривань. Це створює труднощі в тому випадку, коли початковий стан системи переривань має бути відновлено після виконання секції команд, яка повинна виконуватися при закритих переривання. Для вирішення цієї проблеми можна копію стану переривань зберігати в ОЗУ. З іншого боку, 8085 має читається прапор дозволу переривань.
    14. У мікропроцесорах 8080 і 8085 прийняті наступні загальні угоди:
     Під час запису всіх 16-розрядних адрес молодший байт записується перший (тобто за меншим адресою). Порядок байтів в адресах той же, що і в мікропроцесорі Z80 і 6502, але є зворотним порядком байтів, прийнятому в мікропроцесорах 6800 та 6809.
     Покажчик стека містить молодший адресу, дійсно зайнятий в стек. Ця угода також прийнято в мікропроцесорах Z80 і 6809, але явно протилежно прийнятому 6502 і 6800 (наступний доступний адресу). Згідно з усіма командами 8080 і 8085 дані в стек записуються з попередніми зменшенням на 1 (вирахуванням перед записом байти 1 з покажчика стека) і завантажуються з стека з подальшим збільшенням на 1 (додаванням після завантаження байти 1 до вказівником стека).
     Прапор дозволу переривань (тільки в 8085), що дорівнює 1, дозволяє переривання, а 0 - забороняє їх. Така ж угода прийнята і в Z80, але воно назад до прийнятого в 6502, 6800 і 6809.
     Представлена частина першого розділу розглянула особливості процесорів, вона так і називається - короткий огляд для досвідчених програмістів. Тепер будемо розглядати далі, причому не вказуючи конкретно команди, а описуючи поняття і особливості операцій представленої на огляд першого розділу даної книги.

    ЗАВАНТАЖЕННЯ РЕГІСТР З ПАМ'ЯТІ
    У мікропроцесорах 8080 і 8085 передбачено чотири способи адресації, якими можна користуватися при завантаженні регістрів з пам'яті: пряма (з пам'яті з конкретною адресою), безпосередня (з конкретним значенням), непряма (з адреси, розміщеного в парі регістрів) і стекові (з вершини стека).

    ЗАПАМ'ЯТОВУВАННЯ реєстрів в ПАМ'ЯТІ
    Для запам'ятовування регістрів в пам'яті існують три способи адресації: пряма (на згадку з конкретною адресою), непряма (на згадку з адресою, який знаходиться в парі регістрів) і стекові (в вершину стека).

    Запам'ятовування даних У ОЗУ
    Початкові значення комірок ОЗУ задаються або через акумулятор, або прямо чи побічно з використанням регістрів Н і L.

    арифметичні та логічні операції
    Для більшості арифметичних і логічних операцій (додавання, віднімання, логічне І, логічне АБО, виключає Або і порівняння) одним з операндів є акумулятор, а другий 8-розрядний регістр або байт даних, заданий безпосередньо в команді. Результат (якщо він існує) поміщається в акумулятор. Якщо використовується регістр М, то процесор отримує операнд з пам'яті за адресою, що міститься в регістрах Н і L.

    РОБОТА З РОЗРЯДУ
    Програміст може встановити, очистити, отримати зворотний код (доповнення до 1) або перевірити розряди, використовуючи логічні операції з відповідними масками. Команди зсуву та отримання зворотного коду можуть оперувати тільки з акумулятором, але в той же час для виконання невеликого числа зрушень можуть використовуватися арифметичні та логічні команди. Можливі такі операції з окремими розрядами акумулятора:
    встановити за допомогою операції логічне АБО з одиницями у відповідних позиціях;
    очистити за допомогою операції логічне І з нулями у відповідних позиціях;
    Інвертувати (змінити на протилежне значення) за допомогою операції виключає Або з одиницями у відповідних позиціях;
    перевірити (на всі нулі в перевіряються розрядах) за допомогою операції логічне І з одиницями у відповідних позиціях.

    ПРИЙНЯТТЯ РІШЕНЬ
    Процедури прийняття рішень можуть бути класифіковані в такий спосіб
    перехід, якщо розряд встановлений (логічна одиниця) або очищений (логічний нуль);
    перехід, якщо два значення рівні або не рівні;
    перехід, якщо одне значення більше іншого або менше його.
    Наявність процедур першого класу дозволяє процесору реагувати на значення прапорів, перемикачів, лінії стану або інших двійкових (включено-виключено) сигналів. Наявність процедур другого класу дозволяє процесору визначити, чи має вводиться величина або результат певне значення (наприклад, чи введений певний символ команди або термінатор, або чи результат дорівнює нулю). Наявність процедур третього класу дозволяє процесору визначити, чи перевищує значення деякий числовий поріг або нижче його (наприклад, правильне або помилкове значення, вище або нижче попереджувального рівня або заданої точки).

    ОРГАНІЗАЦІЯ циклів
    Найпростіший спосіб виконання циклу (тобто повторення послідовності команд) в мікропроцесорі 8080 або 8085 полягає в наступному:
    Завантажити у регістр загального призначення число, яке вказує, скільки разів повинна бути виконана послідовність команд:
    Виконати команди;
    зменшити заданий регістр на 1;
    повернутися до кроку 2, якщо результат кроку 3 не дорівнює 0.

    обробки масивів
    Елемент масиву найпростіше вибрати, помістивши його адресу в регістри Н і L. У цьому випадку можна:
     працювати з елементом, звертаючись до нього як до регістру М;
     вибирати наступний елемент масиву (за наступним більшого адресою);
     використовуючи команду INX для збільшення значення пари регістрів Н і L, або попереднього елемента (за попереднім меншому адресою), використовуючи DCX для зменшення Н і L.
     вибирати будь-який довільний елемент, завантаживши в іншу пару регІстрія зміщення елемента щодо адреси, що міститься в НL, і використовуючи команду DAD (16-ковий складання).
    В ТАБЛИЦІ
     як у процесорах 8080 і 8085 відсутня індексація, то адреса, необхідний для пошуку в таблиці, повинен обчислюватися явно з використанням команди DAD . Як і під час роботи з масивами, пошук в таблиці є простим, якщо таблиця містить 8-розрядні елементи даних; складніше, коли таблиця містить більш довгі елементи або ж адреси. У цьому випадку можуть бути корисні команди XCHG , PCHL і SPHL , але вони вимагають, щоб програміст поміщав результати у визначені пари регістрів.

    РОБОТА з символами
    Найпростіший спосіб роботи з символами в процесорах 8080 і 8085 полягає у поводженні з ними як з 8-розрядними числами без знака. Букви та цифри становлять упорядковану послідовність набору символів у кодах ASCII (наприклад, представлення літери А в коді ASCII на одиницю менше, ніж подання букви В). Додаток В) в кінці книги містить повний набір символів ASCII .

    ПЕРЕТВОРЕННЯ КОДІВ
    Дані можуть бути перетворені з одного коду в інший за допомогою арифметичних або логічних операцій (якщо співвідношення кодів просте) або за допомогою пошуку в таблицях (якщо це співвідношення складне).

    Арифметичні операції ПІДВИЩЕНОЇ ТОЧНОСТІ
    Арифметичні операції підвищеної точності вимагають ряду 8-розрядних операцій. Необхідно виконувати наступне:
     спочатку очистити прапор переносу, тому що ніколи не відбувається переносу в молодші байти або позики з них;
     використовувати команди складання з перенесенням ( ADC ) або віднімання з позику ( SBB ) для виконання 8-розрядних операцій, які включають перенесення або позику з попередньої операції.
    Множення і ділення
    Існує багато способів виконання множення. Один з підходів полягає в заміні множення невеликих цілих чисел на певну коротку послідовність додавань і зрушень вліво. Поділ на число, що є ступенем 2, можна виконати за допомогою низки логічних зрушень вправо. Як розмножаться або діляться числа зі знаком, то необхідно звертати увагу на відділення знака від абсолютної величини. Логіка зрушення повинні бути замінені на арифметичні, що зберігають знаковий розряд.

    обробки списків
    Еcлі елементи списків зберігаються в пам'яті в послідовних адреси, то такі списки можна обробляти так само, як масиви. Якщо два масиви утворюють черги або ланцюжка, то стає очевидною обмеженість даного набору команд, що виражається в наступному:
     не передбачена індексація;
     непряма адресація можлива тільки через пари регістрів;
     адреса в парах регістрів можуть бути використані тільки для одержання або записи 8-розрядних даних.

    ПОШИРЕНА СТРУКТУРИ ДАНИХ
    Більш поширені структури даних можна обробляти за допомогою процедур, призначених для роботи з масивами, таблицями та списками. До поширених структурам даних відносяться черзі або зв'язані списки, а також стеки.

    СПОСОБИ ПЕРЕДАЧІ ПАРАМЕТРІВ
    Найбільш загальними способами передачі параметрів у мікропроцесорах 8080 і 8085 є наступні:
    У регістрах. Доступними є сім 8-розрядних регістрів загального призначення (A, B, C, D, E, H та L), при цьому три пари регістрів (B, D і H) можуть служити для передачі адрес.
     У заданій області пам'яті. Для реалізації цього підходу найпростіше помістити базовий адреса заданої області в регістри H і L. Зухвала програма до передачі управління підпрограмі повинна зберігання інформації в пам'яті і завантажити базовий адреса в регістри H і L.
    У пам'яті програми безпосередньо за викликом підпрограми.
    У стеку.
    ПРОСТИЙ введення - виведення
    Простий введення - висновок можна виконати, використовуючи або 8-розрядні адреси пристроїв, або 16-розрядні адреси пам'яті. Переваги адрес пристроїв полягають у тому, що вони коротше і використовують окремий адресний простір. Недолік полягає в тому, що команди IN і OUT містять адреси пристроїв і допускають лише пряму адресацію, тобто команди IN і OUT вимагають, щоб були визначені адреси; в цьому випадку відсутній прямий спосіб передачі адрес пристроїв введення - виведення у вигляді параметрів, так щоб одна програма введення - виведення підтримувала багато пристроїв. З іншого боку, якщо порти введення - виведення займають адреси пам'яті, то за допомогою будь-яких команд, які звертаються до пам'яті, може виконуватися також введення - виведення. Проблеми, пов'язані з цим підходом, полягають у його нестандартність, що створює труднощі в тих випадках, коли треба відрізнити передачі введення - виведення від передач в пам'яті, а також коли потрібно, щоб деяка область пам'яті була зарезервована для пристроїв введення - виведення.

    СТАН ТА УПРАВЛІННЯ
    Тони стану і управління можуть оброблятися так само, як будь-які інші дані. Єдина особливість полягає в тому, що процесор не може читати з порту висновку; якщо необхідно знати поточний стан порту висновку, необхідно зберігати копію даних в оперативній пам'яті.

    Периферійні Інтегральні мікросхеми
    У системах 8080 і 8085 найбільш загальними периферійними інтегральними мікросхемами є послідовний інтерфейс 8251, програмований таймер 8253 і паралельні інтерфейс 8255. Всі ці пристрої можуть виконувати безліч функцій, більшість з яких подібно до функцій самого мікропроцесор. Звичайно, периферійні інтегральні мікросхеми виконують менше різних функцій, ніж процесор, і діапазон цих функцій суттєво вже. У цій частині книги описується пристрій 8255.

    НАПИСАННЯ ПРОГРАМ, ЩО ПРАЦЮЮТЬ по перериванню
    У більшості систем переривання 8080 і 8085 використовуються команди RST і вхідні сигнали, які передають управління за певними адресами пам'яті. Всі команди RST і вхідні сигнали зберігають старе значення програмного лічильника у вершині стека, але не зберігають автоматично інші регістри. Слово стану процесора ( PSW ) містить акумулятор (старший байт) і прапори (молодший байт). Переривання повинні бути дозволені явно за допомогою команди EI безпосередньо перед командою RET , що закінчує обслуговує програму. Команда EI затримує дійсний дозвіл переривань на один такт команди під уникнення зайвої запису адреси повернення в стек.

    збільшення швидкодії ПРОГРАМ
    Прискорити виконання можна тільки визначивши, де втрачається час. Для цього необхідно визначити, які цикли процесор виконує найбільш часто. Основний вплив на зниження витрат часу часто виконуваного циклу надає лічильник числа циклів. Таким чином, важливо визначити, як часто виконуються команди, і працювати далі з циклами в порядку частоти їх виконання.
    Після того, як уточнено, які цикли виконуються найбільш часто, час їх виконання можна зменшити, використовуючи наступні правила:
     Виняток надлишкових операцій;
     Реорганізація циклу так, щоб зменшувалася кількість команд переходу;
     Використання лінійної здібності команд замість підпрограм;
     Використання для тимчасового зберігання стек замість певних адрес пам'яті;
     Призначення регістрів таким чином, щоб отримати максимальний виграш від спеціалізованих команд, як LHLD, SHLD, XCHG, XTHL і PCHL ;
     Скрізь, де можливо, для роботи з 16-розрядними даними використання 16-разряднвх команд;
     Використання команд MVI M, INR M і DCR M для роботи з даними пам'яті;
     Використання команд MOV, MVI, INR, DCR, INX, DCX, SHLD, LHLD, XCHG, XTHL, PUSH, POP, PCHL і SPHL для роботи з даними в регістрах;
     Використання RST, PCHL або RET як коротких команд переходу;
     Організація низки умовних переходів таким чином, щоб була мінімізація середнього часу виконання;
     Перевірка на умови, за яких послідовність команд не виконується, і обхід цієї послідовності для випадку виконання умов.
    Звичайний шлях до зниження часу виконання полягає в заміні довгих послідовностей команд таблицями. Якщо не передбачені спеціальні виходи або не введені елементи логіки програми, то за допомогою окремого перегляду таблиці можуть виконуватися ті ж операції, що і за допомогою послідовності команд. Ціною цього є необхідність у витратах на додаткову пам'ять, але при її наявності це може бути виправдане. Якщо ємність пам'яті достатня, то пошук в таблиці може бути раціональним підходом, навіть якщо багато записів її однакові. Крім того, що прискорюється робота, пошук в таблиці зазвичай легше програмувати і простіше змінювати.

    зменшення довжини ПРОГРАМИ
    Довжину програми можна значно зменшити, виділивши загальні послідовності команд і замінивши їх підпрограмами. У результаті виходить одна копія цих команд замість декількох копій.
    Пошук по таблиці зазвичай вимагає більшого об'єму пам'яті, але знижує час виконання.


    Розділ 2. РЕАЛІЗАЦІЯ ДОДАТКОВИХ КОМАНД І СПОСОБОВ АДРСАЦІІ
    У цьому розділі показано, як реалізувати команди і способи адресації, які не входять в набір команд 8080 або 8085. Звичайно, немає вибору команд, що включав би всі можливі комбінації. Розробник повинен вибирати набір команд, виходячи з того, скільки кодів операцій можливе, наскільки легко можуть бути виконані додаткові комбінації і як часто вони можуть використовуватися. Опис додаткових команд і способів адресації не означає, що основний набір команд є неповним або ж погано розробленим.

    РОЗШИРЕННЯ НАБОРУ КОМАНД
    Команди поділяються на такі групи: арифметичні, логічні, передачі даних, переходу, перепустки, виклику підпрограми, повернення з підпрограми і змішані. Типи операндів для кожного типу команд обговорюються у відповідному порядку: байт, слово, десятковий операнд, розряд, число, складовою операнд. Під час обговорення способів адресації використовується наступний порядок: пряма, непряма, безпосередня, індексний, регістрова, автоіндексірованіе з попереднім збільшенням адреси, автоіндексірованіе з попередніми зменшенням адреси, автоіндексірованіе з наступним зменшенням адреси, непряма з попередніми індексуванням, і непряма з подальшому індексуванням.

    Арифметичні КОМАНДИ
    В цю групу включені наступні команди: додавання, додавання з прапором перенесення, віднімання, віднімання при перестановці операндів, віднімання з прапором переносу (позика), збільшення на 1, зменшення на 1, множення, ділення, порівняння, отримання доповнення до двох (негативного числа) і розширення. Для зручності ті команди, приналежність яких до конкретної категорії неясна, повторюються у всіх категоріях, до яких вони могли б бути віднесені.

    ЛОГІЧНИХ КОМАНДИ
    Ця група включає наступні команди: логічне І, логічне АБО, логічне виключає Або, логічне НЕ (доповнення), зсув, циклічний зсув та перевірку. Вона включає також ті арифметичні команди (такі, як складання з акумулятора з самим собою), які виконують логічні функції.

    КОМАНДИ ПЕРЕДАЧІ ДАНИХ
    Ця група включає команди завантаження, запам'ятовування, пересилання, обміну, введення, виведення, очищення та установки. Крім того, вона включає арифметичні команди (такі як віднімання акумулятора з самого себе), які заносять певне значення або вміст будь-якого регістра в акумулятора або інший регістр призначення, не змінюючи при цьому даних.

    КОМАНДИ ПЕРЕХОДУ
    Ця група включає наступні види переходів:
    1. Команди безумовного переходу
    Перейти побічно;
    Іти до індексу, припускаючи, що базовий адреса таблиці адрес знаходиться в регістрах Н і L, а індекс в акумуляторі;
    Перейти і зв'язати, тобто передати управління за адресою DEST , зберігши поточний стан лічильника команд в регістрах Н і L.
    2. Команди умовного переходу
    Перейти при рівності нулю;
    Перейти при нерівність нуля;
    Перейти, якщо значення рівні;
    Перейти, якщо значення не рівні;
    Перейти, якщо значення позитивне;
    Перейти, якщо значення негативне;
    Переходи з урахуванням знака;
    Перейти, якщо більше (без урахування знака), тобто якщо операнди не рівні і при порівнянні не потрібно позики;
    Перейти, якщо значення не більше (без урахування знака), тобто якщо порівнювані операнди рівні або при їх порівнянні потрібно позику;
    Перейти, якщо значення менше (без урахування знака), тобто якщо порівняння без знака вимагає позики;
    Перейти, якщо значення не менше (без урахування знака), тобто якщо порівняння без знака не вимагає позики.

    КОМАНДИ ПРОПУСКУ
    У мікропроцесорах 8080 або 8085 команда пропуску може бути виконана за допомогою команди переходу з відповідному адресою призначення. Ця адреса призначення повинен спрямовувати на команду, наступну після тієї, яка стоїть безпосередньо за командою переходу. Дійсне число пропускаються байтів буде змінюватися, так як команди мікропроцесорів 8080 і 8085 можуть мати довжину 1-3 байти.

    КОМАНДИ виклик підпрограми І ПОВЕРНЕННЯ З підпрограм
     Команда безумовного дзвінка.
    У мікропроцесорах 8080 або 8085 непрямий виклик може бути виконаний за допомогою звернення до проміжної підпрограмі, яка переходить на побічно спричинюється підпрограму.
    Команда умовного дзвінка.
     мікропроцесорі 8080 або 8085 умовний виклик підпрограми може бути виконаний за допомогою послідовностей команд для умовного переходу. Єдина відмінність полягає в тому, що команди переходу до дійсним адресами призначення повинні бути замінені на команди виклику підпрограм.
    Команди повернення з підпрограм поділяються на:
    Команди безумовного повернення
    Команди умовного повернення
    Команди повернення з пропуском
    Команди повернення після переривання

    ЗМІШАНІ КОМАНДИ
    цю категорію входять наступні команди: ні операції, запис у стек, отримання з стека, зупинка, очікування, захоплення (програмне переривання) та інші, що не потрапили в опис раніше категорії команд.

    ДОДАТКОВІ спосіб адресації
    Непряма адресація. У процесорах 8080 і 8085 непряму адресацію можна виконати за допомогою завантаження непрямих адрес в регістри Н і L, використовуючи команду LHLD . Після цього звернення до регістру М є еквівалентом непрямої операції. Таким чином, цей процес завжди включає два кроки. Крім того, можна використовувати також пари регістрів В і D в командах LDAX і STAX.
     Індексний адресація. Індексний адресацію можна виконати, додаючи індекс за допомогою команди DAD до бази. Зрозуміло, що програмне складання вимагає додаткового часу виконання.
     Предувеліченіе. При предувеліченіі адресний регістр перед використанням автоматично збільшується. У процесорі 8080 або 8085 предувеліченіе може бути реалізовано за допомогою збільшення пари регістрів перед її використанням як адреси.
     Послеувеліченіе. При послеувеліченіі адресний регістр після використання в команді автоматично збільшується. У процесорі 8080 або 8085 послеувеліченіе може бути реалізовано за допомогою збільшення пари регістрів після її використання в якості адреси.
     Предуменьшеніе. При предуменьшеніі адресний регістр перед використанням автоматично зменшується. У процесорі 8080 ілі8085 предуменьшеніе може бути виконано за допомогою зменшення пари регістрів перед її використанням як адреси.
     Послеуменьшеніе. При послеуменьшеніі адресний регістр після використання автоматично зменшується. У процесорі 8080 або 8085 Послеуменьшеніе може бути виконано за допомогою зменшення пари регістрів після використання її як адресу.
     Непряма адресація з попередніми індексуванням (прединдексірованіе). При прединдексірованіі процесор повинен спочатку обчислити індексний адресу, а потім використовувати цю адресу побічно. Так як таблиця, для якої проводиться індексування, повинна містити двухбайтние непрямі адреси, індексування має супроводжуватися множенням на 2.
     Непряма адресація з подальшою індексацією (послеіндексірованіе). При послеіндексірованіі процесор повинен спочатку отримати непрямий адресу, а потім використовувати його як базу для індексування.

    Розділ 3. Поширена помилка
    ПРОГРАМУВАННЯ
    У цій главі описуються поширені помилки в програмах на мові асемблера 8080 і 8085. Заключний розділ цього розділу присвячений опису часто зустрічаються помилок в драйверах вводу-виводу і програмах обслуговування переривань. Ця глава переслідує наступні цілі:
     Попередити програміста?? можливих неприємних місцях і джерела помилок,
     Описати ймовірні джерела помилок програмування,
     Підкреслити ті методи і застереження, які обговорювалися в розділах 1 і 2,
     Інформувати програмістів, що займаються підтримкою математичного забезпечення, про можливі місця помилок і неправильних тлумачень,
     Дати починаючому програмісту відправну точку у складному процесі виявлення та виправлення помилок.

    Звичайно, ніякої список помилок не може бути повним, тим не менше, дане в цьому розділі опис допоможе читачеві налагоджувати більшість програм.

    КЛАСИФІКАЦІЯ ПОМИЛОК
    ПРОГРАМУВАННЯ
    Розглянуті помилки програмування для мікропроцесорів 8080 і 8085 можуть бути розділені на такі категорії:
    Перестановка операндів чи частин операндів. До типових помилок цього роду відносяться перестановка операндів, що вказують на джерело і призначення в командах пересилання, перевертиваніе формату, в якому запам'ятовуються 16-розрядні значення, зміна напрямку при віднімання та порівняннях.
    Неправильне використання прапорів. Типові помилки наступні:
     використання не того прапора, який у даному конкретному випадку має перевірятися (як, наприклад, прапора знака замість прапора переносу),
    умовний перехід після команд, які не впливають на даний прапор,
    інвертірованіе умов переходу (особливо при використанні прапора нуля),
    неправильний умовний перехід у випадках рівності та випадкове зміна прапора перед умовним переходом.
    Змішування регістрів і пар регістрів. Типова помилка полягає в роботі з регістром (В, D або Н) замість пари регістрів з аналогічним ім'ям.
    Змішування адрес і даних. До типових помилок відносяться використання безпосередньої адресації замість прямої адресації або навпаки, змішування регістрів з комірками пам'яті, що адресуються через пари регістрів.
    Використання невірних форматів. Типові помилки полягають у використанні формату BCD (десяткового) замість двійкового або навпаки і використання двійкового та шістнадцятирічного коду замість ASCII.
    Неправильна робота з масивами. Звичайна помилка полягає у виході за межі масивів.
    Неврахування неявних ефектів. До типових помилок відносяться використання акумулятора, пари регістрів, покажчика стека, прапорів або комірок пам'яті без урахування впливу беруть участь у роботі команд. Більшість помилок викликаються командами, які дають непередбачені, неявні або непрямі результати.
    Помилки при завданні необхідних початкових умов для окремих програм або мікро-ЕОМ в цілому. Більшість програм вимагає ініціалізації лічильників, непрямих адрес, регістрів, прапорів та осередків для тимчасового зберігання. Мікро-ЕОМ у цілому потребує ініціалізації всіх загальних осередків в ОЗП (особливо відзначимо непрямі адреси та лічильники).
    Неправильна організація програми. До типових помилок відносяться обхід або повторення секцій ініціалізації, помилкова зміна регістрів з адресами або лічильниками і втрата проміжних або остаточних результатів.
         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status