Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Антонов О.С., Хiхловська I.В. Обчислювальна тех...doc
Скачиваний:
15
Добавлен:
01.09.2019
Размер:
4.12 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. За допомогою яких бітів кодується тип операндів, що використовуються у команді?

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

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