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

© Сопронюк Ф.О., Сопронюк Є.Ф. ,Лазорик В. В. Методичні рекомендації та завдання до лабораторних робіт з дисципліни “програмування” (мова асемблера). !!! документ в процесі розробки !

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

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

Мета. Вивчення структури програми мовою асемблера, вимог при створенні програм мовою асемблера та засобів створення та налагодження програм.

План заняття :

  1. Структура простої програми мовою асемблера. Формат кодування програми.

  2. Основні директиви SEGMENT , END, ENDS, PROC, ENDP, ASSUME.

  3. Основні вимоги при створенні програми. Приклади простих програм мовою асемблера.

  4. Приклад простої програми мовою асемблера та основні вимоги.

  5. Трансляція програми. Опції компіляції та загальна характеристика.

  6. Редактор зв’язків. Опції редактора зв’язків. Створення завантажувального модуля.

  7. Застосування налагоджувача для пошуку помилок.

Теоретичні відомості

1. Структура простої програми мовою асемблера. Формат кодування програми.

Програма мовою асемблер складається з послідовності команд та директив(псевдокоманд). Формат кодування команд програми має вигляд :

[мітка: ] [префікс] команда [операнд [, операнд ] ] [ ; ]

Мітка, префікс та операнди можуть бути відсутні. Операнд – це елемент над яким виконуються дії. В якості операнда може бути стала, регістр або змінна, яка визначає елемент даних.

Область коментаря визначається з позиції, де знаходиться крапка з комою (;) до кінця поточного рядка.

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

Ідентифікатор у мові програмування асемблера складається із послідовності :

  • букв латинського алфавіту ( a до z та A до Z);

  • цифр ( 0 до 9);

  • спеціальних знаків;

    • знак запитання ( ? );

    • крапка ( . ), тільки як перший знак у ідентифікаторі;

    • комерційне ета ( @ );

    • знак підкреслення ( _ );

    • знак долар ($).

Перший знак ідентифікатора повинен бути буквою або спеціальним знаком. За замовчуванням мова асемблера в ідентифікаторах не розрізняє великі та малі букви. Для позначення сегментів, процедур, елементів даних та макросів використовуються імена. Мітки та імена визначаються, як ідентифікатори.

2. Основні директиви : segment , end, ends, proc, endp, assume.

Директиви SEGMENT і ENDS - визначають сегменти коду, даних та стеку. Загальна структура опису сегменту :

ім’я SEGMENT [ атрибути сегменту ]

........................ Тіло сегменту

ім’я ENDS

Атрибути сегменту, якщо вони присутні, визначають:

  • вирівнювання сегмента (на границю слова, подвійного слова, параграфа або сторінки);

  • комбінування та спосіб об’єднання з іншими сегментами;

  • клас сегменту;

  • розмір сегменту.

Атрибут розміру сегменту може приймати такі значення:

  • use16 — це означає, що сегмент допускає 16-бітний режим адресації. Сегмент може мати до 64 Кбайт коду або даних;

  • use32 — сегмент буде використаний 32-бітний режим адресації. Сегмент може мати до 4 Гбайт коду або даних.

Режим адресації визначає спосіб кодування машинних команд.

Директиви PROC і ENDP - визначають процедуру. Структура опису процедури (підпрограми) :

ім’я PROC [ параметри ]

............ Тіло процедури

ім’я ENDP

Процедури повинні знаходитися в межах сегмента коду. Вихід з процедури здійснюється за допомогою команди мови асемблера RET, процедура може мати декілька виходів. В дійсності в асемблері є три команди виходу RET, RET N (N – число) та RETF. Виклик процедур здійснюється за допомогою команди мови асемблера CALL.

Синтаксис виклику :

CALL ім’я _процедури

Після завершення роботи процедури керування передається наступній команді.

Директива ASSUME - вказує асемблеру з якими сегментами будуть пов’язані сегментні регістри.

Директива END використовується признак завершення коду програми мовою асемблера. Синтаксис директиви :

END [Start_adress]

де Start_adress - це необов’язковий параметр. В головному модулі програми вказує на точку, з якої починає виконуватися програма ( її називають точкою входження в програму). В інших модулях програми цей параметр відсутній. Будь-який текст, що знаходиться після директиви END ігнорується компілятором.

Директива TITLE – це заголовок програми, вміст директиви, тобто текст в після вказаного ключового слова ігнорується як коментар.

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