- •Архітектура і система команд мікропроцесорів
- •1. Архітектура еом
- •1. 1. Поняття про архітектуру еом
- •1.2. Програмна модель мікропроцесора Intel Pentium III
- •Сегментні регістри
- •Регістри стану і керування
- •1.4. Організація пам’яті
- •Сегментована модель пам’яті
- •Формування фізичного адреса в реальному режимі
- •Типи даних
- •Формат команд
- •Типи переривань
- •Структура програми на асемблері
- •Синтаксис асемблера
- •Директиви сегментації
- •Прості типи даних
- •Системи числення
- •Двійкова система числення
- •Шістнадцяткова система числення
- •Перевод із десяткової і шістнадцяткової системи у двійкову
- •Перевод із десяткової і двійкової у шістнадцяткову систему
- •Числа із знаком
- •Структура машинної команди
- •Способи задання операндів
- •Адресація пам’яті
- •Функціональна класифікація машинних команд
- •Команди обміну даними
- •Команди пересилання даних
- •Ввід-вивід в порт
- •Робота з адресами і вказівниками
- •Перетворення даних
- •Робота із стеком
- •Арифметичні цілочисельні команди
- •Цілі двійкові числа
- •Додавання двійкових чисел без знаку
- •Додавання двійкових чисел із знаком
- •Віднімання двійкових чисел без знаку
- •Віднімання двійкових чисел із знаком
- •Множення двійкових чисел без знаку
- •Множення двійкових чисел із знаком
- •Ділення двійкових чисел без знаку
- •Ділення двійкових чисел із знаком
- •Команди перетворення типів
- •4.2. Десяткові числа
- •Неупаковані bcd-числа
- •Упаковані bcd-числа
- •Логічні команди
- •Логічні команди
- •Команди зсуву
- •Лінійний зсув
- •Циклічний зсув
- •Додаткові команди зсуву
- •Команди передачі керування
- •Команди безумовного переходу;
- •Команди безумовного переходу
- •Процедури
- •Умовні переходи
- •Команда порівняння cmp
- •Команди умовного переходу і прапори
- •Команди умовного переходу і регістр ecxlcx
- •6.4. Організація циклів
- •Ланцюжкові команди
- •Пересилання ланцюжків
- •Порівняння ланцюжків
- •Сканування ланцюжків
- •Завантаження ланцюжків
- •Формування ланцюжків
- •Ввід-вивід елементів у порт
- •Складні структури даних
- •Доступ до елементів масиву
- •Двомірні масиви
- •8.2. Структури
- •Описання шаблона структури
- •Визначення даних з типом структури
- •Методи роботи із структурою
- •Об’єднання
- •Визначення екземпляру запису
- •Робота з записами
- •Макрозасоби мови асемблера
- •Макрокоманди
- •Макродирективи
- •Директиви while і rept
- •Директиви irp і irpc
- •Директиви умовної компіляції
- •Директиви компіляції по умові
- •Директиви if і ife
- •Директиви ifdef і ifndef
- •Директиви ifb і ifnb
- •Директиви ifidn, ifidni, ifdif і ifdifi
- •9.4. Директиви генерації помилок
- •%Out недопустиме ім’я регістра
Команди безумовного переходу
jmp [модифікатор] адрес_переходу – безумовний перехід без зберігання інформації про точку повернення.
Модифікатор:
o near ptr – прямий перехід на мітку всередині поточного сегмента коду. Модифікується тільки регістр eip/ip або вираз, що використовує символ $.
o far ptr – прямий перехід на мітку у другому сегменті коду. Адрес перехода складається із 16-бітного селектора і 16/32-бітного зміщення, які завантажуються у регістри cs і ip/eip відповідно.
o word ptr – непрямий перехід на мітку в середині поточного сегмента кода. Модифікується значенням зміщення із пам’яті або регістра тільки eip/ip. Розмір зміщення 16 або 32 біти.
o dword ptr – непрямий перехід на мітку у другому сегменті коду. Модифікується значенням тільки із пам’яті cs і eip/ip.
Команда jmp має декілька кодів машинних команд, що відрізняються дальністю переходу і заданням адреса. Адрес переходу може бути внутрішньосегментним або міжсегментним. Внутрішньосегментний перехід змінює тільки вміст регістрів eip/ip і має три варіанти:
прямий короткий;
прямий;
непрямий.
Прямий короткий перехід застосовується, коли віддаль від команди jmp до адреса_перехода не більш –128 або +127 байтів. У цьому випадку формується коротка 2-х байтова машинна команда. Якщо адрес переходу розміщений до команди jmp то формується коротка команда без додаткових вказівок. У випадку коли адрес переходу знаходиться після команди jmp необхідно використовувати модифікатор short ptr:
jmp short ptr
… ; не більш 127 байтів
m1:
Прямий внутрішньосегментний перехід формує 3-х байтну машинну команду, що дозволяє здійснювати переходи в межах 64 Кбайт відносно наступної за jmp команди:
m1:
… ; віддаль більш 128 байт і менше 64 Кбайт. jmp m1
Непрямий внутрішньосегментний перехід задає не сам адрес, а місце де він знаходиться.
lea bx,m1
jmp bx ; адрес перехода в регістрі bx
… m1
addr dw m1
…
jmp addr ; адрес перехода в комірці пам’яті
… m1
Міжсегментний перехід має другий формат машинної команди. При міжсегментному переході крім регістра eip/ip модифікується також регістр cs. Міжсегментний перехід підтримує два варіанти команд: прямого і непрямого переходу.
Прямий міжсегментний перехід – команда має довжину 5 байтів, із яких два байти зміщення і два байти сегмента складова. Приклад:
Seg1 segment
jmp far ptr m2 ; модифікатор far обов’язковий m1 label far
seg1 ends seg2 segment
…
m2 label far
jmp m1
…
Якщо команда переходу зустрічається до описання мітки, то в команді jmp необхідно вказати модифікатор far ptr. Без вказівки модифікатора транслятор формує 3-х байтну команду.
Непрямий міжсегментний перехід має в якості операнда адрес в області пам’яті, де міститься сегментна складова і зміщення. Приклад:
addr dd m1 ; в полі addr знаходиться адрес сегмента мітки і зміщення
code1 segment
…
jmp m1
Варіантом непрямого міжсегментного переходу є непрямий регістровий міжсегментний перехід. У цьому переході адрес вказується в регістрі. Це дає можливість програмувати динамічні переходи. Приклад:
data segment
addr_m1 dd m1 ; в полі addr_m1 значення зміщення і адрес мітки m1 data ends
code_1 segment lea bx,addr_m1 jmp dword ptr[bx] code_1 ends code_2 segment m1 label far
mov ax,bx code_2 segment
Таким чином, модифікатори short ptr, near ptr і word ptr застосовуються для організації внутрішньосегментних переходів, а far ptr і dword ptr – для міжсегментних.
