- •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)
2.2.2.1Передача параметрів у пакетний файл при його виконанні
Виклик будь-якої консольної команди, пакетного файлу або прикладної прграми в консолі виконується уведенням приблизно такої послідовності слів (командного рядка):
Ім'я_пакета слово_1 слово_2 слово_3 ...
ОС уміє «розібрати» командний рядок на окремі слова-параметри. Тоді ім'я_пакета – це буде параметр командного рядка номер 0, слово_1 – параметром номер 1, слово_2 – параметром номер 2 і т.д.
Всі ці параметри можна передати усередину пакета при його виконанні. Щоб це стало можливим, у рядках пакетнику потрібно, де потрібно, використовувати імена-підстановки %1, %2, %3 і т.д. Тоді, скрізь, де буде написане %1, замість нього буде підставлене слово_1, замість %2 - слово_2 і т.д. І виходить, що пакетник буде використати передані йому параметри у своїй роботі. Це перетворює пакетний файл із «жорстко запрограмованого» в універсальний, котрим можна обробляти різні файли, передаючи їхні імена як параметри при виклику з командного рядка. Це дуже зручно й вигідно.
У пакетнику buіldc.bat це використовується повною мірою . Переглядаючи його текст (див. рядки 2, 3, 4, 7, 9,12) ви в цих рядках скрізь побачите %1. У кожне таке місце при виконанні підставляється ім'я (тільки ім'я!) вихідного файлу асемблерної програми, у нашому випадку prog. До речі, у рядку 23 видно, чому файл вихідного тексту при виклику не треба задавати як prog.asm, а варто вказувати тільки як prog. Пакетник підставляє потрібні розширення усюди, де потрібно, вони прописані в ньому явно.
2.2.2.2Відкоментований текст пакетного файлу buіldc.Bat
Припустимо, що пакетний файл викликався командою
buildc prog. Це означає, що замість «%1» усюди буде підставлено «prog».
№ рядка пакета |
Рядок пакетного файлу |
Коментар |
1 |
@echo off |
@ - Відключити у даній команді (тільки у ній!) ехо-вивід. Сама команда echo off відключає ехо вивід усіх наступних команд пакету. |
2 |
if exist %1.obj del %1.obj |
Якщо існує файл prog.obj, видалити файл prog.obj |
3 |
if exist %1.exe del %1.exe |
Якщо існує файл prog.exe, видалити файл prog.exe |
4 |
\masm32\bin\ml /c /coff %1.asm |
Викликати компілятор ml.exe (.exe уявляється, хоча не введено). Ключ /c – «тільки компілювати», ключ /coff – «створювати об’єктний файл формату COFF». Компілювати файл prog.asm. |
5 |
if errorlevel 1 goto errasm |
Якщо попередня команда закінчилась з помилкою (errorlevel=1), перейти на мітку errasm. |
6 |
if not exist rsrc.obj goto nores |
Якщо НЕ існує об’єктного ресурсного файлу rsrc.obj, перейти на мітку nores. Всі ваші навчальні програми НЕ БУДУТЬ використовувати ресурсні файли, тому рядки 7-10 данной таблицы ніколи не будуть виконуватись. |
7 |
\masm32\bin\Link /SUBSYSTEM:CONSOLE /OPT:NOREF %1.obj rsrc.obj |
Рядок не виконується, див. рядок 6. (Взагалі тут викликається компоновник Link для обробки двох об’єктних файлів – prog.obj та rsrc.obj) |
8 |
if errorlevel 1 goto errlink |
Рядок не виконується, див. рядок 6. (це умовний перехід на errlink, якщо лінкер в рядку 7 відпрацював би з помилкою) |
9 |
dir %1.* |
Рядок не виконується, див. рядок 6. (показати в поточному каталозі всі файли з іменами «prog») |
10 |
goto TheEnd |
Рядок не виконується, див. рядок 6. (безумовний перехід на мітку TheEnd) |
11 |
:nores |
Мітка переходу з рядка 6. |
12 |
\masm32\bin\Link /SUBSYSTEM:CONSOLE /OPT: REF %1.obj |
Виклик компоновника Link.exe (.exe уявляється, хоча не введено). Ключ /SUBSYSTEM:CONSOLE означає «створювати ехе-модуль для програми з консольним виконанням». Ключ /OPT:REF – «включати в ехе-модуль тільки ті процедури з бібліот, на як в програмі є посилання». Компоновку виконувати для об’єктного файлу prog.obj. |
13 |
if errorlevel 1 goto errlink |
Якщо попередня команда закінчилась з помилкою (errorlevel=1), перейти на мітку errlink |
14 |
dir %1.* |
показати в поточному каталозі інформацію про всі файли з іменами «prog» |
15 |
goto TheEnd |
Перейти до мітки TheEnd |
16 |
:errlink |
Мітка переходу з рядків 8 та 13. Тут оброблюється ситуація «компоновка була з помилкою». |
17 |
echo _ |
Вивести на екран «_». |
18 |
echo Link error |
Вивести на екран текст «Link error». |
19 |
goto TheEnd |
Перейти до мітки TheEnd |
20 |
:errasm |
Мітка переходу з рядка 5. Тут оброблюється ситуація «асемблювання (тобто компіляція) було з помилкою». |
21 |
echo _ |
Вивести на екран «_». |
22 |
echo Assembly Error |
Вивести на екран текст «Assembly Error». |
23 |
goto TheEnd |
Перейти до мітки TheEnd |
24 |
:TheEnd |
Мітка кінця пакету. На неї багато переходів згори пакету. |
25 |
pause |
Вивести на екран текст «Нажмите любую клавишу для продолжения» і чекати натискання, після чого завершити пакет. |
