You are on page 1of 31

1

Лабораторна робота №10


ФОРМАТИ КОДУВАННЯ КОМАНД МІКРОПРОЦЕСОРА 8086

Мета роботи:
 Дослідження форматів команд та особливостей їх кодування для 16-
розрядного мікропроцесора 8086.
 Відновлення символічного запису команди за її машинним
представленням.

Теоретичний матеріал
Формати команд
Команди мікропроцесора 8086 мають змінну довжину від 1 до 6 байт. За
кількістю операндів, які обробляються команди підрозділяються на безадресні,
одноадресні і двоадресні. У двоадресних командах результат завжди
записується за першою адресою і лише один з операндів може знаходитися в
пам'яті. При цьому в мнемоніці, операнд-приймач записується зліва від коми-
роздільника операндів, а операнд-джерело – справа. Всього існує чотири
джерела операндів: тіло команди, регістр, пам'ять і порт введення/виведення. У
першому випадку операнд називається безпосереднім.
Перший байт команди містить код операції (КОП), до складу якого
можуть входити спеціальні розряди d, s і w. При w=1 операції виконуються з
16-розрядними словами, при w=0 – з байтами. Розряд d визначає напрям
передачі даних в двооперандних командах: з регістра в регістр/пам'ять (d=0)
або з регістра/пам'яті в регістр (d=1). S – визначає розширення 8-бітових
безпосередніх даних до повного розміру (s=1) чи ні (s=0). При деяких
поєднаннях команд і методів адресації (регістровий метод адресації) положення
операнда може задаватися безпосередньо у байті коду операції, але частіше для
цього використовується т.з. «постбайт».
У командах, що мають довжину 2 і більш байта, другий байт називається
постбайтом. Він виконує функції кодування адрес операндів. Байти 3 – 6
присутні в команді залежно від типу адреси операнда, описаного постбайтом і
наявність безпосереднього операнда.
Постбайт складається з трьох полів: режиму - MOD, регістра - REG і
регістра/пам’яті - R/M. Поле MOD займає 2 біта (6 і 7) постбайта. Поле REG
займає 3 біта (3-5) постбайта. Поле R/M займає 3 біта (0-2) постбайта. Полями
MOD і R/M спільно кодується тип адреси операнда, що знаходиться в пам'яті
або регістрі. 32 значення цих полів визначають знаходження операнда 24
можливими методами адресації або в одному з 8 регістрів.
Нижче приведена структура байта коду операції і постбайта, а в таблицях
показано формування адрес регістрових операндів і адрес операндів пам'яті.
DISP8 і DISP16 – зміщення завдовжки 8 і 16 біт, розташовані в команді
безпосередньо за байтом адресації.
2

Рис.1. Формат байта КОП та пост байта

Таблиця 1. Формат поля REG

Таблиця 2. Кодування типу адреси операнда

В цій таблиці окрім визначення режиму адресації оперативної пам’яті


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

