загрузка...
загрузка...
На головну

Команди переміщення даних

система команд

Всі команди за функціональною ознакою розділені на групи: переміщення даних; обробка даних; управління програмою; введення - висновок і спеціальні команди.

Описуючи систему команд з використанням мнемоніки, необхідно враховувати можливості конкретної мови для освіти допустимих скорочень. Звичайно, тим, хто вперше стикається з мікропроцесорами і їх програмуванням, хочеться, щоб все мнемонічні скорочення були зроблені на основі їх рідної мови, а не якого-небудь іноземного. Але, наприклад, як скоротити команди ВВЕДЕННЯ і ВИСНОВОК (аналогічно ВХІД і ВИХІД)? По-англійськи вони будуть записані IN-OUT, т. Е. Відразу досить короткими, і розрізняються на стільки, що можуть бути скорочені до однієї літери (I / O). У російській варіанті скорочення, на жаль, абсолютно неможливо.

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

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

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

Як правило, для восьмирозрядного мікропроцесора КР.580ІK80A адреси та коди команд прийнято давати в шістнадцятковій системі кодування; зокрема, саме в такому вигляді видається лістинг (роздруківка) програми після машинної трансляції.

У мікропроцесорі КР.580ІК80А команди міжрегістрових передач є двоадресний: в них доводиться адресувати регістр - джерело і регістр - одержувач інформації.

Реєстрова адресація.За однобайтном команді (переміщення даних з одного регістра в інший). У зоні операнди повинні бути вказані дві адреси: на першому місці - куди поміщається інформація, т. Е. Адреса одержувача (приймача); на другому місці - звідки беруться дані, т. е. адреса джерела, наприклад MOV R2, R1, де R означає регістри A, B, C, D, E, H, L, M. Можна сказати, що в команді вказується місце призначення, в яке повинні прибути переміщувані дані в результаті операції.

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

У мнемонике команди вказуються умовні позначення РОН, в яких знаходяться приймач і джерело, між собою ці позначення обов'язково поділяються коми. Наприклад, MOV С, В означає «перенести вміст регістра В в регістр С»; вміст регістра В залишається без зміни. При трансляції команди в об'єктний код, умовні позначення регістрів замінюються їх двійковими номерами. Всі регістри загального призначення, пам'ять і акумулятор мають постійні номери.

Команда переміщення даних є найбільш «багатою» за кількістю різних варіантів. Якщо перебрати в зоні операнда всі можливі комбінації регістрів, то в переліку машинних команд буде зайнято 64 позиції. Правда, хоча всі їх можна застосовувати, частина їх виявиться по суті марною. Наприклад, команда MOV А, А наказує переслати вміст акумулятора назад в акумулятор.

Побічно-реєстрова адресація. Якщо дані переме частішають в регістр з основної пам'яті або, навпаки, переносяться в пам'ять з регістра, то використовується побічно-реєстрова адресація.

Наприклад, MOV М, В означає помістити вміст регістра В в комірку пам'яті, адреса якої знаходиться в регістрах Н і L. У вісімковому коді ця операція представляється як 160, а в машинному - 01110000 (70 HEX). Команда MOV В, М аналогічна попередній, але переміщення інформації відбувається в протилежному напрямку: з пам'яті (за адресою в регістрах Н і L) в регістр - приймач В.

Безпосередня адресація. Команди переміщення даних можуть мати безпосереднє уявлення операнда і непряму адресацію.

Безпосередня адресація по-англійськи буде читатися як Immediate Addressing, тому в мнемонике команд вона вказується буквою I, що стоїть на останньому місці. Наприклад, MVIA, 02 означає помістити число 02 в регістр А. Ці команди мають двухбайтное формат, в результаті їх виконання вміст другого слова команди поміщається в регістр, номер якого вказаний у полі операнда першого слова команди.

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

Команди завантаження акумулятора і запам'ятовування даних. За трехбайтной командіLDA в акумулятор завантажується вміст комірки пам'яті, що адресується другим і третім байтами команди, а по команді запам'ятовуванняSTA -зворотний протилежна передача. Всі команди можуть бути виконані з прямої, безпосередньої і непрямою адресацією.

