Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга_Вычисл техн и микропроц_2 автора_130709.doc
Скачиваний:
9
Добавлен:
07.05.2019
Размер:
5.26 Mб
Скачать

9.3.1 Формат команди

Формат рядка команди складається з кількох полів, деякі з них не є обов’язковими. Формат рядка команди показано на рис. 9.9. У фігурних дужках показано необов’язкові елементи.

Поле мітки

Поле команди

Поле операндів

Поле коментарів

{Мітка:}

{Префікс}Команда

{операнди}

{; Коментар}

Рисунок 9.9 – Формат команди Асемблера

Мітка – це символічне ім’я, що відповідає значенню поточного вмісту лічильника адреси в поточному сегменті коду. Вміст лічильника адреси відповідає значенню регістра-вказівника команд (ІР) при виконанні програми, тому мітка – це адреса команди, до якої необхідно зробити умовний або безумовний перехід. Мітка відокремлюється від інших частин рядка двокрапкою. Максимальна довжина мітки – 31 символ. Кожна мітка у програмі повинна бути унікальною. Як мітки не допускається використовувати службові слова.

Префікс – це елемент команди, який уточнює або модифікує її дію у випадках:

  • зміна сегмента, якщо нас не задовольняє значення сегмента за умовчанням;

  • зміна розрядності адреси;

  • зміна розрядності операнда;

  • вказівка на повторення цієї команди.

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

Операнди – імена, які надаються об’єктам, над якими виконується операція (команда). У команді можуть бути один або два операнди, які відокремлюються один від одного комою. Є команди, в яких операндів немає. Поле операндів відокремлюється від поля команди пропуском. У команді можливі лише такі сполучення операндів:

  • регістр – регістр;

  • регістр – пам’ять;

  • пам’ять – регістр;

  • безпосередній операнд (число) – регістр;

  • безпосередній операнд (число) – пам’ять.

Як операнди, що можуть оброблюватися транслятором, використовуються:

  • постійні або безпосередні операнди – числа, рядки, імена або вирази, які мають фіксоване значення. Імена, які використовуються як безпосередні операнди, задаються операторами =: або equ;

  • адресні операнди – адреси розміщення операндів у пам’яті. Задаються за допомогою двох складових адреси – сегмента і зміщення;

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

  • лічильник адреси – це специфічний вид операнда, який позначається символом $. Транслятор замість цього символа ставить поточне значення вказівника команд і модифікує його значення відповідно до зміщення;

  • регістровий операнд – ім’я відповідного регістра, вміст якого використовується у команді;

  • базові і індексні операнди – операнди, які використовуються при адресуванні за базою, індексного адресування або їх комбінацій.

Загальний формат команди показано на рис. 9.10.

Можлива кількість байт

1

1

0 – 2 або 4

0 – 2 або 4

К од операції

Байт режиму адресування

Зміщення у команді

Безпосередній операнд

Рисунок 9.10 – Загальний формат команди асемблера МП фірми Intel

Байт коду операції – це обов’язковий елемент, що описує операцію, яка буде виконуватися. Складається з поля коду (COP) операції і двох однобітових полів:

  • w – відповідає типу операндів, які використовуються у команді:

w = 0 – команда працює з байтами;

w = 1 – команда працює зі словами;

  • d – адресує приймач результату:

d = 1 – відбувається передавання операнда або результату операції у регістр rg2, який описано у другому байті команди;

d = 0 – відбувається передавання із цього регістра;

  • s – біт, який є ознакою використання одного байта безпосереднього операнду при роботі зі словами. Використовується сумісно зі значенням w.

Байт режиму адресування визначає форму подання адреси операндів. Складається з трьох полів:

  • md – визначає довжину адреси операнда (у байтах), яка подана у наступних байтах – зміщення у команді:

  • COP або rg2 – значення COP використовується для уточнення операції, що виконується; rg2 визначає регістр, в якому знаходиться операнд, який умовно вважається другим;

  • rg1 або mem – визначає операнд, який може бути розміщено у комірці пам’яті або у регістрі. Цей операнд умовно вважається першим. Кодування полів rg2 і rg1 в залежності від значення біта s подано у табл. 9.2.

Таблиця 9.2 – Кодування полів rg2 і rg1

rg2 / rg1

w = 0

w = 1

rg2 / rg1

w = 0

w = 1

000

AL

AX

100

AH

SP

001

CL

CX

101

CH

BP

010

DL

DX

110

DH

SI

011

BL

BX

111

BH

DI

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

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

  1. Який формат має рядок команди мови Асемблер?

  2. Що називається операндом у рядку команди мови Асемблер?

  3. Які поєднання операндів є можливими?

  4. Який формат має команда асемблера МП фірми Intel?

  5. В яких байтах може розміщуватися поле коду операції?

  6. За допомогою яких бітів кодується тип операндів, що використовуються у команді?

Контрольні питання підвищеної складності:

  1. Яким чином визначається тип режиму адресування у команді?

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

  3. Доведіть, що операнди команди MOV AX,BX розташовано у регістрах, якщо формат (код) цієї команди становить 89D8Н.