можливо введенням спеціального префікса (додаткового байта, який


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

Таблиця 3

Система команд та її кодування


Команди передачі даних
Команди передачі даних призначені для пересилок даних між регістрами і
пам'яттю. Цю групу команд можна розділити на чотири підгрупи: команди
пересилки даних загального призначення; команди, що використовують
акумулятор; команди пересилки адресних об'єктів; команди пересилки
прапорців. Всі команди цієї групи не впливають на встановлення прапорців, за
виключенням команд SAHF і POPF.
4

Арифметичні команди
Арифметичні команди призначені для виконання чотирьох основних
видів арифметичних дій над 8- і 16-розрядними операндами в знаковому і
беззнаковому представленні. Окрім основних арифметичних команд є операції
корекції арифметичних результатів для їх переведення в упаковану або
неупаковану форму. Ознаки одержаного результату відображаються в 6 бітах
регістра Flags (CF, AF, SF, ZF, PF і OF).
5
6

Логічні команди
Логічні команди призначені для виконання чотирьох логічних дій над 8- і
16-бітовими логічними структурами: отримання інверсного коду, логічний
добуток, логічна сума, сума по модулю два. Команди AND, TEST, OR і XOR
впливають на арифметичні прапорці наступним чином: прапорці OF і CF
завжди скидаються в нульовий стан; стани прапорців SF, ZF, PF залежать від
отриманого результату і визначаються за тими ж правилами, що і в командах
арифметичних операцій; стан прапорця AF не визначений. Команда NOT не
впливає на стани прапорців.
7

Команди зсуву
Команди зсуву призначені для виконання логічних, арифметичних і
циклічних зсувів. Поле операнда має формат mem/reg, count. Тут mem/reg
адресує регістр або елемент пам'яті, а count (рахунок або лічильник) визначає
кількість зсувів. Кількість зсувів може бути вказано як константа 1 (статичний
зсув) або як регістр CL. У першому випадку здійснюється зсув на один байт, а
в другому – кількість зсувів визначається вмістом регістра CL, який повинен
бути беззнаковим цілим двійковим числом. Таким чином, кількість зсувів
можна задати змінним і обчислюваним підчас виконання програми (так званий
динамічний зсув). При виконанні команд зсувів прапорці змінюються
наступним чином:
 стан прапорця AF завжди не визначений;
 прапорець CF завжди містить значення останнього висунутого біта;
 у однобітових зсувах прапорець OF=0, якщо операція змінила значення
старшого (знакового) біта операнда; при зсуві на декілька біт стан
прапорця OF не визначений;
 циклічні зсуви впливають тільки на прапорці OF і CF;
 у арифметичних і логічних зсувах прапорці SF, ZF і PF змінюються
відповідно до отриманого результату.
8

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


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

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


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

Команди управління процесором


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

Команди обробки рядків


Всі команди обробки рядків символів мають довжину один байт. Біт 0
показує операцію з байтом (біт 0=0) або словом (біт 0=1).

Відновлення символічного запису команди за її машинним представленням


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

Приклад 1. Представити символічний запис команди, що має наступну


машинну форму: 0000h.
Оскільки поля команди визначаються з точністю до біта, то необхідно
спочатку перейти від шістнадцятирічного до двійкового представлення
команди і, виходячи із загальних принципів кодування команд, визначити
призначення всіх її розрядів:

По таблиці машинного представлення команд (див. вище) визначимо, що


КОП=000000b відповідає загальному формату операції додавання ADD. Тоді
два молодших біта першого байта кодують ознаки d і w, а другий байт є
посбайтом, що визначає режими адресації операндів, що беруть участь в
операції. Значення полів в постбайті дозволяє визначити, що операндами
будуть регістр AL (reg=000, w=0) (див. табл.1) і байт пам'яті, що адресується за
11

допомогою базово-індексної адресації через регістри BX і SI (md=00, r/m=000)


(див. табл.2). Значення d=0 указує, що регістр AL є операндом-джерелом.
Отже, символічний запис команди має вигляд:
ADD [BX+SI],AL

Приклад 2. Представити символічний запис команди, що має наступну


машинну форму: 81475D398Bh.
Переходимо до двійкового представлення команди:

Перший байт, згідно таблиці машинного представлення команд,


відповідає команді додавання з безпосереднім операндом. Постбайт в цьому
випадку кодує місцеположення лише одного операнда, яке визначається полями
md і r/m: (BX)+disp8 (див. табл.2), а середнє поле постбайта є розширенням
коду операції.
Адресація операнда вимагає вказівки в команді 8-розрядного зсуву. Воно
поміщається відразу ж за постбайтом. Останні байти команди кодують
безпосередній операнд. Значення sw=01 у першому байті команди указує на те,
що безпосередній операнд – 16-розрядний. Враховуючи, що при кодуванні в
команді двобайтових величин спочатку записується їх молодший байт,
одержимо наступний символічний запис команди:
ADD [BX+5D],8B39h

Приклад 3. Нехай машинна форма представлення команди наступна: 0445h.


Тоді її двійковий вигляд:

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


спеціального формату, що забезпечує додавання акумулятора з безпосереднім
операндом.
Оскільки w=0, то безпосередній операнд має довжину 1 байт, а в якості
акумулятора використовується регістр AL. При цьому команда має наступний
вигляд:
ADD AL,45h

Приклад 4.
Завдання: Скласти програму, яка б сортувала елементи масиву згідно з
ознакою парності, причому по закінченню роботи програми, на початку масиву
повинні бути розташовані непарні числа, а у кінці – парні.
Порядок роботи виконання:
1) У програмі-емуляторі 16-розрядної системи на основі мікропроцесора
8086 складено програму згідно умови. Програма на мові асемблера та її
машинне (двійкове) представлення має наступний вигляд:
12
13

