Безперечні переходи. Основи програмування МП пристроїв (Лекція) Команди передачі керування

  • 10.01.2024

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

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

Мал. 29. Засоби логічного оброблення даних


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

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

Логічні дані

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

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

Обчислення висловлювань дуже гармонійно поєднується із принципами роботи комп'ютера та основними методами його програмування. Усі апаратні компоненти комп'ютера побудовано логічних мікросхемах. Система представлення інформації у комп'ютері на нижньому рівні заснована на понятті біта. Біт, маючи всього два стани (0 (хибно) і 1 (істинно)), природним чином вписується в обчислення висловлювань.

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


1. Заперечення (логічне НЕ) –логічна операція над одним операндом, результатом якої є величина, обернена до значення вихідного операнда.

Ця операція однозначно характеризується наступною таблицею істинності (табл. 12).

Таблиця 12. Таблиця істинності для логічного заперечення

2. Логічне додавання (логічне включає АБО) -логічна операція над двома операндами, результатом якої є «істина» (1), якщо один або обидва операнда мають значення «істина» (1), і «брехня» (0), якщо обидва операнда мають значення «брехня» (0).

Ця операція описується за допомогою наступної таблиці істинності (табл. 13).

Таблиця 13. Таблиця істинності для логічного, що включає АБО

3. Логічне множення (логічне І) -логічна операція над двома операндами, результатом якої є «істина» (1) лише у тому випадку, якщо обидва операнда мають значення «істина» (1). У решті випадків значення операції «брехня» (0).

Ця операція описується за допомогою наступної таблиці істинності (табл. 14).

Таблиця 14. Таблиця істинності для логічного І

4. Логічне виключне додавання (логічне виключне АБО) -логічна операція над двома операндами, результатом якої є «істина» (1), якщо тільки один із двох операндів має значення «істина» (1), і брехня (0), якщо обидва операнда мають значення «брехня» (0) або « істина» (1). Ця операція описується за допомогою наступної таблиці істинності (табл. 15).

Таблиця 15. Таблиця істинності для логічного виключає АБО

Система команд мікропроцесора містить п'ять команд, які підтримують ці операції. Ці команди виконують логічні операції над бітами операндів. Розмірність операндів, звісно, ​​має бути однакова. Наприклад, якщо розмірність операнда дорівнює слову (16 біт), то логічна операція виконується спочатку над нульовими бітами операнда, і її результат записується на місце біта 0 результату. Далі команда послідовно повторює ці дії над усіма бітами з першого до п'ятнадцятого.

Логічні команди

У системі команд мікропроцесора є наступний набір команд, що підтримують роботу з логічними даними:

1) and операнд_1, операнд_2 – операція логічного множення. Команда виконує порозрядно логічну операцію І (кон'юнкцію) над бітами операндів операнд_1 та операнд_2. Результат записується на місце операнд_1;

2) операнд_1, операнд_2 - операція логічного складання. Команда виконує порозрядно логічну операцію АБО (диз'юнкцію) над бітами операндів операнд_1 та операнд_2. Результат записується на місце операнд_1;

3) хог операнд_1, операнд_2 - операція логічного виключає складання. Команда виконує порозрядно логічну операцію виключає АБО над бітами операндів операнд_1 і операнд_2. Результат записується на місце операнді;

4) test операнд_1, операнд_2 - операція "перевірити" (спосібом логічного множення). Команда виконує порозрядно логічну операцію І над бітами операндів операнд_1 та операнд_2. Стан операнда залишається колишнім, змінюються тільки прапори zf, sf, і pf, що дає можливість аналізувати стан окремих бітів операнда без зміни їх стану;

5) not операнд – операція логічного заперечення. Команда виконує порозрядне інвертування (заміну значення зворотне) кожного біта операнда. Результат записується на місце операнда.

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

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

Для організації подібної роботи з бітами операнд_2 грає роль маски. За допомогою встановлених в 1 биті цієї маски визначаються потрібні для конкретної операції біти операнд_1. Покажемо, які логічні команди можуть застосовуватися для цієї мети:

1) для установки певних розрядів (біт) в 1 застосовується команда операнд_1, операнд_2.

У цій команді операнд_2, що виконує роль маски, повинен містити одиничні біти на місці розрядів, які повинні бути встановлені в 1 в операнд_1;

2) для скидання певних розрядів (біт) 0 застосовується команда and операнд_1, операнд_2.

У цій команді операнд_2, що виконує роль маски, повинен містити нульові біти на місці розрядів, які повинні бути встановлені в 0 в операнд_1;

3) команда хог операнд_1, операнд_2 застосовується:

а) для з'ясування того, які біти в операнд_1 та операнді різняться;

б) для інвертування стану заданих біт операнд_1.

Цікаві біти маски (операнд_2) при виконанні команди хог повинні бути одиничними, інші - нульовими;

Для перевірки стану заданих біт застосовується команда test операнд_1, операнд_2 (перевірити операнд_1).

Перевірені біти операнд_1 масці (операнд_2) повинні мати одиничне значення. Алгоритм роботи команди test подібний до алгоритму команди and, але він не змінює значення операнд_1. Результатом команди є встановлення значення прапора нуля zf:

1) якщо zf = 0, то в результаті логічного множення вийшов нульовий результат, тобто один одиничний біт маски, який не збігся з відповідним одиничним бітом операнді;

2) якщо zf = 1, то результаті логічного множення вийшов ненульовий результат, тобто. хоча б одинодиничний біт маски збігся з відповідним одиничним бітом операнд_1.

Для реакції на результат команди test доцільно використати команду переходу jnz мітка (Jump if Not Zero) – перехід, якщо прапор нуля zf ненульовий, або команду із зворотною дією – jz мітка (Jump if Zero) – перехід, якщо прапор нуля zf = 0.

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

1) bsf операнд_1, операнд_2 (Bit Scaning Forward) - сканування бітів уперед. Команда переглядає (сканує) біти операнд_2 від молодшого до старшого (від біта 0 до старшого біта) у пошуках першого біта, встановленого в 1. Якщо такий виявляється, в операнд_1 заноситься номер цього біта у вигляді цілого числа. Якщо всі біти операнд_2 дорівнюють 0, то прапор нуля zf встановлюється в 1, інакше прапор zf скидається в 0;

2) bsr операнд_1, операнд_2 (Bit Scaning Reset) - сканування бітів у зворотному порядку. Команда переглядає (сканує) біти операнд_2 від старшого до молодшого (від старшого біта до біта 0) у пошуках першого біта, встановленого в 1. Якщо такий виявляється, в операнд_1 заноситься номер цього біта у вигляді цілісного значення. При цьому важливо, що позиція першого одиничного біта зліва відраховується однаково щодо біта 0. Якщо всі біти операнд_2 дорівнюють 0, то прапор нуля zf встановлюється в 1, інакше прапор zf скидається в 0.

