Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МЕТОДИЧНІ ВКАЗІВКИ.doc
Скачиваний:
0
Добавлен:
04.01.2020
Размер:
408.58 Кб
Скачать

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ

НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"

Методичні вказівки

Мова програмування асемблер”

до лабораторних робіт з дисципліни

"Системне програмування та операційні системи”

для базового напрямку 6.0804 "Комп’ютерні науки"

ЗАТВЕРДЖЕНО

на засіданні кафедри

програмного забезпечення

протокол № 9 від 8.05.2008 р.

Львів – 2008

Методичні вказівки “Мова програмування асемблер” до лабораторних робіт з дисципліни "Системне програмування та операційні системи” для базового напрямку 6.0804 "Комп’ютерні науки"

Укладачі: ст. викл. Рицар В.В., асист.Сенів М.М.

Відповідальний за випуск: Федасюк Д.В., д-р техн.. наук, професор

Рецензенти: Левус Є.В. канд. техн. наук, доцент,

Денисюк П.Ю. канд. техн. наук, асистент

Методичні вказівки „Мова програмування Асемблер” до лабораторних робіт з курсу “Системне програмування та операційні системи” для студентів інституту комп’ютерної техніки та інформаційних технологій спеціальності програмне забезпечення обчислювальної техніки та автоматизованих систем складається із семи лабораторних робіт.

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

Подаються також вимоги до оформлення звітів до виконання лабораторних робіт.

Лабораторна робота №1

Тема. Складання та відлагодження програм на мові асемблер

Мета. Засвоїти основи програмування на мові асемблера, навчитися працювати з компілятором Turbo Assembler, вивчити і навчитися використовувати на практиці директиви, команди та мітки.

  1. Загальні відомості

Мова програмування АСЕМБЛЕР – це засіб, що допомагає готувати програми в машинних кодах. Існує декілька трансляторів з цієї мови, що розроблені рядом фірм, наприклад ASM-86 фірмою Intel, MASM фірмою Microsoft, TASM фірмою Borland. В даному посібнику зосередимося на компіляторі Turbo Assembler 2.0, розробленому фірмою Borland (тепер Inprise).

Система команд мікропроцесора Intel 8086 має 135 інструкцій, кожна з яких поділяється на групи бітів, або поля. Поле коду операції визначає тип машинної команди, а решта поля, що називаються операндами, ідентифікують інформацію, що вимагає команда. Операнд може містити дані, частину адреси даного, непрямий вказівник на дані тощо.

Спосіб визначення місцезнаходження операнда називається режимом адресації. Для мікропроцесора Intel 8086 режими адресації поділяються на два класи: для даних і для переходів. Перші включають такі способи:

  1. Безпосередній, при котрому операнд довжиною 8 або 16 біт є частиною команди. mov ax, 55

  2. Прямий, при якому 16-бітова виконавча адреса операнда є частиною команди. mov ax, VAR

  3. Регістровий, при якому операнд може знаходитись в одному з регістрів: AX, AH, AL, BX, BH, BL, CX, CH, CL, DX, DH, DL, BP, SP, SI, DI. mov ax, bx

  4. Непрямий регістровий, при якому виконавча адреса операнда знаходиться в одному з вказаних регістрів: [BX], [SI], [DI].

mov ax, [bx]

  1. Відносний регістровий, при якому виконавча адреса обчислюється як сума 8- або 16-бітового зміщення і вмісту базового ([BX], [BP]) або індексного ([SI], [DI]) регістра.

mov ax, [bx+10]

  1. Базовий індексний, при якому виконавча адреса визначається як сума вмісту базового ([BX], [BP]) або індексного ([SI], [DI]) регістрів.

mov ax, [bp+di]

  1. Відносний базовий індексний, при котрому виконавча адреса є сумою адреси, яка обчислюється в базовому індексному режимі, і 8- чи 16-бітового зміщення. mov ax, [bp+si+4]

При виконанні програм мікропроцесор реалізує таку послідовність дій:

  1. Вибирає команду за адресою, що є за зміщенням IP в сегменті CS.

  2. Завантажує команду в програмно-недосяжний регістр і дешифрує її одночасно з інкрементом IP для адресації наступної команди.

  3. Виконує команду, а у випадку команди переходу – завантажує в IP адресу переходу.

  4. Перевіряє запит переривання і переходить до кроку 1 або на програму оброблення переривання.

При необхідності зміни послідовності виконання команд програміст використовує команди передачі керування. Для таких команд (умовні та безумовні переходи, виклики процедур) існує чотири режими адресації переходів:

  1. Прямий перехід в межах сегменту, при якому адреса команди в сегменті коду визначається як сума вмісту регістру IP і 8- чи 16-бітового зміщення. В командах умовного переходу дозволяється використовувати тільки 8-бітове зміщення (для процесора Intel 8086).

jmp lab

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

jmp [bx]

  1. Міжсегментний прямий перехід, при якому вміст регістрів IP і CS заміняється двома словами, що розташовуються безпосередньо в самій команді. jmp far ptr lab

  2. Міжсегментний непрямий перехід, при якому вміст регістрів IP і CS заміняється двома послідовно розміщеними в пам’яті словами. Ці слова можуть бути вказані в будь-якому режимі адресації операндів, крім безпосереднього і регістрового. jmp dword ptr [bx]

Мікропроцесор Intel 8086 генерує 20-розрядну фізичну адресу, що складається з 16-розрядної адреси сегменту і 16-розрядного зміщення. При цьому використовуються такі правила адресації:

  1. Вибірка команд проходить тільки за адресою, що задається регістрами IP і CS.

  2. Регістр SP застосовується тільки як зміщення по відношенню до регістру SS.

  3. Команди роботи зі стрічками, що використовують регістр ES, не можуть вибирати замість нього інші регістри сегментів.

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

  5. Якщо базовим є регістр BP, то операнд знаходиться в стеку і для обчислення адреси використовується регістр SS.

  6. Якщо використовуються обидва регістри – базовий та індексний, то операнд знаходиться в сегменті, на який вказує базовий регістр.

  7. Якщо використовується тільки індексний регістр, то операнд знаходиться в сегменті даних DS.

Так як кожна команда, що працює з пам’яттю, використовує регістр сегмента, асемблер повинен визначити, який саме регістр повинен вибиратись в кожному конкретному випадку. Це задається адресним виразом, що записаний в вихідному операторі. Використання регістрів сегментів, що прийняте в правилах 4 – 7, можна змінити за допомогою префікса заміни сегмента, що включається в кожну команду або програмістом, або за допомогою директиви ASSUME.

Стек являє собою область пам’яті для тимчасового зберігання даних. Регістр SS визначає базову адресу, а регістр SP – найбільш допустиме значення зміщення в сегменті стека. Тут використовується непряма адресація за допомогою вказівника SP; при включенні елемента в стек (це завжди слово) виконується автоматичне зменшення SP на 2, а при вибірці із стеку – збільшення на 2. Адресу останнього включеного елемента називають вершиною.

Команди мікропроцесора можна поділити на 6 функціональних груп:

  1. Пересилання даних

  2. Арифметичні

  3. Логічні

  4. Для роботи зі стрічками

  5. Передачі керування

  6. Керування мікропроцесором.

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