Система команд мікропроцесора ВМ86
Мікропроцесор ВМ86 має 92 типи команд. В таблиці 4.13 приведені їхні мнемокоди на мові асемблера і коротко вказане їх призначення.
Таблиця 4.13- Система команд мікропроцесора К1810ВМ86
Цю систему команд можна розділити на сім функціональних груп:
1. Команди пересилки даних, які забезпечують обмін інформації між регістрами, комірками даних і портами вводу-виводу. 2. Арифметичні команди, які виконують арифметичні операції над двійковими або двійково-десятковими числами.
3. Команди маніпулювання бітами, які здійснюють зсуви, циклічні зсуви і логічні операції зі значеннями регістрів і комірок пам¢яті. 4. Команди передачі керування, які керують послідовністю виконання команд програми. До них відносяться переходи до інших команд, виклик процедури і повернення з неї.
5. Команди обробки ланцюжків, які переміщують, порівнюють та сканують ланцюжки (стрічки) даних. 6. Команди переривання, які відволікають мікропроцесор на обробку деяких специфічних ситуацій. 7. Команди керування процесором, які встановлюють або скидають індикатори стану, а також змінюють режим функціонування МП. Далі розглянемо коротко систему команд за цими групами. Команди МП К1810ВМ86 описуються відповідно до їхньої класифікації по функціональних групах. Позначення і алгоритми виконання команд приведені в табл. 4.14. Якщо в позначенні операнда розрядність не вказується, то в залежності від значення поля W команда може опрацьовувати 8-або 16-розрядні операнди. Таблиця 4.14
Команди пересилок (загального призначення, пересилки адрес, пересилки ознак, вводу-виводу і перекодування) забезпечують передачу операнда-джерела в операнд-приймач без перетворення (табл. 4.15).Команди пересилок загального призначення поділяють на симетричні команди, для вказівки операндів використання поля MOD, R/M і REG в другому байті і команди зі спрощеним форматом. Серед команд із спрощеним форматом є команда XCHG АХ,АХ, що використовується як команда NOP (немає операції). Спеціальна команда NOP в МП К1810ВМ86 відсутня. Команди пересилок адрес дозволяють динамічно змінювати операційну обстановку, тобто визначати поточні сегменти пам'яті. Слід зазначити, що після команд, що змінюють вміст сегментного регістра (MOV і POP), забороняються переривання на час виконання наступної команди.
Таблиця 4.15
В якості наступної команди рекомендується використовувати команду пересилки в один із регістрів компоненти зсуву логічної адреси. Це забезпечує повне завантаження логічних адрес (покажчиків), що особливо важливо при завантаженні регістрів SS і SP. Команда LEA забезпечує програмну доступність виконавчої адреси. Вона дозволяє організувати доступ до елементів складних структур даних (наприклад, багатомірних масивів). Команди LDS і LES забезпечують завантаження покажчиків і особливо ефективні для підготовки обробки рядкових даних. Адресація регістрів зовнішніх пристроїв у командах вводу-виводу може бути пряма (у межах перших 256 регістрів) і опосередкована через регістр DX. Тим самим, з одного боку, досягається сумісність із МП КР580ИК80, а з іншого боку -завдяки непрямої адресації підвищується гнучкість адресації зовнішніх пристроїв. Команда перекодування XLAT дозволяє опрацьовувати таблиці розміром 256 байтів. Початок таблиці в сегменті даних вказується в регістрі ВХ. Команда виконує пересилку в AL байта таблиці, що знаходиться за номером в регістрі AL. При відповідній підготовці таблиці забезпечується перетворення символьних рядків, наприклад із коду КОИ-7 у код ДКОИ і т.д.
Арифметичні команди (додавання, віднімання, додавання і віднімання спрощеного формату, множення, ділення і перетворення форматів даних) призначені для виконання основних арифметичних операцій над порядковими, цілими і двійково-десятковими числами. Алгоритми команд подані в табл.4.16. Команди віднімання і додавання (за винятком команд корекції) встановлюють ознаки результату. Команди INC і DEC залишають без зміни ознаку переносу. Команди ADC і SBB забезпечують виконання додавання і віднімання багатобайтових чисел. Порядкові, цілі і двійково-десяткові числа обробляються тими самими командами додавання і віднімання. Щоб одержати правильний результат для двійково-десяткових чисел, необхідно зробити корекцію. З цією метою у випадку додавання для розпакованих чисел служить команда ААА, для упакованих - команда DAA. Корекція відбувається, якщо в результаті двійкового додавання в тетраді утворилося число більше 9 або виникло перенесення в наступну тетраду, тобто результат додавання двох десяткових цифр більше 16. У першому випадку необхідно відняти з тетради 10, у другому - додати в тетраду 6. Оскільки віднімання з тетради рівносильне додаванню б, то в обох випадках для корекції результату додають 6. При корекції розпакованих чисел опрацьовується тільки молодша тетрада, а старша обнулюється. Байт, що коректується, розташовується в регістрі AL. Якщо була необхідність додавання 6, то це свідчить про перенос у старший десятковий розряд, тому ознака CF встановлюється в 1. Крім того, до регістра АН добавляється 1. Тим самим підвищуються зручності опрацювання багаторозрядних двійково-десяткових чисел. У випадку упакованих двійково-десяткових чисел спочатку відповідно до розглянутого способу опрацьовується молодша тетрада. Якщо після додавання числа 6 виникає перенос, то він складається зі старшою тетрадою, що потім опрацьовується. Для корекції результату віднімання розпакованих двійково-десяткових чисел використовується команда AAS упакованих DAS. Відмінність алгоритму корекції віднімання полягає в тому, що при наявності запозичення зі старшої тетради з поточної необхідно відняти 6, тому що двійкове запозичення дорівнює 16, а не 10. Зручність опрацювання багаторозрядних двійково-десяткових чисел забезпечується установкою ознаки переносу, як при додаванні. Команди СМР, що служать для порівняння даних, працюють так само, як команди SUB, проте результат в операнд-приймач не надходить, змінюється тільки стан ознак результату.
У групу команд множення входять команди MUL для множення порядкових чисел і IMUL для множення цілих чисел (із знаком). Для однобайтових даних один із співмножників повинний бути в AL, результат знаходиться в регістрі АХ. Для двобайтових даних один із співмножників знаходиться в регістрі АХ, молодше слово результату - у АХ, старше - у DX. Після виконання команд множення встановлюються ознаки переносу і переповнення. У групу команд ділення входять команди DIV для ділення порядкових чисел і IDIV для ділення цілих чисел. Ділене займає регістр АХ при W=0 або регістри DX (старше слово) і АХ при W=1. Ціла частина дільника розміщається в регістр АН (АХ при W==1), залишок - в регістр AH (DH при W=1). Якщо при діленні порядкових чисел дільник більше 255 (65535 при W=1), або при діленні цілих чисел модуль дільника більше 127 (32767 при W=1), або дільник дорівнює 0, то виникає внутрішнє переривання за помилкою ділення. Після виконання команди ділення ознаки невизначені. Таблиця 4.16
До команд порозрядної обробки даних відносяться команди логічні лінійного зсуву і команди циклічного зсуву (табл.4.17 ). Логічні команди реалізують стандартний набір порозрядних логічних операцій НЕ, І, Або, виключаючи АБО. У залежності від значення поля W операнди можуть бути одно- або двобайтовими. Всі команди, за винятком NOT, встановлюють ознаки OF і С, CF у стані "О", ознаки SF, JF й PF- за результатом. Значення ознаки AF визначено. Команда NOT не змінює ознаки. Команда TEST виконує порозрядну логічну операцію І над вихідними операндами, встановлює ознаки, але результат в операнд-приймач не відсилає. На відміну від мікропроцесора КР580ИК80 у К1810ВМ86 реалізовані операції циклічного і лінійного зсуву на один розряд і на програмно встановлене в регістрі С число розрядів. При виконанні лінійного зсуву вліво (команда SHL) ознака переносу встановлюється за значенням біту, висунутому зі старшого розряду. Після цього, якщо їхні значення не рівні, у стан і встановлюється ознака переповнення. Отже, команду SHL для порядкових чисел, можна використовувати для зсуву вліво і цілих чисел. При зсуві вправо ознака переносу встановлюється в стан, що відповідає біту, висунутому з молодшого розряду. Старші розряди по команді SHR заповнюються нулями (логічний зсув), а по команді SAR- значенням старшого (знакового) розряду (арифметичний зсув). Стрічкові команди (MOUS, CMPS, SCAS, LODS, STOS) дозволяють не тільки проводити розрахунки, але й опрацьовувати тексти. Опрацювання стрічкових даних у мікропроцесорі К1810ВМ86 досягається за допомогою однобайтових команд для типових операцій над окремими елементами рядків і апаратної реалізації багатократного виконання таких команд шляхом завдання спеціального однобайтового префікса. У якості елементів стрічок можуть виступати одно - або двобайтові дані. Стрічки - джерела розташовуються в сегменті даних, зміщення елементів стрічок у сегменті задається вмістом регістра SI. Стрічки-приймачі розташовуються в допоміжному сегменті, зміщення елементів стрічок задається вмістом регістра DI. Стрічкові команди автоматично збільшують (автоінкремент) aбo зменшують (автодекремент) уміст регістрів SI і DI на одиницю або на два. Автоінкремент або автодекремент задається ознакою напрямку DF. Команда MOVS виконує пересилку елемента стрічки-джерела за адресою елемента стрічки-приймача; CMPS шляхом віднімання елемента стрічки-приймача з елемента стрічки-джерела порівнює їх (встановлює ознаки результату);LODS завантажує елемент стрічки-джерела в регістр AX;SCAS порівнює вміст регістра АХ і елемента стрічки-приймача; STOS пересилає вміст регістра АХ за адресою елемента стрічки-приймача.
Таблиця 4.17
Для виконання дій над стрічками в програмі безпосередньо перед стрічковими командами необхідно розміщувати однобайтовий префікс повторення. Він задає багатократне виконання наступної стрічкової команди, супроводжуване відніманням одиниці з регістра СХ. Перед кожним виконанням стрічкової команди перевіряється вміст регістра СХ і, якщо він дорівнює нулю, повторення виконання припиняється. Для стрічкових команд (CMPS і SCAS) умовою виходу з апаратного циклу є СХ=0 V ZF=Z, де Z - значення молодшого байта префікса повторення. Таким чином, стрічкові команди дозволяють пересилати і порівнювати стрічки, робити пошук елемента в стрічці (або пропуск деякого елемента в стрічці) і заповнювати стрічки конкретним символом (наприклад, прогалиною). Стрічкові команди можна використовувати і для опрацювання масивів даних інших типів (наприклад, цілих, порядкових і т.п.). Команди передачі керування (безумовної передачі керування, організації підпрограм, переривання, умовного переходу й організація циклів) призначені для зміни природного порядку виконання програми (табл. 4.18). Таблиця 4.18
Команди JMP і CALL організують переходи як в середині поточного сегмента кодів, так і на інший сегмент кодів, що стає поточним. Крім переривання, тільки ці команди дозволяють переходити із сегмента в сегмент. При природному порядку виконання команд по досягненні кінця сегмента керування автоматично передається на початок сегмента. Команди RET поділяються на команди з примусовим приростом вказівника стеку і без такого. Приріст задається в другому і третьому байтах команди і сумується з вмістом SP. Це відновлює вихідний стан вказівника стека при поверненні з процедур. До команд переривання відносяться: INT- двобайтова, що задає програмне переривання, обумовлене користувачем; INT3 і INTO- однобайтове, що визначають програмні переривання по точках розриву і по переповненню. Вказівник для завантаження регістрів CS і IP при виконанні цих команд вибирається один із 256 чотирибайтових областей на початку поля адрес. Вказівник (табл. 4.18) позначається Ptr, а в дужках записується номер чотирибайтової області. Команди INT використовуються, наприклад, для спрощення програмного інтерфейсу складних програмних комплексів-емуляторів, операційних систем і ін.; INT3 зручна у відлагоджувачах; INTO- для контролю переповнення. Команда IRET служить для повернення з процедур обробки програмних або апаратних переривань. Мікропроцесор К1810ВМ86 реалізує різноманітні команди умовного переходу. Всі вони є двобайтовими, причому при виконанні умови другий байт команди знаково розширюється до слова і сумується з вмістом регістра IP. Тим самим забезпечується умовний перехід в межах від 127 до - 128 байт від адреси першого байта наступної команди. Аналізовані умови і мнемокоди команд переходу за умовою подані в табл. 4.19. Для покращення чіткості програм для багатьох команд умовного переходу задано декілька мнемокодів, кожний із який вибирається в залежності від контексту і дозволяє акцентувати увагу на сутність оброблюваних даних і особливості алгоритму. LOOP, JLOOPZ і LOOPNZ- команди організації циклів. Виконання цих команд полягає в зменшенні індексу числа, що знаходиться в регістрСХ, а при виконанні умови до вмісту IP додається значення другого байта команди, знаково розширене до слова. У команді LOOP умовою переходу є СХ^О, у команді LOOPZ-CX^O, ZF=1, а в команді LOOPNZ-CX^O, ZF=0. Команди керування мікропроцесором поділяються на команди керування ознаками стану (табл. 4.20) і синхронізації (WAIT, ESC, HLT). Команда WAIT із п'ятитактним інтервалом аналізує стан виводу TEST мікропроцесора. Перехід на виконання наступної команди відбувається лише після того, як сигнал на виводі TEST стане рівним 0. Це дозволяє синхронізувати виконання програми з деяким зовнішнім процесом. Команда ESC організовує розширення системи команд за допомогою деякого співпроцесора. За вмістом полів MOD і R/M, а також сегментного регістра формується повна фізична адреса даних у пам'яті і видається на шину адреси. Тим самим співпроцесор може використовувати режими адресації центрального процесора. Команда HLT переводить мікропроцесор в режим зупинки, із котрого його можна вивести перериванням або початковою установкою і запуском. При початковій установці всі розряди регістра сегмента команд встановлюються в стан "І", а вказівник команд, регістр ознак і інші сегментні регістри - в стан "О".Крім префікса повторення стрічкових команд мікропроцесора К1810ВМ86 може опрацьовувати ще два однобайтових префікси: блокування шини LOCK і заміни сегмента. Префікс LOCK забезпечує організацію монопольного доступу мікропроцесора до шини на увесь час виконання наступної за ним команди Таблиця 4.19
Таблиця 4.20
Таблиця 4.21
Префікс заміни сегмента дозволяє скасувати звичайне використання сегмента і на час виконання наступної команди примусово встановити необхідний сегмент. В табл. 4.21 показані сегменти по замовчуванню (-) і сегменти з префіксом (+). Префікс заміни сегмента запобігає багатократним змінам вмісту сегментних регістрів.
Читайте также: II -приравненное к нотариальному (глав.врач больницы, командиры воинских частей) Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|