В останніх моделях мікропроцесорів Intel у групі логічних команд з'явилося ще кілька команд, які дозволяють здійснити доступ до одного конкретного біта операнда. Операнд може бути як у пам'яті, і у регістрі загального призначення. Положення біта визначається зсувом біта щодо молодшого біта операнда. Значення зміщення може задаватися як безпосереднього значення, і утримуватися у регістрі загального призначення. Як значення зміщення можна використовувати результати роботи команд bsr і bsf. Усі команди надають значення обраного біта прапору РЄ

1) bt операнд, смещение_бита (Bit Test) – перевірка біта. Команда переносить значення біта у прапор cf;

2) bts операнд, смещение_бита (Bit Test and Set) - перевірка та встановлення біта. Команда переносить значення біта у прапор CF і потім встановлює біт, що перевіряється, в 1;

3) btr операвд, смещение_бита (Bit Test and Reset) - перевірка та скидання біта. Команда переносить значення біта у прапор CF і потім встановлює цей біт 0;

4) btc операнд, смещение_бита (Bit Test and Convert) - перевірка та інвертування біта. Команда переносить значення біта у прапор cf і потім інвертує значення цього біта.

Команди зсуву

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

Усі команди зсуву переміщують біти в полі операнда ліворуч або праворуч залежно від коду операції. Усі команди зсуву мають однакову структуру - коп операнд, лічильник_зсувів.

Кількість розрядів, що зсуваються – лічильник_зсувів -розташовується на місці другого операнда і може задаватися двома способами:

1) статично,що передбачає завдання фіксованого значення за допомогою безпосереднього операнда;

2) динамічно,що означає занесення значення лічильника зсувів регістр cl перед виконанням команди зсуву.

З розмірності регістра cl зрозуміло, що значення лічильника зрушень може лежати в діапазоні від 0 до 255. Але насправді це не зовсім так. З метою оптимізації мікропроцесор сприймає лише значення п'яти молодших бітівлічильника, тобто значення лежить у діапазоні від 0 до 31.

Усі команди зсуву встановлюють прапор перенесення cf.

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

За принципом дії команди зсуву можна поділити на два типи:

1) команди лінійного зсуву;

2) команди циклічного зсуву.

Команди лінійного зсуву

До команд цього типу відносяться команди, які здійснюють зсув за наступним алгоритмом:

1) черговий «висувний» біт встановлює прапор CF;

2) біт, що вводиться в операнд з іншого кінця, має значення 0;

3) при зрушенні чергового біта він переходить у прапор CF, при цьому значення попереднього зрушеного біта втрачається! Команди лінійного зсуву діляться на два підтипи:

1) команди логічного лінійного зсуву;

2) команди арифметичного лінійного зсуву.

До команд логічного лінійного зсуву належать такі:

1) shl операнд, лічильник_зсувів (Shift Logical Left) - логічний зсув вліво. Вміст операнда зсувається вліво на кількість бітів, що визначається значенням сдвигов. Праворуч (у позицію молодшого біта) вписуються нулі;

2) shr операнд, лічильник_зсувів (Shift Logical Right) - логічний зсув праворуч. Вміст операнда зсувається праворуч на кількість бітів, що визначається значенням лічильник_зсувів. Ліворуч (у позицію старшого, знакового біта) вписуються нулі.

На малюнку 30 показано принцип роботи цих команд.

Мал. 30. Схема роботи команд лінійного логічного зсуву


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

1) sal операнд, лічильник зрушень (Shift Arithmetic Left) - арифметичний зрушення вліво. Вміст операнда зсувається вліво на кількість бітів, що визначається значенням сдвигов. Праворуч (у позицію молодшого біта) вписуються нулі. Команда sal не зберігає знаку, але встановлює прапор із/у разі зміни знакачерговим бітом, що висувається. В іншому команда sal повністю аналогічна команді shl;

2) sar операнд, лічильник_зсувів (Shift Arithmetic Right) - арифметичний зсув праворуч. Вміст операнда зсувається праворуч на кількість бітів, що визначається значенням лічильник_зрушень.Зліва в операнд вписуються нулі. Команда sar зберігає знак, відновлюючи його після зсуву кожного біта.

На малюнку 31 показано принцип роботи команд лінійного арифметичного зсуву.


Мал. 31. Схема роботи команд лінійного арифметичного зсуву

Команди циклічного зсуву

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

1) команди простого циклічного зсуву;

2) команди циклічного зсуву через прапор перенесення cf.

До команд простого циклічногозсуву відносяться:

1) rol операнд, лічильник_зсувів (Rotate Left) - циклічний зсув вліво. Вміст операнда зсувається вліво на кількість біт, що визначається операндом лічильник_зрушень.Зсувні ліворуч біти записуються в той же операнд праворуч;

2) гог операнд, лічильник_зрушень (Rotate Right) - циклічний зсув вправо. Вміст операнда зсувається праворуч на кількість біт, що визначається операндом лічильник_зрушень.Зсувні вправо біти записуються в той же операнд зліва.

Мал. 32. Схема роботи команд простого циклічного зсуву


Як видно з малюнка 32, команди простого циклічного зсуву в процесі своєї роботи здійснюють одну корисну дію, а саме: біт, що циклічно зрушується не тільки всувається в операнд з іншого кінця, але і одночасно його значення стає значенням прапора РЄ

Команди циклічного зсуву через прапор переносу CFвідрізняються від команд простого циклічного зсуву тим, що біт, що зрушується, не відразу потрапляє в операнд з іншого його кінця, а записується спочатку в прапор переносу РЄ Лише наступне виконання цієї команди зсуву (за умови, що вона виконується в циклі) призводить до приміщення висунутого раніше біта з іншого кінця операнда(Рис. 33).

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

1) rcl операнд, лічильник_зсувів (Rotate through Carry Left) - циклічний зсув вліво через перенесення.

Вміст операнда зсувається вліво на кількість біт, що визначається операндом лічильник_зрушень.Збиті біти по черзі стають значенням прапора переносу cf.

2) гсг операнд, лічильник_зсувів (Rotate through Carry Right) - циклічний зсув вправо через перенесення.

Вміст операнда зсувається праворуч на кількість біт, що визначається операндом лічильник_зрушень.Збиті біти по черзі стають значенням прапора переносу СF.

Мал. 33. Команди циклічного зсуву через прапор переносу CF


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

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

Додаткові команди зсуву

Система команд останніх моделей мікропроцесорів Intel, починаючи з i80386, містить додаткові зсувні команди, що розширюють можливості, розглянуті нами раніше. Це – команди зрушень подвійний точності: 1) shld операнд_1, операнд_2, лічильник_зрушень - зрушення вліво подвійної точності. Команда shld здійснює заміну шляхом зсуву бітів операнда операнд_1 вліво, заповнюючи його біти праворуч значеннями бітів, що витісняються з операнд_2 згідно зі схемою на рис. 34. Кількість біт, що зсуваються, визначається значенням лічильник_зсувів, операнд_2не змінюється.