2) Дослідити формат кожної команди, які використані у програмі. У


програмі використано 1-, 2-, 3- та 4-байтні команди. Розшифруємо поля
двійкового представлення команд.
Для цього приймемо такі позначення:
 КОП – поле Коду ОПерації;
 reg – поле, яке вказує регістр регістрової пам’яті мікропроцесора;
 w – ознака, яка вказує на довжину операндів;
 d – ознака, яка вказує положення приймача результату;
 md,r/m – поля, які задають режим адресації другого операнда;
 disp L – молодший байт адреси зміщення;
 disp H – старший байт адреси зміщення;
 data L – молодший байт безпосереднього операнда;
 data H – старший байт безпосереднього операнда.
14

Однобайтні команди
15

Двобайтні команди
16

Трибайтні команди

Чотирибайтні команди
17
18

ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ

Завдання 1. Використовуючи програму, створену під час виконання


лабораторної роботи №9 (завдання 2) у програмі-емуляторі 16-розрядної
системи на основі мікропроцесора 8086, складіть відповідне представлення
програми у машинних кодах. Дослідіть формат кожної команди, які
використані у програмі шляхом розшифровки відповідних полів двійкового
представлення команд. Поясніть значення безпосередніх операндів та адрес
зміщення. Оформіть звіт з виконаної лабораторної роботи (див. приклад 4).

Завдання 2. Використовуючи довідникову інформацію щодо форматів команд


мікропроцесора 8086 реалізуйте процедуру дизасемблювання вашої програми,
тобто відновіть символічний (асемблерний) запис, виходячи з двійкового
запису коду програми (за її машинним представленням). При цьому чітко
розшифруйте та виділіть поля команд (див. приклади 1-3).
ВАРІАНТ обираєте згідно СПИСКУ У ПІДГРУПАХ.

Варіант Машинна форма представлення команди


1 56476E488Ah.
2 1555h.
3 5044h.
4 72745B348Dh.
5 1489h.
6 8745h.
7 18457A638Fh.
8 6050h.
9 7804h.
10 48372F123Bh.
11 95A2h.
12 46B2h.
13 11774C475Eh.
14 63D4h.
15 942Eh.
19

Завдання 3. Визначити вміст регістрів загального призначення мікропроцесора


після виконання фрагменту програми, яка знаходиться у сегменті коду.
ВАРІАНТ обираєте згідно СПИСКУ У ПІДГРУПАХ.

Варіант 1
20

Варіант 2
21

Варіант 3
22

Варіант 4
23

Варіант 5
24

Варіант 6
25

Варіант 7
26

Варіант 8
27

Варіант 9
28

Варіант 10
29

Варіант 11
30

Варіант 12
31

Контрольні запитання

1) Що таке формат команди мікропроцесора? Які поля команд


мікропроцесора 8086 ви знаєте?
2) Якими елементами команди мікропроцесора 8086 визначається
розрядність регістрів та операндів, що задіяні при виконанні команди?
3) Якими елементами команди мікропроцесора визначається режим
адресації операндів?
4) Що таке дизасемблювання? При якій умові можливе відновлення
символічного запису команди за її машинним представленням?
5) Яким чином забезпечується автоматичне «розпізнавання»
мікропроцесором команд різної довжини та автоматичне «розпізнавання»
команд та даних?
6) Як себе поведе процесор у випадку спроби виконання команд, розмір
яких у пам’яті штучним чином змінено (наприклад, для 3-байтної
команди на місці третього байта записано перший байт іншої команди
або елемент послідовного масиву даних)?

You might also like