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

Системне програмування, доц. І.І. Мітасов, 2010р. Лекція 12, 6 сторінок

Тема 2. Архітектура процесора і мова асемблера: Основи програмування на мові асемблера

ЛЕКЦІЯ 12. Команди передачі управління

Питання лекції:

  • Безумовні переходи ;

  • процедури;

  • умовні переходи;

  • організація циклів.

На попередніх лекціях ми познайомилися з деякими командами, з яких формуються лінійні ділянки програми. Кожна з них в загальному випадку виконує деякі дії з перетворення або пересилання даних, після чого мікропроцесор передає управління наступній команді. Але дуже мало програм працюють таким послідовним чином. Зазвичай в програмі є точки, в яких потрібно прийняти рішення про те, яка команда буде виконуватись наступною. Це рішення може бути

• безумовним - в даній точці необхідно передати управління не тій команді, яка йде наступною, а інший, яка знаходиться на певній відстані від поточної команди;

• умовним - рішення про те, яка команда буде виконуватися наступною, приймається на основі аналізу деяких умов або даних.

Як ви пам'ятаєте, програма являє собою послідовність команд і даних, що займають певний простір оперативної пам'яті. Цей простір пам'яті може бути або безперервним, або складатися з кількох фрагментів.

Раніше нами були розглянуті засоби організації фрагментації коду програми та її даних на сегменти. Про те, яка команда програми повинна виконуватися наступною, мікропроцесор дізнається за вмістом пари регістрів cs:(e)ip:

• cs - сегментний регістр коду, в якому знаходиться фізична (базова) адреса поточного сегменту коду;

• eip/ip - регістр покажчика команди, в якому знаходиться значення, яке представляє собою зміщення в пам'яті наступної команди, що підлягає виконанню, щодо початку поточного сегменту коду. Згадаймо, чому ми записуємо регістри eip/ip через косу риску. Який конкретно регістр буде використовуватися, залежить від встановленого режиму адресації use16 або use32. Якщо вказано use16, то використовується ip, якщо use32, то використовується eip.

Таким чином, команди передачі управління змінюють вміст регістрів cs і eip/ip, в результаті чого мікропроцесор вибирає для виконання не наступну по порядку команду програми, а команду в деякій іншій ділянці програми. Конвеєр усередині мікропроцесора при цьому скидається.

За принципом дії, команди мікропроцесора, що забезпечують організацію переходів в програмі, можна розділити на чотири групи:

1. Команди безумовної передачі керування:

• команда безумовного переходу;

• виклику процедури і повернення з процедури;

• виклику програмних переривань і повернення із програмних переривань.

2. Команди умовної передачі управління:

• команди переходу по результату команди порівняння cmp;

• команди переходу станом певного прапора;

• команди переходу по вмісту регістра ecx/cx.

3. Команди керування циклом:

• команда организації циклу з лічильником ecx/cx;

• команда организації циклу з лічильником ecx/cx с можливістю дострокового виходу з циклу по додатковій умові.

1. Безумовні переходи

Попереднє обговорення виявило деякі деталі механізму переходу. Команди переходу модифікують регістр покажчика команди eip/ip і, можливо, сегментний регістр коду cs. Що саме має піддатися модифікації, залежить:

  • від типу операнда в команді безумовного переходу (ближній або дальній);

  • від вказівки перед адресою переходу (в команді переходу) модифікатора; при цьому сама адреса переходу може перебувати або безпосередньо в команді (прямий перехід), або в регістрі чи комірці пам'яті (непрямий перехід).

Модифікатор може приймати наступні значення:

  • near ptr - прямий перехід на мітку всередині поточного сегменту коду. Модифікується тільки регістр eip/ip (в залежності від заданого типу сегменту коду use16 або use32) на основі зазначеної в команді адреси (мітки) або виразу, що використовує символ вилучення значення ЛічА - $;

  • far ptr — прямий перехід на мітку в іншому сегменті коду. Адреса переходу задається у вигляді безпосереднього операнда або адреси (мітки) і складається з 16-бітного селектора і 16/32-бітного зміщення, що завантажуються, відповідно, в регістри cs і ip/eip;

  • word ptr — непрямий перехід на мітку всередині поточного сегменту коду. Модифікується (значенням зміщення з пам'яті за вказаною в команді адресою, або з регістра) тільки eip/ip. Розмір зміщення 16 або 32 біт;

  • dword ptr - Непрямий перехід на мітку в іншому сегменті коду. Модифікуються (значенням з пам'яті - і тільки з пам'яті, з регістра не можна) обидва регістри, cs і eip/ip. Перше слово / подвійне слово цієї адреси представляє зміщення і завантажується в ip/eip; друге/третє слово завантажується в cs.

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