Мал. 34. Схема роботи команди shld


2) shrd операнд_1, операнд_2, лічильник_зсувів - зсув праворуч подвійної точності. Команда здійснює заміну шляхом зсуву бітів операнда операнд_1 вправо, заповнюючи його біти зліва значеннями бітів, що витісняються з операнд_2 згідно зі схемою на малюнку 35. Кількість біт, що зсуваються, визначається значенням лічильник_зсувів,яке може лежати в діапазоні 0...31. Це значення може задаватися безпосереднім операндом або утримуватися в регістрі cl. Значення операнд_2не змінюється.

Мал. 35. Схема роботи команди shrd


Як ми зазначили, команди shld та shrd здійснюють зрушення до 32 розрядів, але за рахунок особливостей завдання операндів та алгоритму роботи ці команди можна використовувати для роботи з полями завдовжки до 64 біт.

2. Команди передачі управління

Ми познайомились із деякими командами, з яких формуються лінійнідільниці програми. Кожна з них у загальному випадку виконує деякі дії щодо перетворення або пересилання даних, після чого мікропроцесор передає керування наступній команді. Але дуже мало програм працює таким послідовним чином. Зазвичай у програмі є точки, в яких потрібно ухвалити рішення про те, яка команда виконуватиметься наступною. Це рішення може бути:

1) безумовним –у цій точці необхідно передати управління не тій команді, яка йде наступною, а іншою, яка знаходиться на деякому віддаленні від поточної команди;

2) умовним –Рішення про те, яка команда виконуватиметься наступною, приймається на основі аналізу деяких умов або даних.

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

Те, яка команда програми має виконуватися наступною, мікропроцесор дізнається за вмістом пари регістрів cs:(e)ip:

1) cs - сегментний регістр коду, в якому знаходиться фізична (базова) адреса поточного сегмента коду;

2) eip/ip – регістр покажчика команди, у якому перебуває значення, що є зміщення у пам'яті наступної команди, підлягає виконанню, щодо початку поточного сегмента коду.

Який регістр буде використовуватися, залежить від встановленого режиму адресації use16 або use32. Якщо вказано use 16, використовується ip, якщо use32, то використовується eip.

Таким чином, команди передачі управління змінюють вміст регістрів cs і eip/ip, в результаті чого процесор вибирає для виконання не наступну по порядку команду програми, а команду в деякій іншій ділянці програми. Конвеєр усередині мікропроцесора при цьому скидається.

За принципом дії команди мікропроцесора, що забезпечують організацію переходів у програмі, можна поділити на 3 групи:

1. Команди безумовної передачі управління:

1) команда безумовного переходу;

2) команда виклику процедури та повернення з процедури;

3) команда виклику програмних переривань та повернення з програмних переривань.

2. Команди умовної передачі управління:

1) команди переходу за результатом команди порівняння стор;

2) команди переходу за станом певного прапора;

3) команди переходу за вмістом регістру есх/сх.

3. Команди управління циклом:

1) команда організації циклу з лічильником есх/сх;

2) команда організації циклу з лічильником есх/сх з можливістю дострокового виходу із циклу за додатковою умовою.

Безумовні переходи

Попереднє обговорення виявило деякі деталі механізму переходу. Команди переходу модифікують регістр покажчика команди eip/ip та, можливо, сегментний регістр коду cs. Що саме має бути модифіковано, залежить:

1) від типу операнда у команді безумовного переходу (ближній чи далекий);

2) від вказівки перед адресою переходу (у команді переходу) модифікатора;при цьому сама адреса переходу може знаходитися або безпосередньо в команді (прямий перехід), або в регістрі або комірці пам'яті (непрямий перехід).

Модифікаторможе приймати такі значення:

1) near ptr – прямий перехід на мітку всередині сегмента коду. Модифікується лише регістр eip/ip (залежно від заданого типу сегмента коду use16 або use32) на основі вказаної в команді адреси (мітки) або виразу, який використовує символ отримання значення – $;

2) far ptr – прямий перехід на мітку в іншому сегменті коду. Адреса переходу задається у вигляді безпосереднього операнда або адреси (мітки) і складається з 16-бітного селектора та 16/32-бітного зміщення, які завантажуються, відповідно, в регістри cs та ip/eip;

3) word ptr – опосередкований перехід на мітку всередині поточного сегмента коду. Модифікується (значенням зміщення з пам'яті за вказаною в команді адресою або з регістру) тільки eip/ip. Розмір усунення 16 або 32 біт;

4) dword ptr – опосередкований перехід на мітку в іншому сегменті коду. Модифікуються (значенням із пам'яті – і лише з пам'яті, з регістру не можна) обидва регістри – cs та eip/ip. Перше слово/подвійне слово цієї адреси представляє зміщення та завантажується в ip/eip; друге/третє слово завантажується в cs. Команда безумовного переходу jmp

Синтаксис команди безумовного переходу – jmp [модифікатор] адреса_переходу – безумовний перехід без збереження інформації про точку повернення.

Адрес_перехода є адресу як мітки чи адресу області пам'яті, де знаходиться покажчик переходу.

Загалом у системі команд мікропроцесора є кілька кодів машинних команд безумовного переходу jmp.

Їх відмінності визначаються дальністю переходу та способом завдання цільової адреси. Дальністьпереходу визначається місцезнаходженням операнда адреса_переходу.Ця адреса може знаходитися в поточному сегменті коду або в іншому сегменті. У першому випадку перехід називається внутрішньосегментним,або близьким,у другому - міжсегментним,або далеким.Внутрішньосегментний перехід передбачає, що змінюється лише вміст регістру eip/ip.

Можна виділити три варіанти внутрішньосегментного використання команди jmp:

1) прямий короткий;

2) прямий;

3) непрямий.


Процедури

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

1) механізм процедур;

2) макроассемблерів;

3) механізм переривань.

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

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

Для опису послідовності команд як процедури в мові асемблера використовуються дві директиви: PROC і ENDP.

Синтаксис опису процедури такий (рис. 36).


Мал. 36. Синтаксис опису процедури у програмі


З малюнка 36 видно, що у заголовку процедури (директиві PROC) обов'язковим є завдання імені процедури. Серед великої кількості операнда директиви PROC слід особливо виділити [відстань]. Цей атрибут може набувати значення near або far і характеризує можливість звернення до процедури з іншого сегмента коду. За умовчанням атрибут [відстань] набуває значення near.

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

Умовні переходи

Мікропроцесор має 18 команд умовного переходу. Ці команди дозволяють перевірити:

1) відношення між операндами зі знаком («більше – менше»);

2) відношення між операндами без знака («вище – нижче»);

