Правила оформлення асемблерних програм

При наборі програм на мові асемблера дотримуйтеся наступних правил:

директиви набирайте великими літерами, інструкції - малими;

пишіть текст широко - не жаліти простору;

не виходьте за край екрану, тобто не робіть текст ширше 80 знаків - його не зручно буде редагувати і друкувати;

для відступів користуйтеся табуляцією (клавіша TAB);

блоки коментарів задавайте з однаковим відступом. Оптимальною вважається такий рядок: <TAB> <TAB> mov <TAB> ax, <пробіл> bx <(1-3) TAB>; <пробіл> текст коментаря

Кількість табуляцій перед коментарем визначається довжиною аргументів команди і може бути від 1 до 3. В міру знайомства з синтаксисом мови будуть приводитися додаткові правила.

 

Завдання для виконання

1. Запустити емулятор EMU8086.

2. Запустіть програму, натиснувши кнопку 'Emulate' або клавішу F5.

3. Запустіть отриманий код на виконання, використовуючи кнопку "RUN" або натисніть функціональну клавішу F9.

4. Відкомпілюйте програму. Поверніться в головне вікно форми, попередньо закривши всі відкриті вікна, далі натисніть кнопку "Compile".

5. Отриманий com-файл запустіть у вбудованій командному рядку WINDOWS ХХ на виконання або запустіть сеанс dos в total commander'e.

6. Проекспериментуйте з іншими прикладами, які відкриваються при натискання клавіші "Samples" в головному вікні емулятора.

7. Ознайомитеся з вбудованою в емулятор EMU8086 довідкою. У ній міститься вся необхідна інформація для роботи з програмою, ази написання програм на мові Assembler та ін.

 

 

Відповіді на контрольні запитання

1) Мова асемблера є самою низькорівневою мовою програмування. Вона ближче будь-яких інших наближена до архітектури ЕОМ та її апаратним можливостям, дозволяючи отримати до них повний доступ, на відмінно від мов високого рівня програмування. Асемблерна програма містить тільки той код, який ВВІВ ПРОГРАМІСТ. Ніяких додаткових "обв'язок". Вся відповідальність за "логічність" коду ПОВНІСТЮ лежить на плечах ПРОГРАМІСТА. Зазвичай підпрограми закінчуються командою повернення. Якщо її не поставити явно, транслятор все одно додасть її в кінець підпрограми. Асемблерна підпрограма без команди повернення НЕ ПОВЕРНЕТЬСЯ в точку виклику, а буде виконувати код, наступний за підпрограмою, ніби він є її продовженням. Можна спробувати "виконати" дані замість коду. Часто це позбавлено сенсу. Але якщо програміст це зробить, транслятор промовчить. Мова асемблера дозволяє робити все! Тут немає НІЯКИХ обмежень. Але з іншого боку це часто є джерелом помилок. Ці особливості призводять до того, що асемблерні програми часто "підвішують" комп'ютер, особливо у початківців програмістів.

2) Кожна мова програмування має свої особливості. Мова асемблера - не виняток. Традиційно перша програма виводить вітальне повідомлення на екран "Hello word!". На відміну від багатьох сучасних мов програмування в асемблерній програмі кожна команда розташовується на окремому рядку. Не можна розмістити кілька команд на одному рядку. Не прийнято, також, розбивати одну команду на кілька рядків. Мова асемблера є РЕГІСТРОНЕЧУТЛИВОЮ. Тобто в більшості випадків немає різниці між великими та малими літерами.

3) Команда може бути ДИРЕКТИВОЮ - вказівкою транслятору. Вони виконуються в процесі перетворення програми в машинний код. Багато директиви починаються з точки. Для зручності читання програми вони звичайно пишуться ВЕЛИКИМИ ЛІТЕРАМИ. Крім директив ще бувають ІНСТРУКЦІЇ - команди процесора. Саме вони і будуть становити машинний код програми. Потрібно відзначити, що поняття "машинного коду" дуже умовно. Часто воно позначає просто вміст виконуваного файлу, що зберігає окрім власне машинних команд ще й дані. В нашому випадку це буде текст виведеного повідомлення "Hello word!".

4) При наборі програм на мові асемблера дотримуйтеся наступних правил: директиви набирайте великими літерами, інструкції - малими; пишіть текст широко - не жаліти простору; не виходьте за край екрану, тобто не робіть текст ширше 80 знаків - його не зручно буде редагувати і друкувати; для відступів користуйтеся табуляцією (клавіша TAB); блоки коментарів задавайте з однаковим відступом. Оптимальною вважається такий рядок: <TAB> <TAB> mov <TAB> ax, <пробіл> bx <(1-3) TAB>; <пробіл> текст коментаря Кількість табуляцій перед коментарем визначається довжиною аргументів команди і може бути від 1 до 3.

5) Обробка тексту програми транслятором. На цьому етапі текст перетворюється в машинний код, званий об'єктним. Крім того, є можливість отримати лістинг програми, що містить крім тексту програми різну додаткову інформацію і таблиці, створені транслятором. Тип об'єктного файлу - OBJ, файлу лістингу - LST. Цей етап називається трансляцією.