При прямої адресації команди мають трехбайтний формат і наказують в разі запам'ятовування помістити вміст акумулятора в комірку пам'яті, адреса якої вказана другим і третім байтами, наприклад, SDA 0502 означає помістити вміст регістра А в осередок пам'яті 0502 (запам'ятати), а при завантаженні, навпаки, помістити в акумулятор дані з комірки пам'яті, що адресується аналогічно: наприклад, LDA 0700 означає помістити вміст комірки пам'яті в регістр А (завантажити).

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

команди непрямої адресації мають однобайтном формат LDAXRp, STAXR, Розрядний адреса Rp вказується парою регістрів. Це може бути не тільки пара Н і L, але В і С або D і Е. При завантаженні адресація виконується аналогічно, але дані записуються в акумулятор. по-англійськи Спільне викорис-тання двох регістрів буде читатися як Extended Addressing, тому в мнемонічні скорочення цих команд додається символ Х. Наприклад LDAX Hозначає помістити в регістр А дані з комірки пам'яті, адреса якої міститься в регістровий парі HL (завантажити), а STAX Н, Навпаки, дані з регістра А помістити в комірку пам'яті (запам'ятати) за адресою який міститься в реєстрової парі HL.

Команди завантаження покажчиків пам'яті і запам'ятовування даних. Для завантаження початкових значень у внутрішні покажчики пам'яті (ініціалізації) застосовують трехбайтную команду з безпосереднім поданням операнда LXIrp, де Rр означає реєстрові пари ВС, DE, HL або покажчик стека SP-Stack Pointer. наприклад,LХL H0900 означає помістити в регістр L число 00, а в регістр Н - число 09, отже, в реєстрову пару завантажити покажчик на комірку пам'яті 0900.

Для завантаження основного покажчика пам'яті-регістрів Н і L- з двох суміжних осередків пам'яті застосовується командаLHLD - Load HL Direct. Запам'ятовування вмісту реєстрової пари Н і L в двох наступних один за одним осередках пам'яті здійснюється по команді SHLD - Store HL Direct. Обидві ці команди трехбайтние, у другому і третьому байтах вказується повний 16-розрядний адреса комірки, з якої завантажується або в яку заноситься вміст регістра L (молодшого байта). Адреса вмісту регістра Н (старшого байта) отримують шляхом додавання 1 до значення другого і третього байтів команди.

Команди міжрегістрових обміну. Особливостями мікропроцесора КР.580ІK80A є однобайтні команди передачі 16-бітових операндів. Є спеціальна командаXCHG (Скорочення англійського слова Exshange), яка виробляє обмін вмістом регістрів DE і HL:

(H) - (D), (L) - (E).

У ряді випадків дуже зручною виявляється спеціальна однобайтном команда XTHL (exchange HL):

(L) - ([SP]), (H) - ([SP + 1]),

вона виконує обмін вмістом регістрів HL і двох верхніх осередків стека, т. е. останніх, завантажених в стек даних. Вміст покажчика стека при виконанні командиXTHL не змінюється. До речі сказати, командаXTHL- Найдовша в системі команд мікропроцесора КР.580ІK80A, для її виконання потрібно 18 машинних тактів.

Зміст реєстрової пари HL передається в покажчик стека командою SPHLабо в програмний лічильник командоюPCHL. Тут, як і раніше, на першому місці стоїть одержувач інформації (приймач), а на другому - джерело даних.

Команди операцій зі стеком.Для установки покажчика стека на початкове значення використовують згадану раніше команду LXI SP. Завдяки такій установці в якості стека може бути застосована будь-яка область оперативної пам'яті мікропроцесорної системи.

Основними командами роботи зі стеком єPUSH - Занести (буквально «заштовхнути») в стек іPOP (Pull up) - витягти (витягнути) з стека. Ці команди завжди оперують з реєстровими парами, зазначеними в полі операнда команди. При виконанні командиPUSH в комірку пам'яті з адресою (SP) -1 записується вміст восьми старших розрядів, а в осередок з адресою (SP) -2 - восьми молодших розрядів реєстрової пари. Вміст покажчика стека зменшиться на 2, так як стек «росте вгору», в область менших адрес. Коли виконується командаPOP Rр, вміст верхівки стека передається в молодші розряди реєстрової пари, а вміст наступної комірки стека - в старші розряди тієї ж реєстрової пари.

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

Програмне забезпечення мікропроцесора «-- попередня | наступна --» Команди обробки даних
загрузка...
© om.net.ua