3) стан арифметичних прапорів ZF, SF, CF, OF, PF (але не AF).

Команди умовного переходу мають однаковий синтаксис:

jcc тега_переходу

Як видно, мнемокод усіх команд починається з «j» – від слова jump(стрибок), її –визначає конкретну умову, аналізовану командою.

Щодо операнда метка_переходу,то ця мітка може бути тільки в межах поточного сегмента коду, міжсегментна передача управління в умовних переходах не допускається. У зв'язку з цим відпадає питання про модифікатора, який був у синтаксисі команд безумовного переходу. У ранніх моделях мікропроцесора (i8086, i80186 та i80286) команди умовного переходу могли здійснювати лише короткі переходи – на відстань від -128 до +127 байт від команди, що йде за командою умовного переходу. Починаючи з моделі мікропроцесора 80386 це обмеження знято, але, як бачите, тільки в межах поточного сегмента коду.

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

Джерелами такої умови можуть бути:

1) будь-яка команда, що змінює стан арифметичних прапорів;

2) команда порівняння стор, що порівнює значення двох операндів;

3) стан регістру есх/сх.


Команда порівняння cmp

Команда порівняння стор має цікавий принцип роботи. Він абсолютно такий самий, як і у команди віднімання – sub операнде, операнд_2.

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

Синтаксис команди стр - стр операнд_1, операнд_2 (compare) - порівнює два операнди і за результатами порівняння встановлює прапори.

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

Таблиця 16. Значення абревіатур у назві команди jcc
Таблиця 17. Перелік команд умовного переходу для команди операнд_1, операнд_2

Не дивуйтеся тієї обставини, що однаковим значенням прапорів відповідає кілька різних мнемокодов команд умовного переходу (вони відокремлені косою межею в табл. 17). Різниця у назві обумовлена ​​бажанням розробників мікропроцесора полегшити використання команд умовного переходу у поєднанні з певними групами команд. Тому різні назви відображають швидше різну функціональну спрямованість. Проте те, що ці команди реагують на ті самі прапори, робить їх абсолютно еквівалентними та рівноправними в програмі. Тому в таблиці 17 вони згруповані не за назвами, а за значеннями прапорів (умов), на які вони реагують.


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

Мнемонічне позначення деяких команд умовного переходу відображає назву прапора, з яким вони працюють, і має таку структуру: першим іде символ «j» (Jump,перехід), другим - або позначення прапора, або символ заперечення "n", після якого стоїть назва прапора. Така структура команди відбиває її призначення. Якщо символу «n» немає, то перевіряється стан прапора, якщо він дорівнює 1, переходить на мітку переходу. Якщо символ «n» присутній, то перевіряється стан прапора на рівність 0, й у разі успіху відбувається перехід на мітку переходу.

Мнемоди команди, назви прапорів та умови переходів наведені в таблиці 18. Ці команди можна використовувати після будь-яких команд, що змінюють зазначені прапори.

Таблиця 18. Команди умовного переходу та прапори

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


Команди умовного переходу та регістр есх/сх

Архітектура мікропроцесора передбачає специфічне використання багатьох регістрів. Наприклад, регістр EAX/AX/AL використовується як акумулятор, а регістри ВР, SP – до роботи зі стеком. Реєстр ЕСХ/СХ також має певне функціональне призначення: він виконує роль лічильникау командах управління циклами та при роботі з ланцюжками символів. Можливо, що функціонально команду умовного переходу, пов'язану з регістром есх/сх, правильніше було б віднести до цієї групи команд.

Синтаксис цієї команди умовного переходу такий:

1) jcxz мітка_переходу (Jump if ex is Zero) - перехід, якщо сх нуль;

2) jecxz мітка_переходу (Jump Equal есх Zero) – перехід, якщо есх нуль.

Ці команди дуже зручно використовувати при організації циклу та при роботі з ланцюжками символів.

Слід зазначити обмеження, властиве команді jcxz/jecxz. На відміну з інших команд умовної передачі управління команда jcxz/jecxz може адресувати лише короткі переходи – на -128 байт чи +127 байт від наступної команди.

Організація циклів

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

Дамо коротку характеристику цим командам: 1) loop метка_переходу (Loop) - повторити цикл. Команда дозволяє організувати цикли, подібні до циклів for у мовах високого рівня з автоматичним зменшенням лічильника циклу. Робота команди полягає у виконанні наступних дій:

б) порівняння регістру ЕСХ/СХ з нулем: якщо (ЕСХ/СХ) = 0, то управління передається на наступну після loop команду;

2) loope/loopz тега_переходу

Команди loope та loopz – абсолютні синоніми. Робота команд полягає у виконанні наступних дій:

а) декременту регістру ЕСХ/СГ;

в) аналіз стану прапора нуля ZF якщо (ЕСХ/СХ) = 0 або XF = 0, управління передається на наступну після loop команду.

3) loopne/loopnz тега_переходу

Команди loopne та loopnz також абсолютні синоніми. Робота команд полягає у виконанні наступних дій:

а) декременту регістру ЕСХ/СГ;

б) порівняння регістру ЕСХ/СХ із нулем;

в) аналіз стану прапора нуля ZF: якщо (ЕСХ/СХ) = 0 або ZF = 1, управління передається на наступну після loop команду.

Команди loope/loopz та loopne/loopnz за принципом своєї роботи є взаємозворотними. Вони розширюють дію команди loop тим, що додатково аналізують прапор zf, що дає можливість організувати достроковий вихід із циклу, використовуючи цей прапор як індикатор.

Недолік команд організації циклу loop, loope/loopz і loopne/loopnz у тому, що вони реалізують лише короткі переходи (від -128 до +127 байт). Для роботи з довгими циклами доведеться використовувати команди умовного переходу та команду jmp, тому постарайтеся освоїти обидва способи організації циклів.

Основи програмування МП пристроїв (Лекція)

ПЛАН ЛЕКЦІЇ

1.Класифікація команд мікропроцесора

2. Види адресації

3. Структура та формати команд МП КР580ВМ80

1.Класифікація команд мікропроцесора

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

Класифікація команд МП представлена ​​малюнку 8.

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

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

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

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

До команд пов'язаних із зверненням до пам'яті належать:

ЗАПАМ'ЯТАТИ(ЗАПИСАТИ), за якою вміст регістру посилається в комірку пам'яті.

У командах, пов'язаних з пересиланням байта або слова, повинні вказуватися номер конкретного регістру, адреса осередку пам'яті і, якщо необхідно, номер модуля ЗУ.

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

Завантажити безпосередньо,поки в регістр записується константа, зазначена в коді команди;

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

До команд введення-виводу відносяться:

ВВЕДЕННЯ, по якому вміст пристрою введення посилається у внутрішній регістр МП;

ВИСНОВОК, який вміст внутрішнього регістра МП (зазвичай акумулятора) пересилається в пристрій виведення.

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

