- •1.2.2Системний рядок path – список шляхів пошуку
- •1.2.3Системний рядок pathext – список розширень виконуваних файлів
- •1.2.4Пакет програмного розробника masm32
- •1.2.4.1Як встановити masm32 на свій комп’ютер
- •1.2.4.6Папки з прикладами програм
- •1.3Виконання роботи
- •1.3.1Перегляд поточних значень системних змінних
- •1.3.3Інсталяція sdk masm32
- •1.3.4Створення власної робочої папки і перевірка можливості роботи з нею
- •1.4Склад звіту з роботи
- •1.5Контрольні питання
- •2Перша асемблерна програма
- •2.1Мета роботи
- •2.2Теоретичні відомості
- •2.2.1Послідовність створення виконуваного ехе-модуля на асемблері
- •2.2.1.1Компіляція
- •2.2.1.2Компоновка
- •2.2.2Пакетний файл buildc.Bat
- •2.2.2.1Передача параметрів у пакетний файл при його виконанні
- •2.2.2.2Відкоментований текст пакетного файлу buіldc.Bat
- •2.2.3Шаблон асемблерної програми
- •2.3Виконання роботи
- •Inkey "Натиснiть кнопку!"
- •2.4Склад звіту з роботи
- •2.5Контрольні питання рекомендована література
- •Префікси «угорської» нотації типів даних в описах викликів функцій аpi Win32 (Win64)
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРНІГІВСЬКИЙ НАЦІОНАЛЬНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
КАФЕДРА ІНФОРМАЦІЙНИХ ТА КОМП'ЮТЕРНИХ СИСТЕМ
Методичні вказівки до лабораторних робіт
з нормативної дисципліні «Системне програмування»
студентов спеціальності 123 «Комп’ютерна інженерія»
Обговорено і рекомендовано
на засіданні кафедри
інформаційних і
комп'ютерних систем,
протокол №1 від 31.08.2017 р.
Чернігів ЧНТУ 2017
MASM32.LAB.
Методичні вказівки до лабораторних
робіт с нормативної дисципліни «Системне
програмування» студентів спеціальності
123 «Комп’ютерна інженерія»/ Укл.
Нестеренко С.О. – Чернігів: ЧНТУ, 2017. –
Укладач: Нестеренко Сергій Олександрович, кандидат технічних наук, доцент
Відповідальний за випуск: Зайцев Сергій Васильович, завідувач кафедри інформаційних та комп’ютерних систем, доктор технічних наук
Рецензент: Акименко Андрій Миколайович, кандидат фізико–математичних наук, доцент кафедри інформаційних та комп’ютерних систем Чернігівського національного технологічного університету
СОДЕРЖАНИЕ
ВСТУП
Програмування на рівні машинних команд (низькорівневе) є незамінним для багатьох напрямків інформаційних технологій: створення ефективних прикладних програм і драйверів, зворотна розробка (reverse engіneerіng), криптографія, захист інформації та багатьох, багатьох інших.
Програмними аналогами машинного коду є асемблери – особливі мови програмування, у яких один оператор відповідає одній команді процесора. Асемблерів існує багато хоча б тому, що існує багато процесорів з різними наборами машинних команд, що виконуються ними. Більш того, для одного та того самого процесора (наприклад, з архітектурою ІA-32/x86) створено кілька асемблерів з трохи відмінним синтаксисом: tasm, masm, nasm, fasm... У цьому змісті серед всіх відомих асемблерів помітно виділяється Mіcrosoft Macro Assembler, який відомий під абревіатурою MASM32 (32 означає, що підтримується розробка 32–розрядних застосунків).. МАСМ постійно підтримується та розвивається корпорацією Mіcrosoft і поширюється нею безкоштовно, що, звичайно, сприяє посиленню його популярності. Саме тому МАСМ обраний кафедрою як цільова мова низькорівневого програмування для вивчення в курсі "Системне програмування".
1ПІДГОТОВКА ДО РОБОТИ ПАКЕТУ MASM32
1.1Мета роботи
Вивчити способи підготовки пакету MASM32 до роботи, виконати необхідні дії на своєму комп’ютері.
Ознайомитись із структурою і організацією пакету MASM32.
1.2Теоретичні відомості
1.2.1Середовище виконання програм
Середовище виконання («рантайм енвайронмент», від англ. runtime — «час виконання») — це сукупність ресурсів операційної системи (ОС), якою може користуватись програма під час її виконання. Інший термін для середовища виконання – програмне оточення.
Спрощено середовище виконання складається з:
а) змінних ОС, що відносяться до нього;
б) таблиць об’єктів ОС;
в) модулів динамічних бібліотек ОС (саме в них знаходиться код об’єктів ОС з пункту «б»).
Для нормального виконання будь–яка програма повинна мати доступ до цих ресурсів.
Об’єкти ОС (пункти «б» та «в») створюються фірмою–розробником і міняти їх досить складно. Але от змінні оточення (пункт «а») доступні для корекції користувачем ОС і від їхнього правильного настроювання часто залежить ефективність роботи програм.
Подивитися список змінних та їхніх поточних значень просто: запустіть cmd.exe та введіть команду set.
Існує і графічний інтерфейс доступу до них. В Wіndows 7 добратися до них (рис.1.1) можна так: Кнопка Пуск > Комп'ютер > Права кнопка миші > Властивості > бокове меню «Додаткові параметри системи» (Вискочить віконце «Властивості системи») > Кнопка «Змінні середовища» (вискочить віконце «Змінні середовища»). У віконці «Системні змінні» можна дивитися змінні і їхні значення, а за допомогою кнопок «Створити», «Змінити» та «Видалити» їх можна редагувати.
Рисунок 1.1 – Доступ до змінної path через графічний інтерфейс ОС Windows.
Робити це в графічному інтерфейсі, чи в командному рядку застосування cmd.exe, вирішіть самі.
Нас у цій лабораторній роботі будуть цікавити тільки дві змінних операційної системи – path та pathext.
1.2.2Системний рядок path – список шляхів пошуку
Для нормальної роботи програм потрібно, щоб вони могли без ускладнень робити пошук на диску викликуваних допоміжних файлів. Це забезпечується завданням правильного значення системної змінної оточення path, що має формат "шлях1; шлях2;...; шлях".
Логіка її використання така. Якщо програма намагається відкрити файл із відомим ім’ям, то вона спочатку шукає його в поточній активній папці. Якщо не знаходить, то шукає в папці шлях1, потім, якщо не знаходить, перебирає по черзі всі шляхи в рядку path. Результатом буде або успіх пошуку (файл буде відкрито) або повідомлення про те, що файл не знайдений. Ясно, що повідомлення «файл не знайдений» говорить тільки про те, що його немає в переглянутих папках, але зовсім не означає, що такого файлу на диску немає зовсім.
При установці пакета МАСМ на комп’'ютер він розпаковується, як правило, у папку D:\MASM32. При підготовці з його допомогою асемблерних програм завжди використовуються файли з підпапок bіn, lіb та іnclude. Тому шляхи до цих папок потрібно дописати в кінець системної змінної path. Говорячи конкретно, якщо, припустимо, мало місце
path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem
то треба зробити
path=%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;D:\ MASM32\BIN;D:\ MASM32\LIB;D:\ MASM32\INCLUDE;
Нерідко виникає бажання не міняти змінну path «назавжди», як показано вище, а перевизначити її тільки на період виконання якогось процесу, наприклад, пакетного файлу. Для нашого випадку це можна було б зробити, включаючи у всі пакетні файли рядок
Path = %path%; d:\ MASM32\bin;d:\ MASM32\lib;d:\ MASM32\include
Тут %path% – це вираз, в якому використана директива %...%. Запис %вираз% означає «обчислити вираз і замість %вираз% підставити його значення. Тобто %path% означає «звернутись до поточного значення змінної path (в нашому випадку обчислення зводиться до простого читання змінної) і підставити її значення замість %path%. Після виконання цієї команди path буде налаштоване для работы с МАСМ, але після завершення пакетного файлу змінна path знов повернеться до попереднього стану.
1.2.3Системний рядок pathext – список розширень виконуваних файлів
Ця змінна визначає дві речі.
По-перше, вона визначає, файли з якими розширеннями ОС буде вважати такими, які виконуються.
По-друге, вона задає порядок пошуку файлів у тому випадку, якщо користувач увів ім’я файлу, але не ввів розширення. Приміром , користувач увів у командному рядку "myprog"і нажав Enter. Нехай змінна pathext=".com; .exe; .bat; .cmd", це її значення за замовчуванням. У цьому випадку ОС буде шукати файли в такому порядку: спочатку myprog.com, потім (якщо не знайде) – myprog.exe, потім (якщо не знайде нічого попереднього) – myprog.bat і, нарешті, (якщо не знайде нічого попереднього) – myprog.cmd. Ця послідовність пошуків буде застосована спочатку до поточної активної папки, а потім до кожної папки, шляхи до яких прописані в path.
1.2.4Пакет програмного розробника masm32
Корпорація Mіcrosoft включає в пакети Vіsual C++ та Vіsual Studіo компілятор макроасемблера ML.EXE і компоновник LІNK.EXE, які є необхідними компонентами середовища розробки програмних застосунків (ІDE). Ці програмні компоненти добре підтримуються та постійно обновляються. Mіcrosoft також безкоштовно поширює ML.EXE та LІNK.EXE як окремі продукти.
За посиланням https://msdn.microsoft.com/en-us/library/afzk3475.aspx?f=255&MSPPError=-2147217396 можна одержати кореневу сторінку «Microsoft Macro Assembler Reference», від якої є доступ до великого обсягу довідкової інформації про макроасемблер.
Але, незважаючи на це, багато ентузіастів створюють власні пакети для програмування на макроасемблері, що базуються на використанні ML.EXE та LІNK.EXE. Найбільш успішною варто вважати діяльність групи Стіва Хатчісона (Австралія), які безкоштовно поширюють і підтримують пакет МАСМ, доступний у Мережі за адресою http://www.masm32.com/ для скачування як мінімум із семи дзеркальних серверів.
Пакет МАСМ містить численні ресурси, які доповнюють ML.EXE та LІNK.EXE практично до працездатного середовища розробки асемблерних програм, хоча повнофункціональним ІDE-середовищем він не є. За своїм складом і способом роботи з ним MASM32 відповідає поняттю «пакет для розробника програм» (SDK – Software’s Developer Kit). Більш докладно про склад МАСМ і призначенні його компонентів мова йтиме нижче.
І, нарешті, існують численні фірми, ініціативні групи та окремі програмісти, які створюють і навіть нерідко супроводжують усякі додаткові програмні засоби для програмування на всіляких асемблерах – і МАСМ, і nasm, і fasm і всякі інші. Зрештою, фірма Іntel відкрито публікує відомості про архітектуру та систему команд своїх процесорів, і на цій базі навіть одній людині під силу написати «свій асемблер», прикладів чому ми знаходимо в Інтернеті багато.
Говорячи тут про «додаткові програмні засоби», ми маємо на увазі (за версією сайту http://www.wasm.ru/) такий (неповний) список класів програм:
- освітні програми;
- інтегровані середовища розробки;
- редактори ресурсів;
- дізасемблери;
- відлагоджувачі;
- модифікатори;
- інсталятори;
- розпакувальники;
- пакувальники;
- засоби криптографії;
- засоби роботи з реєстром;
- редактори байт-коду.
Настільки великий перелік одних тільки класів програм говорить про те, що при розробці системних програм на асемблері програмісти зустрічаються з великою кількістю особливих, нестандартних, специфічних ситуацій, для подолання яких і створюються ці інструменти. З деякими з них ми познайомимося.
