Лабораторна робота № 1 по дисципліні «Методи і засоби комп’ютерних інформаційних технологій»
«Вивчення структури програми на асемблері»
1.1 Мета роботи
Метою даної роботи є вивчення структури програми на асемблері, використання різних директив сегментації й створення примітивних програм, типу «Hello Word».
1.2 Структура програми на асемблері
Програма на асемблері являє собою сукупність блоків пам'яті, називаних сегментами пам'яті. Програма може складатися з одного або декількох таких блоків-сегментів. Кожний сегмент містить сукупність пропозицій мови, кожне з яких займає окремий рядок коду програми.
Пропозиції асемблера бувають чотирьох типів:
- команди або інструкції, що представляють собою символічні аналоги машинних команд. У процесі трансляції інструкції асемблера перетворяться у відповідні команди системи команд мікропроцесора;
- макрокоманди - оформлювані певним чином пропозиції тексту програми, що заміщаються під час трансляції іншими пропозиціями;
- директиви, що є вказівкою транслятору асемблера на виконання деяких дій. У директив немає аналогів у машинному представленні;
- рядка коментарів, що містять будь-які символи, у тому числі й букви кирилиці. Коментарі ігноруються транслятором.
1.2.1 Синтаксис асемблера
Речення, що утворюють програму, можуть являти собою синтаксичну конструкцію, відповідну до команди, макрокоманди, директиви або коментаря. Для того щоб транслятор асемблера міг розпізнати їх, вони повинні формуватися по певних синтаксичних правилах.
Формат речення асемблера: (квадратні дужки означають не обов'язкові параметри)
Оператор директиви [;текст коментаря]
Оператор команди [;текст коментаря]
Оператор макрокоманди [; текст коментаря]
Формат директив:
[Ім'я] директива [операнд1...операндk][; коментар]
Формат команд і макрокоманд
[Ім'я мітки:] КОП [операнд1...операндк][;коментар]
Тут:
- ім'я мітки - ідентифікатор, значенням якого є адреса першого байта того речення вихідного тексту програми, яке він позначає;
- ім'я - ідентифікатор, що відрізняє дану директиву від інших однойменних директив;
- код операції (КОП) і директива - це мнемонічні позначення відповідної машинної команди, макрокоманди або директиви транслятора;
- операнди - частина команди, макрокоманди або директиви асемблера, що позначають об'єкти, над якими проводяться дії. Операнди асемблера описуються виразами із числовими й текстовими константами, мітками й ідентифікаторами змінних з використанням знаків операцій і деяких зарезервованих слів.
Припустимими символами при написанні тексту програм є:
- усі латинські букви: A-Z, a-z. При цьому заголовні й малі літери вважаються еквівалентними;
- цифри від 0 до 9;
- знаки ?, @, $, _, &;
- роздільники, . [ ] ( ) < > { } + / * % ! ’ " ? \ = # Л.
Речення асемблера формуються з лексем, що представляють собою синтаксично нероздільні послідовності припустимих символів мови, що мають зміст для транслятора.
Лексемами є:
- ідентифікатори - послідовності припустимих символів, що використовуються для позначення таких об'єктів програми, як коди операцій, імена змінних і назви міток. Правило записи ідентифікаторів полягає в наступному: ідентифікатор може складатися з одного або декількох символів. У якості символів можна використовувати букви латинського алфавіту, цифри й деякі спеціальні знаки - _, ?, $, @. Ідентифікатор не може починатися символом цифри. Довжина ідентифікатора може бути до 255 символів, хоча транслятор сприймає лише перші 32, а інші - ігнорує. Регулювати довжину можливих ідентифікаторів можна з використанням опції командного рядка mv. Крім цього, існує можливість указати транслятору на те, щоб він розрізняв прописні й малі літери або ігнорував їхню відмінність (що й робиться за замовчуванням). Для цього застосовуються опції командного рядка /mu, /ml, /mx;
- ланцюжка символів - послідовності символів, укладені в одинарні або подвійні лапки;
- цілі числа в одній з наступних систем числення: двійкової, десяткової, шістнадцяткової.
Ототожнення чисел при записі їх у програмах на
асемблері проводиться за певними правилами:
- Десяткові числа не вимагають для свого ототожнення вказівки яких-небудь додаткових символів, наприклад 25 або 139.
- Для ототожнення у вихідному тексті програми двійкових чисел необхідно після запису нулів і одиниць, що входять до їхнього складу, поставити латинське “b”, наприклад 10010101b.
- Шістнадцяткові числа мають більше умовностей при своєму записі:
- По-перше, вони складаються із цифр 0...9, рядкових і прописних букв латинського алфавіту a, b, c, d, e, f або A, B, C, D, E, F.
- По-друге, у транслятора можуть виникнути труднощі з розпізнаванням шістнадцяткових чисел через те, що вони можуть бути як з одних цифр 0...9 (наприклад, 190845), так і починатися з букви латинського алфавіту (наприклад, ef15). Для того щоб "пояснити" транслятору, що дана лексема не є десятковим числом або ідентифікатором, програміст повинен спеціальним образом виділяти шістнадцяткове число. Для цього, на кінці послідовності шістнадцяткових цифр, що становлять шістнадцяткове число, записують латинську букву “h”. Це обов'язкова умова. Якщо шістнадцяткове число починається з букви, то перед ним записується провідний нуль: 0ef15h.