До команд безумовного переходу належать:

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

БЕЗУМОВНИЙ ПЕРЕХІД З ПОВЕРНЕННЯМ(перехід до підпрограми), за якою в програмний лічильник записується новий вміст (адреса першої команди підпрограми), але на відміну від команди БП в пам'яті зберігається стан програмного лічильника та деяких інших регістрів. При виконанні підпрограми за її останньою командою ПОВЕРНЕННЯ відновлюється вміст програмного лічильника та всіх регістрів.

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

УМОВНИЙ ПЕРЕХІД(УП) за адресою. поля команди УП, тобто. забезпечується перехід у програмі за адресою, вказаною в команді. При невиконанні умови керування передається наступній команді програми;

УМОВНИЙ ПЕРЕХІД З ПОВЕРНЕННЯМ, яка відрізняється від команди БЕЗУМОВНИЙ ПЕРЕХІД З ПОВЕРНЕННЯМ тим, що перехід до підпрограми відбувається тільки при виконанні зазначеної умови.

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

Команди обробки даних діляться на арифметичні та логічні. До арифметичних відносяться:

Складативміст двох регістрів або регістра та комірки пам'яті;

ВИЧАСТЬіз вмісту осередку пам'яті або регістра вміст регістру;

ЗБІЛЬШИТИ НА 1(ІНКРЕМЕНТ) вміст осередку пам'яті або регістру (покажчика стека, індексного регістру, акумулятора);

Зменшити на 1(ДЕКРЕМЕНТ) вміст комірки пам'яті чи регістру;

Складати з обліку переносу, За якою виконується складання з урахуванням стану тригера переносу. Це дозволяє легко організувати обробку чисел великої довжини;

ВИЛІК З ОБЛІКОМ позики;

Сдвигвмісту комірки пам'яті або регістру (зазвичай на один розряд).

До підгрупи логічних команд входять команди:

І(ЛОГІЧНЕ ПОМНОЖИТИ),по якій виконується операція кон'юнкції між вмістом двох регістрів або комірки пам'яті та регістра;

АБО(ЛОГІЧНО СЛОЖИТЬ),по якій виконується операція диз'юнкції між вмістом двох регістрів або комірки пам'яті та регістра;

НЕРІВНОЗНАЧНІСТЬ, за якою проводиться порозрядне порівняння вмісту двох регістрів або комірки пам'яті та регістра;

ІНВЕРСІЯвмісту клітинки пам'яті або регістру.

2. Види адресації

Однією з найважливіших архітектурних характеристик МП є перелік можливих способів звернення до пам'яті або видовідресації. Можливості МП за адресацією суттєві з двох точок зору.

По-перше, великий обсяг пам'яті вимагає великої довжини адреси, оскільки n – розрядна адреса дозволяє звертатися до пам'яті ємністю 2n слів. Типові 8-розрядні слова МП дають можливість безпосередньо звертатися тільки до 256 осередків пам'яті, що явно недостатньо. Якщо врахувати, що звернення до пам'яті є операцією, що найчастіше зустрічається, то очевидно, що ефективність використання МП багато в чому визначається способами адресації до пам'яті великого обсягу достатньої розрядності МП.

По-друге, для зручності програмування бажано мати просту систему формування адрес даних під час роботи з масивами, таблицями і покажчиками. Розглянемо способи вирішення цих проблем.

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

Для узгодження адресного поля команди малої розрядності з пам'яттю великого обсягу (для вирішення "сторінкової" проблеми) у МП застосовуються різні види адресації:

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

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

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

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

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

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

3. Структура та формати команд МП КР580ВМ80

Система команд МП серії КР580ВМ80 містить триформати. однобайтні,двобайтні та трибайтні.

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

Якщо у виконанні операції беруть участь регістри, то один або два з них можуть бути вказані в першому байті команди. При цьому під номери регістрів у полі команди відводяться цілком певні розряди: три молодших розряди (b2 – b0) кодують номер регістру джерела, що містить операнд, а три середніх (b5 – b3) – номер регістра-приймача, який посилається результат операції. коли обидва або один з цих регістрів не беруть участь у виконанні операції, відповідні розряди використовуються під код операції.

Прийнято таке кодування регістрів:

000 - регістр, 100 - регістр Н,

001 – регістр С,101 – регістр L,

010 – регістр D,110 – осередок пам'яті,

011 – регістр Е,111 – акумулятор А.

Код 100 є ознакою непрямої адресації до пам'яті за допомогою 16-розрядного адреси, розміщеного в регістрах Н і L. Залежно від розташування цього коду в команді, звернення до відповідної комірки пам'яті проводиться або за операндом, або для запису результатів операції.

Ряд команд МП передбачає обробку або передач чисел подвійної довжини. У цих випадках пари регістрів В і С, D і Е або Н і L об'єднуються в 16-розрядні регістри, що мають номери 00,01 і 10 відповідно. Під номери регістрових пар у командах відводяться розряди b2 і b1 (реєстр-джерело), ​​b5 і b4 (регістр-приймач), а розряди b0 і b3 використовуються для вказівки коду операції.

Відповідно до другого байта команди цієї групи містить 8-розрядний операнд або 8-розрядну адресу пристрою введення або виведення.

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

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

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

де S - ознака "знака" (приймає значення старшого розряду

результату);

Z – ознака нульового результату;