6) Запуск програми. Якщо програма працює не зовсім коректно, перед цим може бути присутнім етапі налагодження програми за допомогою спеціальної програми - відладчика. При знаходженні помилки доводиться проводити корекцію програми, повертаючись до кроку 1. Таким чином, процес створення асемблерній програми можна зобразити у вигляді такої схеми. Кінцевою метою, нагадаємо, є працездатний виконуваний файл HELLO.EXE.

7) Обробка отриманого об'єктного коду компонувальником. Тут програма "прив'язується" до конкретних умов виконання на ЕОМ. Отриманий машинний код називається виконуваним. Крім того, зазвичай виходить карта завантаження програми в ОЗП. Виконуваний файл має тип EXE, карта завантаження - MAP. Цей етап називається компонування або лінковка.

8) Простий приклад. Зазвичай підпрограми закінчуються командою повернення. Якщо її не поставити явно, транслятор все одно додасть її в кінець підпрограми. Асемблерних підпрограма без команди повернення НЕ ПОВЕРНЕТЬСЯ в точку виклику, а буде виконувати код, наступний за підпрограмою, ніби він є її продовженням. Можна спробувати "виконати" дані замість коду. Часто це позбавлено сенсу. Але якщо програміст це зробить, транслятор промовчить. Мова асемблера дозволяє робити все! Тут немає НІЯКИХ обмежень. Але з іншого боку це часто є джерелом помилок. Ці особливості призводять до того, що асемблерні програми часто "підвішують" комп'ютер, особливо у початківців програмістів.

9) Все для вивчення асемблера в одному пакеті! Emu8086 поєднує в собі потужний редактор вихідного коду, асемблер, дізасемблер, програмний емулятор (віртуальний ПК) з відладчиком та поетапне навчання. Ця програма надзвичайно корисна для тих, хто тільки починає вивчати асемблер. Вона компілює вихідний код і виконує його за допомогою емулятора крок за кроком. Візуальний інтерфейс дуже простий в роботі. Ви можете спостерігати регістри, прапори і пам'ять під час виконання вашої програми. Арифметико-логічний пристрій (АЛП) показує внутрішню роботу центрального процесора (CPU). Емулятор виконує програми на віртуальному ПК, який повністю виключає можливість доступу з вашої програми до реальних апаратних засобів, таких як жорсткі диски і пам'ять. Так як ваш код асемблера виконується на віртуальній машині, то відладка стає легшою. Машинний код 8086 повністю сумісний з усіма наступними поколіннями мікропроцесорів Intel, включаючи Pentium II і Pentium 4, і я впевнений, що Pentium 5 буде також підтримувати команди 8086. Це робить код 8086 дуже привабливим, оскільки він виконується як на старих, так і на сучасних комп'ютерних системах. Іншою перевагою є те, що набір команд 8086 порівняно невеликий, і тому вивчити його буде легше. Emu8086 має більш легкий синтаксис, ніж будь-які інші асемблери, але буде генерувати програму, яка зможе бути виконана на будь-якому комп'ютері, що підтримує машинний код 8086. Це великий плюс для початківців! Примітка: Якщо ви не використовуєте Emu8086 для компіляції коду, ви не зможете виконати ваш вихідний код в покроковому режимі.

10) Просте - для виходу з нього досить натиснути Ctrl + Break або Ctrl + C (спочатку натискається клавіша Ctrl і, не відпускаючи її, натискається Друга клавіша - C або Break; відпускаються в зворотному порядку). Програма при цьому аварійно завершується виходом в DOS. М'яке - машина не реагує на Ctrl + Break, але клавіатура "дихає". Тобто при натисканні на клавіші, типу NumLock, моргають відповідні світлодіоди. У цьому випадку машину потрібно буде перевантажити, натиснувши Ctrl + Alt + Del. У середовищі Windows потрібно просто "вбити" сеанс, закривши вікно. Жорстке - машина ніяк не реагує на клавіатуру і не сприймає комбінацію Ctrl + Alt + Del. У цьому випадку допоможе апаратне скидання за допомогою кнопки "Reset", розташованої на передній панелі системного блоку. Не потрібно вимикати і включати ЕОМ. Ви як майбутні розробники апаратури повинні знати, що вона виходить з ладу в основному при включенні і виключенні.

 

Висновок:на даній лабораторній роботі ми ознайомилися з роботою емулятора Emu8086. З особливостями роботи асемблера на відмінно від мов високого рівня. Дізналися про структуру асемблерної програми; про то як оформлюється програмний код; які етапи отримання виконуваного файлу; для чого потрібен етап налагодження програми; основні моменти створення виконуваного файлу і емуляції роботи програми; які кроки технічного створення асемблерній програми в програмах TASM і MASM; про основні можливості емулятора Emu8086; та про методи боротьби з зависанням в DOS-і.

 

Мал 1.

Мал 2.

 

Мал 3.

З помилкою

 

Мал 4.

Без помилки

 

Мал 5.