- •1. Функціональні вузли логічних пристроїв
- •Состояния d- триггера
- •2. Архітектура мікропроцессора та запам'ятовувальних пристроїв.
- •4. Б.Я. Ліхтціндер «Мікропроцесори і обчислювальні пристрої в
- •4.Типова структура мп систем.
- •6. Поняття і основні функції операційної системи (ос) та програмне забезпечення.
- •Структура команд мп систем.
- •8. Прикладне програмне забезпечення
Структура команд мп систем.
Мови програмування для мікроЕОМ можна розділити на три основні рівні: машинні, алго¬рітміческіе високого рівня і асемблера.
Машинні мови знаходяться на самому ніж¬нем рівні ієрархії мов програмування і їм властивий наступний недолік. Будучи мовами цифр, вони незручні для опису обчислювальних процесів, вимагають від програмістів великих усі¬лій при написанні і налагодженні програм. Гідність машинного мови - для програмування на ньому потрібно лише знання системи команд ЕОМ, а для виконання складених таким чином програм обчислювальна машина не потребує ніякого трансляторі. Крім того, при використанні машін¬ного мови можна досягти максимальної гнучкості в реалізації технічних можливостей ЕОМ.
Алгоритмічні мови високого рівня (наприклад, ФОРТРАН, БЕЙСІК, ПЛ / М, ПАСКАЛЬ, АДА і ін.) Займають верхнє положення в ієрархії мов програмування. Будучи прі¬бліженнимі до звичної математичної нотації і в ряді випадків забезпечуючи природну форму опі¬санія обчислювальних процесів, вони досить про¬сти і зручні в програмуванні, але не завжди дозволяють в повній мірі реалізувати технічні воз¬можності ЕОМ, а результуючі машинні прог¬ Рамі, одержувані після трансляції програм з ал¬горітміческіх мов, зазвичай неефективні з точки зору обсягу або швидкодії. Недолік таких мов полягає в тому, що їх застосування пред¬полагает наявність транслятора, що представляє со¬бой складний програмний комплекс і вимагає для своєї розробки великих труднощів. Проте, внаслідок своїх незаперечних переваг алгорітмі¬ческіе мови високого рівня широко застосовуються в програмуванні для різних класів мікроЕОМ.
Мови асемблера, займаючи проміжне положення між машинними мовами і мовами ви¬сокого рівня (будучи при цьому набагато ближче до ма¬шінним мов), об'єднують в собі деякі до¬стоінства самого нижнього і самого верхнього рівнів мов програмування. Свою назву мови ас¬семблера отримали від імені програми, преобразу¬ющей програму такою мовою, в машинні коди.
Мова Асемблер, забезпечуючи можливість іс¬пользованія символічних імен в програмі і із¬бавляя програміста від стомлюючої роботи з розподілу пам'яті ЕОМ для змінних і констант, істотно полегшує працю програміста, підвищує продуктивність в порівнянні з программірова¬ніем на машинній мові. Мова Асемблер дозволяє гнучко і повно реалізувати технічні можливості ЕОМ, як і машинну мову. Транслятор програм з мови Асемблера набагато простіше і компактніше транс¬лятора програм, що вимагається для алгорітміческо¬го мови високого рівня, а результуюча машін¬ная програма на виході асемблера може бути настільки ж ефективною, як і програма, яку сра¬зу написали на машинній мові .
Кожна мова асемблера є машинно-залежним і відображає апаратурні особливості (зокрема, склад програмно-доступних регістрів) тієї мікроЕОМ, для якої він створений.
Програма, написана на мові Асемблер, со¬стоіт з послідовності пропозицій, або опера¬торов, і називається вихідною програмою або ісход¬ним модулем.
Одна з тенденцій розвитку мов программіро¬ванія - більш широке використання непроцедурних або описових мов. Описова програм¬ма констатує, який результат бажаний, що не ука¬зивая, як цього досягти. У програмі формуліруют¬ся співвідношення, а не послідовність обчислень, і, таким чином, програміст звільняється від обя¬занності розробляти кроки алгоритму і визначати їх порядок. Найбільш відомі непроцедурного язи¬кі: Візікальк, Мультіплан, Пролог.
Інший напрямок, по якому розвиваються мови програмування, використання парал¬лельних обчислень в мультипроцесорних системах. Здавалося б, що 100 процесорів повинні вирішити за¬дачу в 100 разів швидше, ніж один. Але такого прискорення можна досягти тільки тоді, коли програмне забезпечення здатне розбити задачу на багато час¬тей, які можуть вирішуватися одночасно.
У деяких мовах передбачені явні способи вказівки завдань, які могли б виконуватися паралельно. В інших мовах передбачається, що компілятор буде аналізувати і виявляти те, що піддається распараллеливанию. Одним з таких язи¬ков є мова Компел.
Серед величезного розмаїття мов программі¬рованія не існує найкращого або найгіршого. Вибір мови програмування в кожному конкретному випадку визначається цілями його предпо¬лагаемого застосування.
Є п'ять класів засобів програмування:
- Редагуйте програми,
- Транслюють про¬грамми,
- Програми-завантажувачі,
- Моделюють про¬грамми,
- Налагоджувальні програми.
Кожен з цих класів полегшує виконання деякого етапу раз¬работкі програм. Редагуйте програми об¬легчают створення вихідної програми. За допомогою транслюють програм з вихідної отримують об'¬ектную програму, т. Е. Програму на машинній мові. Завантажники переносять об'єктну програму з зовнішньої пам'яті, наприклад перфострічки, в пам'ять мікроЕОМ. Моделюють програми дозволяють перевірити значну частину об'єктної програми при відсутності мікроЕОМ. Налагодження програми полегшують налагодження об'єктної програми на мікро¬ЕВМ.
Всі ці кошти програмування діляться на крос-засоби і резидентні. Крос-засоби - це програми, які виконуються не на мікроЕОМ, для якої розробляється програмне обеспече¬ніе, а на будь-якій іншій машині. Резидентні засоби - це програми, які виконуються на процесорі, для якого розробляється про¬граммное забезпечення.
Розглянемо докладніше перераховані класи засобів програмування.
Редагуйте програми - це прог¬рамми, що полегшують створення вихідних програм. Редагує програма приймає вихідну про¬грамму, зазвичай вводиться в ЕОМ з клавіатури (іног¬да з перфострічки), і записує частину цієї програм¬ми в зовнішню пам'ять ЕОМ, наприклад на диск або магнітну стрічку.
Редагує програма виконує також спеціальні команди користувача по додаванню, виключення або заміни частин початково програми, що зберігається в зовнішній пам'яті. Редагуйте програми оперують з вихідною програмою як з текстом, абсолютно не враховуючи ті синтаксичні правила, яким має задовольняти програма.
Редагуйте програми розрізняються можливостями, які вони надають для виконання змін в програмі. Наприклад, деякі редагують програми можуть оперувати тільки з цілими рядками програми, інші - можуть додавати, виключати або замінювати в програмі довільні послідовності символів.
Транслюють програми обеспечіва¬ют отримання об'єктної програми з програми, на¬пісанной на мові високого рівня.
Важливо розрізняти мову програмування і реа¬лізацію мови. Мова програмування - це система запису, набір правил, що визначають синтаксис правильної програми. Реалізація мови - це програма, яка перетворює запис високого рівня: в послідовність машинних команд.
Є два основних види засобів реалізації мови (транслюють програм): компілятори та інтерпретатори.
Компілятори транслюють вага текст програми, написаної на мові високого рівня, в машинний код в ході одного безперервного процесу. При цьому створюється повна програма в машинних кодах, яку потім можна виконати байдужості компілятора. Зазвичай робота з компільовані мовою складається з трьох етапів: спочатку текс програми створюється за допомогою редактора текст або будь-якої іншої програми текстової обробки, потім текст компілюється, і нарешті, скомпільована програма виконується.
Інтерпретатор - це програма, що здійснює покрокову трансляцію вхідний програми з после¬дующім виконанням машинної програми, отриманої на кожному кроці трансляції. Різниця між компілятором і інтерпретатором подібна різниці між перекладачем літератури і перекладачем усного мовлення. Перекладач літератури бере всю книгу і створює новий текст на іншій мові. Перекладач усного мовлення переводить кожну фразу, як тільки вона проіз¬несена.
Для виконання інтерпретується програми ін¬терпретатор повинен знаходитися в основній пам'яті, в той час як для компільованою програми ком¬пілятор вже не потрібен.
В принципі будь-яку мову програмування може бути як інтерпретується, так і компільовані, але в більшості випадків за традицією у кожного язи¬ка є свій кращий спосіб реалізації.
Основна перевага компіляції - висока швидкість виконання готової програми, оскільки інтерпретатор повинен будувати відповідну послідовність команд в момент, коли інструкція виконується.
Інтерпретована мова неминуче мед¬леннее компилируемого. У той же час інтерпретіруе¬мий мову часто більш зручний для програміста. Він добре підходить для діалогового стилю розробки програми. Окремі частини програми можна напі¬сать, перевірити і виконати, не виходячи з інтерпре¬татора, а коли знайдена помилка, її можна виправити негайно, і при цьому немає необхідності возвра¬щаться до програми редагування тексту і потім компілювати програму знову.
Програми-завантажувачі - це програми, які переносять об'єктну програму з зовнішнього носія інформації, наприклад перфострічки або лі¬ніі зв'язку, в оперативну пам'ять мікроЕОМ.
Ця функція завантажувача повинна виконуватися на мікроЕОМ, для якої розроблено програмне забезпечення. На завантажувач можуть бути також возло¬жени функції перетворення переміщуваного варі¬анта об'єктної програми в програму в абсолют¬них адресах і встановлення зв'язків між об'єктними програмами за допомогою взаємних посилань. Пос¬ледній процес називається редагуванням зовнішніх зв'язків. В обох випадках завантажувач змінює об'ект¬ную програму на основі керуючої інформації, одержуваної загрузчиком як від мовного транслято¬ра, так і безпосередньо від програміста. Частини програми-завантажувача, що реалізують функції пере¬мещаемості і редагування зовнішніх зв'язків, можуть бути межмашинного або резидентними программа¬мі. Завантажники резидентного типу зазвичай поставляються на перфострічках або у вигляді програмованого ПЗУ.
Моделюють програми - це меж¬машінние програми, що дозволяють користувачеві налагоджувати об'єктну програму без мікроЕОМ. Крім того, що моделюють програми часто предос¬тавляют деякі види діагностичної інформації, недоступною при використанні налагоджувальної програм¬ми на мікроЕОМ, такі, як вказівку про переполне¬ніі стека або вказівку про спробу програми запі¬сать інформацію в ПЗУ. Моделююча програма під управлінням користувача моделює виполне¬ніе об'єктної програми на мікроЕОМ. Моделіру¬ющіе програми дозволяють: оперувати і виводити на дисплей вміст пам'яті моделюється мікро¬ЕВМ і регістрів мікропроцесора; встановлювати контрольні точки в програмі, в яких програма може бути припинена при досягненні некото¬рого адреси в програмі або при читанні або запису в деяку комірку пам'яті; задавати лістинг з пе¬чатью кожної команди, що належить області ад¬ресов, зазначеної при завданні режиму лістингу по ме¬ре її виконання. Моделюють програми часто надають інформацію про час виконання програми, наприклад число команд і (або) машін¬них тактів, виконаних від початку роботи програм¬ми до її зупинки. Моделюють програми раз¬лічних виробників відрізняються за своїми возмож¬ностям, однак незалежно від того, наскільки хороша моделює програма, вона ніколи не може за¬меніть повністю налагодження програми на мікроЕОМ. Це пояснюється тим, що специфічні тимчасові співвідношення та умови зовнішнього оточення аппара¬тури мікроЕОМ неможливо змоделювати полнос¬тью.
Налагодження програми є резі¬дентнимі, що полегшують налагодження об'єктної прог¬рамми на мікроЕОМ. Зазвичай вони приймають від користувача команди на виконання наступних фун¬кцій: висновок на дисплей (на друк) вмісту по¬стоянной пам'яті або пам'яті з довільним досту¬пом мікроЕОМ, а також вмісту регістрів цент¬рального процесора; зміна вмісту опера¬тівной пам'яті; виконання програми із зазначеної адреси; припинення виконання програми із зазначеної адреси; припинення виконання програми після досягнення команди, що знаходиться в певній комірці пам'яті, або при виконанні заданого усло¬вія.
Отладочная програма може призупинити ви¬полненіе програми в будь-якому місці, де зустрічається посилання на позначений ідентифікатор або перемен¬ную; де відбувається зміна значення змінної; якщо змінна приймає будь-яке значення між за¬даннимі межами; якщо змінна або число іс¬полненій оператора стають рівними заданому значенню, Крім цього, можливе виділення спеці¬альних регістрів стеження, контролюючих состоя¬ніе шини управління мікропроцесора.
Налагодження програми в поєднанні з моделірую¬щімі програмами дозволяють значно умень¬шіть ймовірність появи помилок в об'єктних про¬граммах.
Система команд. Як уже зазначалося, команди можуть бути трьох типів: безадресні, одноадресні і двухадрес¬ние. У безадресної команді все слово займає код опера¬ціі. Одноадресна команда має два поля: для коду операції відводиться 10 розрядів і для адреси операнда-приймача - 6 розрядів. Двохадресна команда содер¬жіт три поля: 4 розряду відводиться для коду операції, 6 розрядів - для адреси операнда-джерела і 6 разря¬дов - для адреси операнда-приймача.
Залежно від способу адресації одноадресная команда може мати одне продовження, т. Е. Займати два послідовних слова. У другому слові може перебувати (в залежності від способу адресації) або безпосередній операнд, або абсолютний адреса, або індекс (зміщення). Відповідно двохадресна команда може мати одне або два продовження. Таким чином, в залежності від типу команди і способи адресації кожна команда може займати від однієї до трьох последо¬вательних осередків пам'яті:
Розглянемо склад команд і відзначимо їх деякі характерні особливості.
Примітка. З детальним описом кожної команди при не¬обходімості можна ознайомитися з керівництва до мікро-ЕОМ.
При описі команд прийняті наступні обозначе¬нія: DD - адреса приймача; SS - адреса джерела; R - регістр загального призначення; $ Z - зірочка: перед кодом операції приймає значення 0 для слів і 1 - для байтів. Буква У в круглих дужках в мнемонічних позначеннях команди показує, що команда може бути використана як для слів, так і для байтів.
У табл. 1 наведені відповідно групи одно¬адресних команд, двоадресного команд і команд управле¬нія програмою.
Розглянемо особливості виконання команд услов¬ного переходу. Чотири розряду регістра стану N, Z, V, С процесора є ознаки резуль¬тата виконання попередньої команди і використовуються командами умовного переходу. Передача управління відбувається при виконанні умови, що визначається кодом операції.
Характерна особливість команд умовного перехо¬да - передача управління щодо лічильників команд, що забезпечує властивість позиційної незалежності. Команди умовних переходів мають такий вигляд:
Молодший байт команди розглядається як знакова зсув (в діапазоні від -128 до +127 слів) относі¬тельно лічильника команд. При написанні програм слід, враховувати обмежену можливість передачі управле¬нія вперед і назад і в разі необхідності застосовувати команду передачі управління JMP. Команда JMP не має обмежень на довжину передачі, проте займає в пам'яті два слова.
Адреса команди, на яку передається керування в разі виконання умови, обчислюється за формулою
де α - адреса команди умовного переходу.
При передачі управління тому зміщення задається в додатковому коді.
У даній системі команд ефективно вирішено питання виклику підпрограм і повернення в визивав¬шую програму. Виклик підпрограми здійснюється за допомогою команди виду
де R, -один з регістрів загального призначення; SUB - ім'я деякої підпрограми.
Дія команди звернення до підпрограми можна умовно представити у вигляді еквівалентної системи команд:
При зверненні до підпрограми колишній уміст регістра зв'язку R, запам'ятовується в стеку, потім в регістр зв'язку заноситься адреса повернення (адреса команди, следую¬щей за командою виклику) і відбувається перехід на под¬программу з ім'ям SUB.
Повернення з підпрограми відбувається по команді RTS R,, дія якої можна також умовно пред¬ставіть у вигляді системи еквівалентних команд:
За командою RTS Ri вміст регістра зв'язку загру¬жается в лічильник команд PC (цим самим забезпечується повернення в викликала програму) і потім колишній уміст регістра зв'язку відновлюється шляхом вилучення його з стека.
Як регістру зв'язку можливе використання і лічильника команд. В цьому випадку економиться один регістр загального призначення (його можна застосовувати для інших цілей).
У вигляді еквівалентної системи команд звернення і повернення з підпрограми будуть виглядати наступним чином:
Такий спосіб зв'язку з підпрограмами практично не накладає обмежень на глибину вкладеності підпрограм (вона залежить лише від числа елементів пам'яті, відведених під стек) і способи звернень. Чи не существу¬ет обмежень і для звернення підпрограми самої до себе - рекурсивне звернення. Використання рекур¬сівних звернень дозволяє створювати компактні й ефективні програми обробки даних.
Обмін даними з зовнішніми пристроями. Обмін дан¬нимі між процесором і зовнішніми пристроями осу¬ществляется за допомогою стандартних циклів магістра¬лі. Кожне зовнішнє пристрій повинен мати як міні¬мум два регістра: регістр команд і станів і буферний
регістр даних За кожним регістром закріплюється один з парних адрес на загальній Магістралі, що належить області останніх 4К слів адресного простору.
Обмін даними розглянемо на прикладі взаімодей¬ствія процесора і дисплея, що є стандартним системним пристроєм. Дисплей розглядається як прилад, що складається з двох абсолютно незалежних пристроїв (клавіатури і пристрої відображення на екрані). Кожен пристрій має свої два регістра.
Розглянемо програмний Спосіб передачі даних.
Формат регістра команд і станів клавіатури має вигляд
Сьомий біт регістра команд і станів, званий бітом готовності, має наступний сенс: БІТ [7] = 1 показує, що була натиснута кнопка, БІТ [7] = 0 показує, що клавіша не відповідає натискалася.
У разі натискання однієї з клавіш клавіатури дисплея біт готовності встановлюється в 1 і код символу, відповідний тій самій клавіші, пересилається в буферний регістр введення клавіатури.
Формат буферного регістра введення клавіатури має вигляд
Праворуч від регістрів вказані їх восьмеричні адреси на загальній магістралі.
На мовіасемблера процес введення одного символу з клавіатури дисплея в регістр R0 описується следую¬щім чином:
Аналогично происходит и процесс вывода символа на экран.
Система переривання, переривання - непредусмотрен¬ное звернення до підпрограми. Мікро-ЕОМ має два види переривань: внутрішні і зовнішні. Внутрішні пре¬риванія відбуваються з ініціативи процесора при воз¬нікновеніі в ньому незвичайних ситуацій, а зовнішні прери¬ванія - на вимогу пристроїв введення - виведення, под¬соедіненних до загальної магістралі.
Зовнішні переривання. Дозволом запиту на зовнішнє переривання від конкретного пристрою управ¬ляет БІТ [6] регістра команд і станів цього устрой¬ства.
Сигнал запиту на переривання формується в двох випадках: 1) біт дозволу переривання встановлений (БІТ [6] = 1), а біт готовності (БІТ [7]) переходить зі стану 0 в стан 1; 2) біт готовності встановлений (БІТ [7] = 1), а біт дозволу переривання (БІТ [6]) переходить зі стану 0 в стан 1.
Установка і скидання біта дозволу переривання здійснюються програмним способом. При початковому пуску машини, а також при виконанні команди RESET виробляється на загальній магістралі імпульс INIT, який скидає в нуль біти дозволу переривання в регістрах команд і станів всіх пристроїв, подсоеді¬ненних до загальної магістралі. Запити на переривання процесора від зовнішніх пристроїв можуть бути задоволені тільки в тому випадку, якщо сьомий біт регістра стану процесора дорівнює нулю (PSR [7] = 0). У про¬тівном випадку (PSR [7] = 1) всі запити на переривання ігноруються (замасковані).
Лінія дозволу переривання від процесора проходить послідовно через всі зовнішні пристрої. Таким чином, пріоритет пристроїв знижується в міру удале¬нія від процесора. Будь-який пристрій, яке може перервати процесор, може також перервати виконання програми обслуговування пристрою з більш низьким пріоритетом, якщо PSR [7] = 0. При такій структурі можливо вкладення переривань будь-якого рівня (число вкладень обмежується лише числом елементів пам'яті, відведених під стек).
Кожного зовнішнього пристрою, приєднаного до об¬щей магістралі, ставиться у відповідність своя пара осередків оперативної пам'яті, яка називається вектором переривання. Перше слово вектора переривання містить адресу початку підпрограми обробки переривання для даного устрой¬ства, а друге слово - вміст регістра стану процесора для цієї підпрограми. Зазвичай друге слово в цьому випадку зберігає інформацію про значення сьомого біта - біта дозволу переривання. Якщо цей біт дорівнює одиниці, то переривання від пристрою з більш високим пріоритетом буде заборонено на час роботи програми обробки переривання. Кожне зовнішнє пристрій, здатний працювати по перериванню, має свій «запаян¬ний» вектор, числове значення якого відповідає адресі першого слова вектора переривання в оперативній пам'яті. У разі задоволення запиту на переривання пристрій посилає свій вектор переривання в процесор, тим самим повідомляючи процесору адреса початку подпрог¬рамми обслуговування переривання для цього пристрою і стан процесора.
Дії, які виконує процесор після получе¬нія вектора переривання, можна описати за допомогою еквівалентної системи команд:
де α - адреса вектора переривання.
Схема, наведена на рис. 6, пояснює принцип роботи мікро-ЕОМ по перериванню.
Схема системы прерывания микро-ЭВМ.
Внутрішні переривання. Виникають в разі виникнення нестандартних ситуацій в процесорі (помилка магістралі, резервна або заборонена команда, уста¬новлен біт стеження Т в регістрі стану процесора, збій харчування) або в разі появи в програмі команд IOТ, ЕМТ, TRAP. Механізм внутрішніх переривань аналогічний механізму зовнішніх переривань. Наприклад, вихід напруги або частоти живильної мережі за допусті¬мие межі викликає внутрішнє переривання, дія якого можна описати за допомогою системи команд:
Найпростіший випадок використання внутрішніх переривань - організація пасток зупинки. Наприклад, щоб організувати останов процесора при вознікнове¬ніі помилки магістралі або появу в програмі резервної або забороненої команди, досить вклю¬чіть в програму рядки
Мережевий таймер (годинник реального часу). Для органі¬заціі вимірювання тимчасових інтервалів в мікроЕОМ реалізовано внутрішнє переривання по таймеру з векто¬ром, що знаходиться за адресою 1008. Якщо таймер включений, то на лінію переривання по таймеру надходять імпульси з частотою мережі живлення 50 Гц або з періодом 0,02 с. Підпрограма обслуговування переривання по таймеру забезпечує накопичення і підрахунок імпульсів ( «тиків») в деякій вибраній комірці пам'яті. Для забезпечення достатньої ємності таймера замість однієї комірки пам'яті застосовують дві. Для реалізації арифметичної опера¬ціі з подвоєною розрядністю використовується команда ADC - додаток перенесення.
Литература:
Л.Н. Преснухин «Микропроцессоры» часть 2, стр.: 171-177, 180-212.