АС – ознака допоміжного перенесення (якщо є перенесення

між зошитами байта, то АС=1, інакше АС=0;

Р – ознака парності результату (якщо число одиниць у байті

результату парно, то Р = 1, інакше Р = 0);

С - ознака перенесення або позики (якщо при виконанні коман-

ди виник перенесення зі старшого розряду або позику в старий

ший розряд то С = 1, інакше С = 0).

Примітка: Для команд логічного множення ознака допоміжного перенесення АС набуває значення четвертого розряду результату.

Повністю система команд МП серії КР580ВМ80 наведена у додатку навчального посібника "Мікропроцесори та мікропроцесорні системи". Там же для кожної команди вказується як після її виконання змінюється значення кожної ознаки: встановлюється відповідно до результату операції (+), не змінюється (–), скидається в нуль (0) або встановлюється в одиницю (1).

Загалом команда повинна містити таку інформацію:

-Код операції, що вказує операцію, яку повинен виконати МП;

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

-Адреса осередку пам'яті в яку повинен бути поміщений результат операції;

-Адреса наступної команди.

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

У системі команд МП серії 580 є однобайтні, двобайтні та трибайтні команди.

Інформація про спосіб адресації виконуваної команди міститься в коді операції першого байта команди.

Для прискорення обчислень деякі операнди зберігаються у блоці РОН. Команди, які працюють із цими операндами, використовують укорочені адресні коди (реєстрову адресацію).

Ці команди дозволяють виключити порівняно довгий цикл звернення до ОЗУ і цим істотно підвищити швидкість виконання операцій. У зв'язку з обмеженою розрядністю РОН і під час роботи з великим масивом даних, використовуються інші методи адресації, які дозволяють звертатися до операндам, які у зовнішній стосовно МП пам'яті. Найбільш поширеною є непряма реєстрова адресація, яка використовує реєстрову пару HL.

У групі команд передачі управління розрізняють чотири типи команд: безумовні переходи, умовні переходи, цикли та переривання .

Команди безумовних переходів. Включають три мнемокод: JMP (безумовний перехід), CALL (виклик підпрограми) і RET (повернення з підпрограми).

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

Перший формат забезпечує перехід у довільну точку програми всередині поточного програмного сегмента, для чого до вмісту IP додається додатковий код 16-розрядне зміщення, старший розряд якого є знаковим. Другий, укорочений формат дозволяє перейти до точки програми, що знаходиться не більше ніж на -128-f-127 адрес від команди JMP. Нарешті, третій формат здійснює завантаження покажчика команд 16-розрядним числом, розміщеним за виконавчою адресою ЕА, що визначається постбайтом. Цей перехід називається непрямим, оскільки використовується непряма адресація.

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

Четвертий формат визначає прямий міжсегментний перехід, при якому в другому та третьому байтах формату вказано відносну адресу точки переходу, а в четвертому та п'ятому байтах - нове значення CS. П'ятий формат за допомогою постбайту дозволяє визначити виконавчу адресу ЕА, за якою знаходиться відносна адреса точки переходу (у байтах пам'яті з адресами ЕА, ЕА+1), та нове значення CS (у байтах пам'яті ЕА+2, ЕА+3).

Команда CALL дозволяє викликати підпрограму, розташовану як у поточному програмному сегменті, так і в іншій області пам'яті. Вона має такі самі формати, як і команда JMP, за винятком укороченого. На відміну від команди JMP аналогічного формату за командою CALL перед зміною значень IP або IP та CS відбувається автоматичний запис у стек поточних значень цих регістрів, що забезпечує запам'ятовування точки повернення з підпрограми.

Для повернення з підпрограми використовується команда RET, під дією якої відбувається передача керування на адресу повернення, занесеному до стека при виконанні попередньої команди CALL. При поверненні з підпрограм, розташованих у поточному програмному сегменті, застосовуються перші два формати команди RET, причому другий формат відрізняється від першого тим, що до вмісту покажчика стека додається константа, записана у 2-му та 3-му байтах команди. Це дозволяє одночасно з поверненням з підпрограми скидати параметри, записані в стек при виконанні цієї підпрограми і які не використовуються в подальшому.

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

Команди умовних переходів.Здійснюють передачу керування залежно від результатів попередніх операцій. Розрізняють три різновиди умовних переходів, які використовуються для встановлення співвідношень чисел зі знаком, чисел без знака та довільних чисел. У перших двох різновидах для тих самих співвідношень між числами вибираються різні мнемокоды команд, оскільки одним і тим самим співвідношенням чисел зі знаком і чисел без знака відповідають різні значення прапорів.

У мнемокодах команд умовних переходів при порівнянні чисел зі знаком для позначення умови «більше» використовується буква G (Greater- більше), а для позначення - «менше» буква L (Less- Менше). Для аналогічних умов при порівнянні чисел без знака використовуються відповідно букви A (Above- над) та В (Below- Під). Умова рівності позначається буквою Е (Equal- одно), а невиконання певної умови - буквою N (Not- Не). Слід зазначити, що допускається використання двох різних мнемокодів для кожної команди; наприклад, мнемокоды JL і JNGF - еквівалентні, оскільки умови "менше" і "не більше або одно" - ідентичні.

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

Таблиця 1.4

Менімокод команди Умова Значення прапорів
Для чисел зі знаком
JL/JNGE Менше/не більше чи одно SF + OF = l
JNL/JGE Не менше/більше або одно SF + OF = 0
JG/JNLE Більше/не менше чи одно (SF + OF) V ZF = 0
JNG/JLE Не більше/менше або одно Для чисел без знака (SF + OF) V ZF = l
JB/JNAE Менше/не більше чи одно CF = 1
JNB/JAE Не менше/більше або одно CF = 0
JA/JNBE Більше CF V ZF = 0
JNA/JBE Не більше Для інших даних CF V ZF = 1
JE/JZ Рівно/по нулю ZF = 1
JNE/JNZ Не одно/по нулю ZF = 0
JS за мінусом SF = 1
JNS По плюсу SF = 0
JO По переповненню OF = l
JNO За відсутністю переповнення OF = 0
JP/JPE По парному паритету PF = 1
JNP/JPO По парному паритету PF = 0

Усі команди умовних переходів мають однаковий двобайтовий формат, у першому байті якого задається код операції (КОП), а у другому - 8-розрядне зміщення, яке розглядається як число зі знаком і, отже, дозволяє здійснювати зміну адреси в діапазоні від -128 до + 127. За необхідності більш віддаленого («далекого») переходу на виконання умови використовується додатково команда безумовного переходу.

Час виконання кожної з команд умовних переходів зазначено для двох випадків: 1) умова виконана та управління дійсно передається відповідно до зміщення; 2) умова не виконана, так що управління передається наступній команді.

Команди організації циклів.Введені в ЦП для зручності виконання обчислювальних циклів. До них відносяться такі мнемокоди: LOOP (цикл, поки (СХ) не дорівнює 0), LOOPNZ/LOOPNE (цикл, поки не нуль/не дорівнює), LOOPZ/LOOPE (цикл, поки нуль/рівно) та JCXZ (перехід по нулю у СГ). Кожна з цих команд має двобайтовий формат, у другому байті якого вказується 8-розрядне зміщення, яке використовується для організації переходу. Це усунення сприймається як число зі знаком і перед обчисленням адреси переходу воно розширюється зі знаком до 16 розрядів.

Використовуючи команди циклів разом із командами маніпуляції елементами рядків, можна становити досить складні програми перетворення рядків. Розглянемо приклад складання програми для перекладу рядка даних, записаних у шістнадцятковій системі числення, деякий код, для якого перекодувальна таблиця знаходиться в пам'яті з початкової адреси, вказаної в ВХ, як це потрібно для використання команди табличного перетворення кодів XLAT. Нехай далі вихідний рядок містить 80 елементів і знаходиться в пам'яті з відносної початкової адреси 100, а рядок-результат повинна бути розміщена з відносної адреси 200. :

MOV SI 100
MOV DI,200
MOV СГ, 80

Тут використано команду табличного перетворення кодів XLAT, описану в 1.2.

Команди переривання.Включають три мнемокод: INT (переривання), INTO (переривання при переповненні) та IRET (повернення з переривання).

