Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Опорний конспект лекцій_ Асемблер.Docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
506.89 Кб
Скачать
    1. Команди безумовного переходу

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 – для міжсегментних.