Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekz._12.doc
Скачиваний:
3
Добавлен:
11.08.2019
Размер:
146.43 Кб
Скачать

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

Синтаксис команди безумовного переходу jmp [модифікатор] адреса_переходу - безумовний перехід без збереження інформації про точку повернення.

Адреса_переходу являє собою адресу у вигляді мітки або адресу області пам'яті, в якій знаходиться покажчик переходу.

Всього в системі команд мікропроцесора є кілька кодів машинних команд безумовного переходу jmp. Їх відмінності визначаються дальністю переходу і способом завдання цільової адреси.

Дальність переходу визначається місцем розташування операнда адреса_переходу. Ця адреса може знаходитися в поточному сегменті коду або в деякому іншому сегменті. У першому випадку перехід називається внутрішньосегментним, або близьким, у другому міжсегментним, або дальнім. Внутрішньосегментний перехід припускає, що змінюється тільки вміст регістра eip/ip.

Можна виділити три варіанти внутрішньосегментного використання команди jmp:

  • прямий короткий;

  • прямий;

  • непрямий.

2. Процедури

У мові асемблера є декілька засобів, які вирішують проблему дублювання ділянок програмного коду. До них відносяться: • механізм процедур;

• макроассемблер;

• механізм переривань.

Процедура, часто звана також підпрограмою, - це основна функціональна одиниця декомпозиції (розділення на кілька частин) деякої задачі. Процедура являє собою групу команд для вирішення конкретної підзадачі і володіє засобами отримання управління з точки виклику завдання більш високого рівня і повернення управління в цю точку.

У простому випадку програма може складатися з однієї процедури. Іншими словами, процедуру можна визначити як правильним чином оформлену сукупність команд, яка, будучи одноразово описаною, за необхідності може бути викликана в будь-якому місці програми.

Д ля опису послідовності команд у вигляді процедури в мові асемблера використовуються дві директиви: PROC і ENDP. Синтаксис опису процедури такий (рис. 12.1).

Рис. 12.1. Синтаксис опису процедури в програмі

З рис. 12.1 видно, що в заголовку процедури (директиві PROC) обов'язковим є тільки завдання імені процедури. Серед великої кількості операндів директиви PROC слід особливо виділити [відстань]. Цей атрибут може набувати значення near або far і характеризує можливість звернення до процедури з іншого сегмента коду. За умовчанням атрибут [відстань] приймає значення near.

Процедура може розміщуватися в будь-якому місці програми, але так, щоб на неї випадковим чином не потрапило управління. Якщо процедуру просто вставити в загальний потік команд, то мікропроцессор сприйматиме команди процедури як частину цього потоку і відповідно буде здійснювати виконання команд процедури.

3. Умовні переходи

Мікропроцесор має 18 команд умовного переходу. Ці команди дозволяють перевірити:

• відношення між операндами зі знаком ( "більше - менше");

• відношення між операндами без знака ( "вище - нижче");

• стану арифметичних прапорів zf, sf, cf, of, pf (але не af).

Команди умовного переходу мають однаковий синтаксис: jcc мітка_переходу.

Як бачимо, мемокод всіх команд починається з j - від слова jump (стрибок), cc - визначає конкретну умову, що аналізується командою. Що стосується операнда мітка_переходу, то ця позначка може знаходиться тільки в межах поточного сегмента коду, міжсегментна передача управління в умовних переходах не допускається. У зв'язку з цим відпадає питання про модифікатор, який був присутній в синтаксисі команд безумовного переходу.У ранніх моделях мікропроцесора (i8086, i80186 і i80286) команди умовного переходу могли здійснювати тільки короткі переходи - на відстань від -128 до 127 байт від команди, наступної за командою умовного переходу. Починаючи з моделі мікропроцесора 80386 це обмеження знято, але, як бачите, тільки в межах поточного сегменту коду.

Для того, щоб прийняти рішення про те, куди буде передано керування командою умовного переходу, попередньо має бути сформована умова, на підставі якої і буде прийматися рішення про передачу управління. Джерелами такої умови можуть бути:

• будь-яка команда, що змінює стан арифметичних прапорів;

• команда порівняння cmp, порівнює значення двох операндів;

• стан регістра ecx/cx.

Обговоримо ці варіанти, щоб розібратися з тим, як працюють команди умовного переходу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]