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

     

     

     

     

     

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

     

    Інформатика, програмування

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

    ПРЕДМЕТ: Програмування Мікро-ЕОМ

    Студенти: Терехов Д.А. Терехова О.Н.

    МОСКОВСЬКИЙ ДЕРЖАВНИЙ ІНСТИТУТ радіотехніки, електроніки і АВТОМАТИКИ (ТЕХНІЧНИЙ УНІВЕРСИТЕТ)

    Москва 1997 р.

    Глава 1. Обробки масивів

    Елемент масиву найпростіше вибрати, помістивши його адресу в регістри Н і 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, можна виконати за допомогою низки логічних зрушень вправо. Як розмножаться або діляться числа зі знаком, то необхідно звертати увагу на відділення знака від абсолютної величини. Логіка зрушення повинні бути замінені на арифметичні, зберігають знаковий розряд.

    ОБРОБКА Списку

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

    не передбачена індексація;

    непряма адресація можлива тільки через пари регістрів;

    адреса в парах регістрів можуть бути використані тільки для одержання або записи 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, множення, ділення, порівняння, отримання додатки до двох (негативного числа) і розширення. Для зручності ті команди, приналежність яких до конкретної категорії неясна, повторюються у всіх категоріях, до яких вони могли б бути віднесені.

    ЛОГІЧНИХ КОМАНДИ

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

    КОМАНДИ ПЕРЕДАЧІ ДАНИХ

    Ця група включає команди завантаження, запам'ятовування, пересилання, обміну, введення, виведення, очищення та установки. Крім того, вона включає арифметичні команди (такі як віднімання акумулятора з самого себе), які заносять певне значення або вміст будь-якого регістра в акумулятора або інший регістр призначення, не змінюючи при цьому даних.

    КОМАНДИ ПЕРЕХОДУ

    Ця група включає наступні види переходів:

    Команди безумовного переходу

    Перейти побічно;

    Іти до індексу, припускаючи, що базовий адреса таблиці адрес знаходиться в регістрах Н і L, а індекс в акумуляторі;

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

    Команди умовного переходу

    Перейти при рівності нулю;

    Перейти при нерівність нуля;

    Перейти, якщо значення рівні;

    Перейти, якщо значення не рівні;

    Перейти, якщо позитивне значення;

    Перейти, якщо від'ємне значення;

    Переходи з урахуванням знака;

    Перейти, якщо більше (без урахування знака), тобто якщо операнди не рівні і при порівняння не потрібно позики;

    Перейти, якщо значення не більше (без урахування знака), тобто якщо порівнювані операнди рівні або при їх порівнянні потрібно позику;

    Перейти, якщо значення менше (без урахування знака), тобто якщо порівняння без знака вимагає позики;

    Перейти, якщо значення не менше (без урахування знака), тобто якщо порівняння без знака не вимагає позики.

    КОМАНДИ ПРОПУСКУ

    В мікропроцесорах 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.

    Неправильна робота з масивами. Звичайна помилка полягає у виході за межі масивів.

    Неврахування неявних ефектів. До типових помилок відносяться використання акумулятора, пари регістрів, покажчика стека, прапорів або комірок пам'яті без урахування впливу беруть участь у роботі команд. Більшість помилок викликаються командами, які дають непередбачені, неявні або непрямі результати.

    Помилки при завданні необхідних початкових умов для окремих програм або мікро-ЕОМ в цілому. Більшість програм вимагає ініціалізації лічильників, непрямих адрес, регістрів, прапорів та осередків для тимчасового зберігання. Мікро-ЕОМ у цілому потребує ініціалізації всіх загальних осередків в ОЗП (особливо відзначимо непрямі адреси та лічильники).

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

    Звичайним джерелом помилок, які тут не розглядаються, є конфлікт між програмою користувачів та системними програмами. Простим прикладом такого конфлікту є спроба зберігати дані програми користувача в комірках пам'яті системної програми. У цьому випадку всякий раз, коли виконується системна програма, змінюються дані, які потрібні для програми користувача.

    Більш складні джерела конфліктів пов'язані з системою переривань, портами вводу-виводу, стеком та прапорами. Системні програми в кінцевому рахунку повинні експлуатувати ті ж самі ресурси, що і програми користувача. При цьому зазвичай в системних програмах передбачається збереження і відновлення програмного середовища, в якій працюють для користувача програми, але це часто призводить до важковловимий або несподіваних наслідків. Зробити таку операційну систему, яка була б абсолютно прозорою для користувача - це завдання, порівнянна з виробленням правил і законів або зведень про податки, які не мали б лазівок або побічних ефектів.

    розпізнання ПОМИЛОК Асемблер

    Більшість асемблером негайно розпізнає найбільш поширені помилки, такі як:

    Невизначений код операції (звичайно це неправильне написання або відсутність двокрапки або мітки);

    Невизначена ім'я (часто це неправильне написання або відсутність певного імені);

    Невірний символ (наприклад, 2 у двійковому числі або В в десятковому числі);

    Неправильне значення (звичайно це число, яке дуже велике для 8 або 16 розрядів);

    Відсутній операнд;

    Подвійне визначення (одному і тому ж імені присвоюються два різних значення);

    Неправильна мітка (наприклад, мітка, визначені псевдоопераціі, що не допускає мітки);

    Відсутність мітки (наприклад, при псевдоопераціі EQU, для якої потрібно мітка).

    Ці помилки неприємні, але вони легко поправні. Єдина складність виникає тоді, коли помилка (така, як відсутність крапки з комою у строки з коментарем) призводить асемблер в "замішання", результатом чого є ряд безглуздих повідомлень про помилки.

    Існує, однак, багато простих помилок, які асемблер не може розпізнати. Програмістові слід мати на увазі, що його програма може містити такі помилки, навіть якщо асемблер і не повідомив про них. Типові наступні приклади.

    Пропущені рядки.

    Пропущені визначення.

    Помилки в написанні, коли запис сама по собі допустима.

    Позначення команд як коментарів.

    Якщо в команді, яка працює з парою регістрів, задається одинарний регістр.

    Якщо вводиться неправильна цифра, така як Х в десятковому або шістнадцятковому числі або 7 в двійковому числі.

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

    ПОШИРЕНА ПОМИЛКИ в драйверах ВВЕДЕННЯ - ВИВЕДЕННЯ

    Так як більшість помилок в драйверах введення-виведення пов'язано як з апаратурним, так і з програмним забезпеченням, вони важко піддаються класифікації. Наведемо деякі можливі випадки.

    Змішування портів введення і виводу.

    Спроба виконати операції, які фізично неможливі.

    Втрачені з виду неявних ефектів апаратури.

    Читання або запис без перевірки стану.

    Ігнорування відмінності між введенням і висновком.

    Помилка при збереженні копії виведених даних.

    Читання даних до того, як вони стабілізуються, або під час їх зміни.

    Відсутність зміни полярності даних, які передаються до пристрою або від пристрою, що працює з негативною логікою.

    Змішування дійсних портів вводу-виводу з внутрішніми регістрами інтегральних схем вводу-виводу.

    Неправильне використання двонаправлених портів.

    Відсутність очищення стану після виконання команди введення-виведення.

    ПОШИРЕНА Помилки в програмі ПЕРЕРИВАННЯ

    Багато помилок, пов'язані з переривань, залежать як від апаратного, так і програмного забезпечення. Найпоширенішими помилками є наступні.

    Відсутність дозволу переривань.

    Відсутність збереження регістрів.

    Збереження або відновлення регістрів в неправильному порядку.

    Дозвіл переривань до ініціалізації пріоритетів та інших параметрів системи переривань.

    Неврахування того, що реакція на переривання включає збереження лічильника команд у вершині стека.

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

    Відсутність дозволу переривань після послідовності команд, яка повинна виконуватися без переривань.

    Відсутність очищення сигналу, що викликає переривання.

    Помилка в спілкуванні з основною програмою.

    Відсутність збереження і відновлення пріоритетів.

    Відсутність дозволу переривань від додаткових апаратурних входів, яке виконується за допомогою очищення розрядів масок в регістрі I.

    Неправильне використання розрядів дозволу переривань в командах SIM.

    ВСТУП У ПРОГРАМНИЙ РОЗДІЛ

    Програмний розділ містить набори підпрограм мовою асемблера для мікропроцесорів 8080 і 8085. Кожній підпрограмі предпославши введення і коментарі; за кожною підпрограмою треба принаймні один приклад її використання. Введення містить наступну інформацію: призначення підпрограми, процедуру її , які використовуються регістри, час виконання, розмір пам'яті, необхідний для програми та її даних, а також спеціальні випадки, вхідні і вихідні умови.

    Кожна підпрограма зроблена настільки загальною, наскільки це можливо.

    У всіх підпрограма був використаний наступний метод передачі параметрів:

    Перший 8-розрядний параметр передається в акумуляторі, другий 8-розрядний параметр-регістрі В, а третій-в регістрі С.

    Перший 16-розрядний параметр передається в регістрах Н і L, при цьому старший байт-в регістрі Н. Другий 16-розрядний параметр передається в регістрах D і Е зі старшим байтом в D.

    Більше число параметрів передається в стеку, прямо чи опосередковано. Вважається, що вхід в підпрограму здійснюється за допомогою команди CALL, яка поміщає адреса повернення в вершину стека і, отже, вище параметрів.

    Для більшості коротких підпрограм було визначено час виконання.

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

    Наводяться наступні підпрограми:

    Перетворення кодів

    Перетворення двійкових даних в код BCD;

    Перетворення даних в коді BCD в двійкові;

    Перетворення двійкових даних в шістнадцяткові в коді ASCII;

    Перетворення шістнадцятиричних даних у коді ASCII в двійкові;

    Перетворення двійкового числа в десяткове до коді ASCII;

    Перетворення десяткового числа в коді ASCII в двійкове;

    Трансляція малих літер у прописні;

    Перетворення коду символу із системи ASCII в систему EBCDIC;

    Перетворення коду символу із системи EBCDIC в систему ASCII.

    Робота з масивами і індексування

    Заповнення пам'яті;

    Пересилання блоків;

    Індексування двовимірного масиву байтів;

    Індексування двовимірного масиву слів;

    Індексування N-мірного масиву;

    Арифметичні операції

    16 - розрядне віднімання;

    16 - розрядне множення;

    16 - розрядне розподіл;

    16 - розрядне порівняння;

    Двійкове складання з підвищеною точністю;

    Двійкове віднімання з підвищеною точністю;

    Двійкове множення з підвищеною точністю;

    Двійкове поділ з підвищеною точністю;

    Двійкове порівняння з підвищеною точністю;

    Десяткове складання з підвищеною точністю;

    Десяткове віднімання з підвищеною точністю;

    Десяткове множення з підвищеною точністю;

    Десяткове поділ з підвищеною точністю;

    Десяткове порівняння з підвищеною точністю;

    Робота з розрядами та зрушення

    Установка розряду;

    Очищення розряду;

    Перевірка розряду;

    Виділення поля розрядів;

    Запис поля розрядів;

    Арифметичний зсув вправо з підвищеною точністю;

    Логічний зсув вліво з підвищеною точністю;

    Логічний зсув вправо з підвищеною точністю;

    Циклічний зсув вправо з підвищеною точністю;

    Циклічний зсув вліво з підвищеною точністю;

    Робота з рядками

    Порівняння рядків;

    Об'єднання строк;

    Пошук позиції підрядка;

    Копіювання підрядка з рядка;

    Видалення підрядка з рядка;

    Вставлення рядка в рядок;

    Операції з масивами

    Підсумовування 8-розрядного масиву;

    Підсумовування 16-розрядного масиву;

    Пошук мінімального елемента довжиною 1 байт;

    Пошук максимального елемента довжиною 1 байт;

    Двійковий пошук;

    Швидке сортування;

    Тест ОЗУ;

    Таблиця переходів;

    Введення - виведення

    Читання рядки з терміналу;

    Запис рядка на пристрій виводу;

    Перевірка та генерація 16-розрядного коду контролю за надмірності;

    Диспетчер таблиці пристроїв введення - висновку;

    Ініціалізація портів вводу - виводу;

    Затримка в мілісекундах;

    Переривання

    Небуферізованний введення - висновок про перериваннях з використанням програмованого інтерфейсу зв'язку 8251;

    Небуферізованний введення - висновок про перериваннях з використанням програмованого паралельного інтерфейсу 8255;

    буферізованние введення - висновок про перериваннях з використанням програмованого інтерфейсу зв'язку 8251;

    Годинник реального часу і календар

    Арифметичні ОПЕРАЦІЇ

    Шестнадцатіразрядное віднімання

    Віднімаються два 16-розрядних числа. При цьому прапор переносу діє як позику.

    Процедура. Просто з зменшуваного віднімається віднімається по одному байту за один раз, починаючи з молодших байтів. При відніманні старших байтів враховується позику. При відніманні старших байтів встановлюються прапори.

    Шестнадцатіразрядное множення

    множаться два 16-розрядних операнда і повертається молодше за значенням слово (16-розрядне) твори.

    Процедура. Використовується звичайний механізм складання і зсувів, при якому множене додається до часткового твору кожного разу, коли в множнику знаходиться одиничний розряд. Для правильного відносного розташування операндів і твори в програмі 15 разів здійснюється зсув вліво множника і проміжного твору (тобто на число розрядів у множнику мінус один). При цьому старший (16-й) розряд твори втрачається.

    Шестнадцатіразрядное поділ

    Діляться два 16-розрядних операнда і повертається приватне і залишок. Є дві вхідні точки: SDIV16 ділить два 16-розрядних операнда зі знаками, у той час як USDIV16 ділить два 16-розрядних операнда без знаків. При поділі на 0 прапор переносу встановлюється в 1, а приватне і залишок рівні 0; інакше прапор перенесення очищується.

    Процедура. Якщо операнди мають знаки, то визначається знак приватного і беруться абсолютні значення негативних операндів. Крім того, повинен зберігатися знак ділимо, так як він визначає знак залишку. Потім за допомогою алгоритму зрушень і віднімання виконується беззнакові поділ. Приватне і ділене зсуваються вліво, при цьому кожен раз, коли пробне віднімання було успішним, один розряд поміщається в приватне. Якщо операнди мали знаки, то програма має перетворити в негативне число (тобто відняти з 0) приватне або залишок, якщо тільки вони повинні бути негативними. При розподілі без помилок прапор переносу очищається, а при діленні на 0 - встановлюється. Крім того, якщо дільник дорівнює 0, то приватне і залишок є рівними 0.

    Шестнадцатіразрядное порівняння

    Порівнюються два 16-розрядних операнда і відповідним чином встановлюються прапори. Прапор нуля завжди вказує, чи були операнди рівні. Якщо операнди були беззнакові, то прапор переносу вказує, який з них більше (прапор переносу = 1, якщо віднімається більше, і 0 - в іншому випадку). Якщо операнди мають знаки, то прапор знака вказує, який з них більше (прапор знаку дорівнює 1, якщо віднімається більше, і 0 - в іншому випадку), при цьому враховується переповнення по доповнення до двох, і якщо воно відбувається, то прапор знаку інвер?? уется.

    Процедура. Спочатку перевіряється, чи може статися переповнення щодо доповнення та двох. Це можливо тільки в тому випадку, якщо знаки операндів розрізняються. Якщо переповнення щодо доповнення до двох можливо, то віднімається молодший байт віднімаємо з зменшуваного. Якщо молодші байти рівні, то встановлюються то встановлюються прапори по результату віднімання старших байтів. Якщо молодші байти не рівні, перед виходом повинен очиститься прапор нуля (за допомогою логічної операції АБО з 1, але при незмінних інших прапорах). Якщо переповнення щодо доповнення до двох може статися, то встановлюється прапор знаку по знаку зменшуваного. Це виконується за допомогою завантаження в акумулятор старшого байта зменшуваного перед встановленням прапора знака.

    Двійкове складання чисел з підвищеною точністю

    Складаються два мультибайтних двійкових числа. Числа зберігаються в пам'яті таким чином, що їх наймолодші за значенням байти займають наймолодші адреси. Сума замінює перший доданок.

    Процедура. Спочатку очищається прапор переносу, а потім складаються операнди, за байту за раз, починаючи з самих молодших за значенням байтів. Наприкінці прапор переносу відображає результат складання самих старших байтів. Довжина 0 викликає негайний вихід без складання.

    Двійкове віднімання чисел з підвищеною точністю

    Віднімаються два мультибайтних беззнакових двійкового числа. Обидва числа зберігаються в пам'яті таким чином що їх наймолодші за значенням байти займають наймолодші адреси. Різниця заміщає зменшуємо. Довжина чисел дорівнює 255 байт або менше.

    Процедура. Спочатку очищається прапор переносу, а потім обчислюються операнди, за байту за один разів, починаючи з самих молодших за значенням байтів. Наприкінці прапор переносу відображає результат віднімання найстарших байтів. Довжина 0 викликає негайний вихід без вирахування.

    Двійкове множення чисел з підвищеною точністю

    множаться два мультибайтних беззнакових двійкового числа. Обидва числа зберігаються в пам'яті таким чином що їх наймолодші за значенням байти займають наймолодші адреси. Твір заміщає множене. Довжина чисел дорівнює 255 байт або менше. Щоб зберігалася сумісність з іншими двійковими операціями підвищеної точності, повертаються тільки молодші за значенням байти твори.

    Процедура. Використовується звичайний механізм складання і зсувів, при якому множене додається до часткового твору кожного разу, коли в множнику знаходиться одиничний розряд. Проміжне твір і множене зсуваються на число розрядів в множимо плюс один; цей додатковий цикл зрушує остаточний прапор переносу в творі. Повний беззнакові проміжне твір подвійної довжини зберігається в комірках пам'яті і в множимо. Довжина 0 викликає негайний вихід без множення.

    Двійкове ділення чисел підвищеної точності

    Діляться два мультибайтних беззнакових двійкового числа. Обидва числа зберігаються в пам'яті таким чином що їх наймолодші за значенням байти займають наймолодші адреси. Приватно

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

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