Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Команда безумовного переходу JMP




Ця команда є аналогом самого багатостраждального (по кількості нападок на нього) і відомого в алгоритмічних мовах оператора:

goto мітка;

У таких мовах, як C++ або Паскаль, у більшості випадків прекрасно можна обійтися без цього оператора. Він вважається потенційною погрозою й у рамках структурного програмування його не застосовують узагалі. Наприклад, у мові Java таке ключове слово є, але воно не підтримується. Мнемокод команди безумовної передачі управління JMP отриманий у результаті скорочення слова: J u MP — стрибок. Команда ця містить один операнд і має наступний формат (синтаксис):

JMP мітка

Мітка, як і в алгоритмічних мовах, позначає потрібну команду, на яку варто передати управління, і може мати атрибут NEAR (за замовчуванням) або FAR. Якщо мітка має атрибут NEAR, безумовний перехід здійснюється в межах даного сегмента. У цьому випадку логіка роботи команди наступна:

<EIР>= <EIР> + зсув_до_потрібної_команди

Таким чином, автоматично відбувається виконання команди, позначеною міткою.

Рис.1. Логіка роботи команди безумовного переходу

Оскільки в даному випадку перехід здійснюється в межах сегмента, зсув_ до_потрібної_команди не може перевищувати двох байт. Потрібна нам команда може розташовуватися убік великих адрес, тоді говорять, що перехід здійснюється вперед. У цьому випадку зсув_до_потрібної_команди — позитивне. Якщо, навпаки, потрібна нам команда розташовується убік менших адрес, говорять про перехід назад. У цьому випадку зсув до потрібної команди — негативне.

Можна заощадити один байт при реалізації команди безумовної передачі управління, якщо зробити перехід коротким (SHORT), тобто зсув у межах |-128... 127]. У цьому випадку перехід уперед потрібно записати в такий спосіб:

Jmp short forward

Тепер розберемося з більш складним випадком, коли треба передати управління мітці far_label, що знаходиться в іншому сегменті (FAR перехід). У цьому випадку, з погляду комп'ютера, міняється не тільки вміст регістра EIP, але і вміст сегментного регістра CS.

У цьому випадку логіка роботи команди JMP наступна:

<CS>=<Code2>

<EIР>= <EIР> + зсув_до_потрібної_команди

Таким чином, автоматично відбувається виконання команди, позначеної міткою far_label, що знаходиться в іншому кодовому сегменті (FAR-перехід). Усі міркування щодо зсуву аналогічні ближньому переходові, тільки для реального режиму роботи процесора зсув тут завжди 16-розрядне.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...