Команда безумовного переходу 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 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|