Команда переривання INT при v = 1має двобайтовий формат, другий байт якого містить 8-розрядне число, що визначає тип (type)або рівень переривання. За командою INT typeпроцесор переходить до виконання програми обслуговування переривання зазначеного рівня, причому автоматично виконуються дії, необхідні забезпечення повернення в точку переривання. Ці дії полягають у наступному: вміст регістру прапорів F записується в стек (PUSHF), скидаються прапори IF і TF, поточні значення регістру CS та покажчика команд IP записуються в стек.

Для визначення початкової адреси програми обслуговування відповідно до значення typeвикористовується таблиця рівнів переривання. Для кожного з 256 рівнів переривань у цій таблиці відведено по чотири байти: перші два байти визначають значення покажчика команд IP, другі - значення сегментного регістру CS. Ця четвірка байтів визначає початкові адреси програм обслуговування (пари значень CS, IP), які мають бути попередньо записані до осередків пам'яті за абсолютними адресами 0-3FFH. Адреса таблиці, що відповідає вказаному у команді INT typeрівнем переривання, визначається ЦП наступним чином. Після запам'ятовування у стеку поточних значень CS та ГР здійснюються завантаження: CS = type x 4 + 2 та IP = type x 4. Нові значення CS та IP, взяті відповідно з осередків з адресами type x 4 + 2 і type x 4, визначають початкову адресу необхідної програми обслуговування.

Розглянута вище команда переривання INT під час поля v = 0має однобайтовий формат, тобто не вимагає спеціальної вказівки рівня переривання. Ця команда автоматично сприймається процесором як переривання третього рівня. (type=3)і зазвичай використовується в програмах як контрольна точка.

Команда переривання під час переповнення INTO викликає перехід на обслуговування переривання четвертого рівня (type = 4)у разі, коли значення прапора переповнення OF = 1.Команда INTO зазвичай використовується після арифметичних команд над числами зі знаком. Зазвичай кілька перших рівнів переривань (до 32) резервуються під обробку низки специфічних ситуацій, таких, наприклад, як спроба поділу на нуль, переповнення тощо.

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

Однобайтова команда IRET ставиться наприкінці кожної програми обслуговування переривання та забезпечує повернення з переривання. За цією командою процесор витягує зі стека значення вказівника команд IP та програмного сегмента CS, а також відновлює колишній вміст регістру прапорів F (як і за командою POPF). При необхідності вміст інших регістрів ЦП, відповідне перерваної програмі, може бути запам'ятоване у стеку під час переходу програму обслуговування і потім відновлено під час повернення з неї з допомогою команд звернення до стеку.

За непрямою адресою

PCHL – адреса переходу зберігається у реєстровій парі HL. Під час її виконання (HL) → PC.

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

Jcon @, де con – мнемоніка умови від англійського слова condition.

Раніше зазначалося, що як умова переходу використовують стан розрядів (прапорців) РгП (F). Мнемоніка, що відповідає цим станам, представлена ​​на рис. 6.18.

Наприклад: JC 8BFE – при C=1 перехід на адресу 8BFE, при C=0 виконується наступна за адресою команда.

Команди виклику ПП та повернення

Раніше зазначалося, що адресу повернення автоматично зберігається у стеку, тобто. (PC) ® стек.

Безумовні команди

CALL @ – виклик підпрограми;

RET – повернення із підпрограми.

Умовні команди

Ccon @ – виклик підпрограми;

Rcon – повернення із підпрограми.

Дія команд аналогічно дії команд умовного переходу, тобто. якщо умова істинна, то виклик чи повернення. Якщо ні, виконуються такі команди.

Інші команди управління

RST n, де n = 0,1,...,7 – рестарт за вектором переривання n.

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

Ця адреса задається наступним чином. Команда RST має структуру 11NN N111, тобто. один байт. Трирозрядна комбінація NNN визначається значенням n (n = 0...7). У лічильник команд РС заноситься значення 0000 0000 00NN N000, яке є адресою відповідного вектора переривання.

Таким чином, задаючи певне значення n, можна сформувати адресу одного з 8 векторів переривання. Ці адреси розташовуються у зоні від 0000H до 0038H адресного простору і йдуть через 8 байт, тобто. під них зарезервовані перші 64 осередки пам'яті (кожному з 8 векторів відведено по 8 байт). У цих зонах (по 8 байт) записують лише команди переходу до відповідних підпрограм (обробників), які розміщуються в інших областях пам'яті.

Підпрограми, що переривають (як і звичайні підпрограми) обов'язково закінчуються командою RET. У процесі виконання цієї команди адреса команди основної програми, перед якою відбулося переривання, вибирається зі стека і передається в регістр адреси РА, а збільшене на 1 значення заноситься в лічильник команд.

EI – дозвіл переривання. Ця команда ставиться на початку ділянки програми, де дозволено переривання. За цією командою тригер дозволу переривання в УУ МП встановлюється стан 1.

DI – заборона переривання. Ця команда ставиться наприкінці ділянки програми, у якому дозволялося переривання, і скидає тригер у стан 0.

NOP – "порожня" команда. Здійснює перепустку 4-тактів. Змінюється лише PC.

HLT – зупинка. Викликає припинення виконання програми та перехід у стан зупинки. МП відключається від зовнішніх шин адреси та даних (тобто їх буфери переходять у стан Z). На виході WAIT (очікування) встановлюється рівень 1. Це може бути перервано сигналами запуску МП чи переведенням їх у стан переривання.

ПИТАННЯ ДЛЯ САМОПРОВІРКИ

1. Які пристрої необхідні для створення найпростішої мікро-ЕОМ?

2. Перерахуйте 5 варіантів структур мікро-ЕОМ.

3. Використання проміжного інтерфейсу.

4. Що включає поняття "контролер ПУ"?

5. Перерахуйте параметри процесора I8080.

6. Регістри даних. Їхнє призначення.

7. Реєстри ознак. Які ознаки зберігаються у цих регістрах?

8. Опишіть принцип двонаправленого обміну даними між внутрішньою та зовнішньою ШД.

9. Якими регістрами програміст може скористатися?

10. Наведіть структурну схему мікро-ЕОМ з урахуванням МП КР580ВМ80.

11. З яких тактів складається машинний цикл?

12. Перерахуйте формати даних МП КР580ВМ80.

13. Перерахуйте формати команд МП КР580ВМ80.

14. Які методи адресації застосовують у МП КР580ВМ80?

15. На які групи можна поділити команди МП КР580ВМ80?

16. Пересилання однобайтові. Наведіть приклади команд із цієї групи.

17. Пересилання двобайтове. Наведіть приклади команд із цієї групи.

18. Які операції в акумуляторі знаєте.

19. Операції в РОН та пам'яті. Які операції до них належать?

20. Перерахуйте команди керування.

КОНТРОЛЬНІ ЗАВДАННЯ

1. На аркушах відповіді мають бути вказані номер групи, прізвище студента та номер його варіанта.

