- •Системне програмування
- •Машинні коди. Байт Способу Адресації.
- •Способи адресації
- •Приклади адресації
- •Визначення даних в мові Assembler
- •[Ім’я] Dn вираз
- •Директива визначення байта (db)
- •Директива визначення слова (dw)
- •Директива визначення подвійного слова (dd)
- •Безпосередні операнди
- •Директива equ
Системне програмування
Практична робота № 3
Машинні коди. Байт Способу Адресації.
В загальному, формат машинної команди можна представити наступним чином:
Префікс |
Перепризначення сегменту |
Код Операції |
Байт способу адресації |
Адреса |
Дані |
0/1 |
0/1 |
Завжди присутній 1 |
0/1 |
0,1,2 |
0,1,2 |
Позначення 0/1 означає відсутність/присутність даного поля в машинному коді або і його розмір в байтах.
Існують команди розмірності 1,2,3,4 байти.
Поле “Префікс” – для команд повтору рядкових операцій
REP/REPE/REPZ/REPNZ – повторює рядкову операцію визначену кількість разів безумовно, або по стану прапорця. Використовуються в якості префікса перед рядковими командами типу CMPS(порівняння рядків), MOVS(переміщення рядів). Наприклад:
-
MOV CX,20
Встановлення лічильника на 20 байт
LEA DI, STRING2
Адреса “куди” пересилати (відносно значення в регістрі ES)
LEA SI, STRING1
Адреса “звідки” пересилати (відносно значення в регістрі DS)
REP MOVSB
Переслати дані (породжений машинний код: CS:0101 F3
CS:0102 A4)
Значення в лічильнику команд не змінюється поки в CX не буде 0, а декремент відбувається автоматично.
Поле “Перепризначення сегменту” – присутній в командах, що використовують додаткове перевизначення сегментних регістрів.
Поле “Код Операції” (далі - КО) визначає яка саме дія буде виконуватися (+/-/MOV...)
Поле “Байт способу адресації” (БСА) :
Відсутній у таких випадках:
команда не має операндів;
один операнд регістр другий - безпосередні дані;
один операнд – адреса пам’яті, другий – регістр AX або AL (для акумулятора є спрощені команди, тому адресація інша);
в командах переходів (JMP);
в командах прямого вводу-виводу (IN-OUT).
Присутній, коли є непряма, пряма адресація.
Способи адресації
Розрізняють такі види адресації:
Регістрова – всі операнди знаходяться в регістрах процесора;
Безпосередня – один з операндів є безпосередньо числом(даними);
Пряма – в одному з операндів команди вказується ім’я певної змінної (мітка), адреса в регістрі;
Непряма:
Базова
Індексна
Базово-індексна
Команди з прямою адресацією пам’яті працюють швидше, оскільки не потребують додаткового додавання при визначенні фізичної адреси
При непрямій адресації посилання на операнд визначається через базовий або індексний регістр, константи, змінні зміщення та прості змінні. Квадратні дужки, що визначають операнди при такій адресації діють як знак плюс.
Схема формування адреси при непрямій адресації:
Ці операнди можна комбінувати в довільній послідовності. Але не можна одночасно використовувати два базові регістри або два індексні регістри. Відповідно, можна побудувати 16 різних записів адресації.
При формуванні фізичної адреси базовий регістр BX у виді [BX] використовується разом з сегментним регістром DS, а базовий регістр BP у виді [BP] використовується разом з сегментним регістром SS. Індексні регістри SI та DI передбачають використання сегментного регістру DS.