Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л.р.1-12.СПРГ-1(40, укр).doc
Скачиваний:
5
Добавлен:
27.08.2019
Размер:
2.33 Mб
Скачать

8. Питання для самоперевірки

Навести таблиці істинності для основних булевих функцій

У чому особливості різних команд зсуву (чи змінюється флаг CF)?

Який принцип ділення та множення на ступені двійки за допомогою команд зсуву?

Як сформувати маску, для перевірки декількох розрядів двійкового числа?

Яким чином інтерпретувати результати маскування одразу кількох розрядів?

9. Література

1. Голуб Н. Г. Искусство программирования на Ассемблере. Лекции и упражнения.- СПб.: ООО”ДиаСофтЮП”, 2002. – 656 с.

2. Магда. Ю. С. M12 Ассемблер для процессоров Intel Pentium. – СПб.: Питер, 2006. – 410с.

3. Ирвин Кип. Язык ассемблера для процессоров Intel, 4-е издание.: Пер с англ. – М.: Издательский дом ”Вильямс”, 2005. – 912с.

Лабораторна робота 6.

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

Ціль: Ознайомитися зі складом команд передачі управління, одержати практичні навички по програмуванню розгалужених обчислювальних процесів.

1. Підготовка до роботи.

Ознайомитися із основними командами передачі управління мови асемблер [1, стор. 183-202], [2, стор. 61-93], [3, стор. 191-193].

2. Питання для самоконтролю.

  1. Дайте визначення „обчислювальний процес”

  2. Дайте визначення „лінійний обчислювальний процес”

  3. Дайте визначення поняття „розгалуження”.

  4. Для чого використовуються розгалуження?

  5. Дайте визначення поняття „цикл”.

  6. Для чого використовуються цикли?

3. Короткі теоретичні зведення.

Послідовність виконання лінійних команд визначається значенням регістра EIP. Команди передачі управління дозволяють порушити природну послідовність виконання команд шляхом зміни вмісту регістра EIP. У ході лабораторної роботи розглянемо базові команди передачі управління. Це — команди безумовного переходу на визначену адресу в пам'яті комп'ютера, команди умовного переходу в залежності від результату перевірки умови і команди організації циклічних обчислень. Команди передачі управління не змінюють значення прапорів.

3.1. Команди безумовної передачі управління

Ми познайомимося з трьома основними командами безумовної передачі управління. Найпростіша з них — команда JMP. Команди CALL і RET ледве більш складні і є взаємно зворотними командами і будуть розглянуті в подальших лабораторних роботах.

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

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

goto мітка;

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

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-розрядне.

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