2. Номери запитань обираються студентом відповідно до двох останніх цифр у заліковій книжці. У табл.6.1 а n-1 – передостання цифра номера, а n – остання цифра. У клітинах таблиці стоять номери питань, куди потрібно дати письмову відповідь.

Номери питань Таблиця 6.1

a n a n-1
1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18
3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17
2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18
3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18
1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17
3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19 1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16
1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19 3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19
4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19 1,9,11,14,20 2,10,12,15,18 3,5,8, 13,17 4,6,7, 14,19
1,8,10,13,17 2,5,7, 14,18 3,6,8, 15,19 4,7,9, 13,16 1,5,12,14,20 2,6,11,15,16 3,7,10,13,17 4,8,9, 14,18 1,7,12,13,18 2,8,10,14,19
3,5,11,15,20 4,6,9, 13,17 2,7,9, 13,20 1,8,11,15,19 4,5,10,15,17 3,6,12,14,16 1,5,9, 13,16 2,6,10,14,17 3,7,11,15,18 4,8,12,13,19

Операція безумовного переходу(БП) належить до операцій безумовної передачі керування і ось у чому. На початку операції вміст СчК, що вказує на команду, яка слідує за БП(адреса повернення), пересилається в Р1 АУ у разі, якщо в програмі передбачено повернення; це дозволяє зберегти адресу повернення шляхом подальшого пересилання вмісту Р1 (наприклад, операцією ЗГ) на згадку. Для цього в перших командах ділянки програми, до якої виконано перехід, має бути передбачена відповідна операція. На наступному етапі операції з осередку ОЗП або ПЗУ з адресою, вказаною в команді БП, в СЧК зчитується вміст 1-14 розрядів, який є адресою переходу. За цією адресою далі робиться звернення до ПЗУ за командою, до якої здійснюється перехід.

Операція зсуву

У форматі зсуву (ФСД) кодуються операції «Зсув арифметичний правий (лівий)» «Зсув логічний правий (лівий)». За її виконанні дії проводяться над числом, які у АУ. Ознаками у команді задаються: напрямок зсуву (5 р), типи зрушень (8,9 р) та їх кількість (1-4 р). У процесі виконання операції зсуваються розряди регістру Р2, результат фіксується в регістрах Р2 і РСм, причому зсув праворуч здійснюється на 3 розряди одночасно, зрушення вліво-на 1 розряд. Значення 5 розряду, що дорівнює «1» визначає зсув вліво, що дорівнює «0» -вправо.

Операції є циклічними. Кількість циклів зсуву підраховується лічильником циклів (СчЦ). Перед виконанням циклічної частини операції СЧЦ пересилається вміст 1-5 розрядів команди, що містить константу і знак зсуву. Далі вміст Р2 пересилається до РСм. Сам зсув здійснюється за рахунок «косого» перепису вмісту регістрів Р2 і Рсм в Р2 і Рсм відповідно. Потім результат зсуву з РСм і Р2 через СМ1 і СМ2 переписується в Р2 і РСМ. Про закінчення операції свідчить значення СлЦ = 0.

Залежно від типу зсуву (Л або А) зсуваються або всі 16 розрядів (Л) або лише 15 розрядів (мантіса) без знакового (А). При А зрушенні вправо звільнені старші розряди заповнюються знаком, а при зрушенні молодші розряди, що вліво звільнилися, заповнюються нулями. При логічному зрушенні вправо або вліво розряди, що звільнилися, заповнюються нулями.

Також можна програмно змінювати константу зрушень.

32 Взаємодія вузлів та елементів структурної схеми процесора СВ під час операцій умовного переходу.

Операції умовного переходу



Виконання операції починається з перевірки виконання умови переходу шляхом порівняння значення ознаки результату попередньої операції з кодом «маски» в команді. Якщо умова виконана, відбувається перехід до виконання команди, адреса якої перебуває у адресно-операндної частини формату ФУП. Якщо ж умова переходу не виконується, то виконується команда, яка у програмі за командою «Умовний перехід».

Команда «Умовний перехід» (УП) займає два розташовані осередки ПЗУ. У першому осередку міститься команда, на другий адресу переходу. Умовний перехід визначається комбінацією у 7-9 розрядах команди, умова розміщення адреси повернення визначається 6 розрядом.

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

При невиконанні умови переходу наступна команда вибирається із комірки з кодом адреси i+2. У разі зазначений код(адреса повернення) заноситься в Р1 незалежно від значення 6 розряду команди. Останнє визначається алгоритмом роботи процесора СВ під час розшифрування коду операції УП.

Занесення адреси повернення на РСМ пов'язане з тим, що вихід у кодову шину з АУ має лише вказаний регістр.

Особливістю виконання операції УП є те, що за наявності в розрядах маски команди коду 111 або 000 умовний перехід вироджується в безумовний або операцію засилки в базові регістри відповідно. У цих випадках адресами переходу або адресою засилки до базових регістрів є вміст адресно-операндної частини команди (АВЧ).

При виконанні операції заслання БР вміст АОЧ пересилається в один або відразу кілька БР залежно від вмісту 15-17 розрядів команди. Адреса повернення у разі Р1 і Рсм не пересилається.



Виконання операції УП як операції БУП може бути використане у перериваннях для переходу до програм, що переривають. Для цього у 5 розряді команди виставляється ознака напрограмованого переходу (ПНП). В цьому випадку команда зчитується в процесор з ПЗП за сигналом переривання (НВП). При цьому адреса звернення до ПЗП (адреса переривання) виробляється схемою переривання процесора.

Особливістю виконання операції в цьому випадку є те, що адресою повернення при перериваннях є не адреса команди, яка йде за командою у форматі ФУП, а адреса команди, перед якою відбулося переривання. Обробка сигналу НВП відбувається наступним чином. За цим сигналом схема переривання процесора виробляє адресу переривання (АПр), рівну адресою першого осередку команди переходу форматі ФУП(i). Ця адреса через комутатор та регістр адреси ПЗУ передається на згадку. Адреси переривань підібрані таким чином, що адреса першого осередку команди УП(i) є парною, а адреса другого осередку (i+1) – непарною. Друга адреса виходить шляхом зміни (апаратурно) молодшого розряду без участі СчК з нуля на одиницю. У процесі зчитування команди з ПЗУ та її виконання вміст СЧК (K+1) запам'ятовується в регістрі Р1 АУ, а вміст другого осередку команди (i+1), що є адресою переходу до команди з адресою j заноситься в СЧК. За новим вмістом СчК робиться звернення до ПЗП. Таким чином, у регістрі Р1 запам'ятовується адреса наступної команди на момент переривання (K+1). Після відпрацювання переривання ця адреса використовується для повернення до перерваної програми.

33 Взаємодія вузлів та елементів структурної схеми процесора СВ при виконанні операцій управління процесором та системою.