На всіх попередніх уроках я розповідав про компіляторі TASM, тому що він стандартний і ненавороченний. Але більш популярний компілятор це MASM, він створений спеціально для написання програм на асемблері для Win32. У ньому є макроси і спеціальні директиви для спрощення програмування.
Основна перевага MASM це макрос invoke, він дозволяє викликати API функції по-простому з перевіркою кількості і типу параметрів. Це майже той же call, як в TASM, але цей макрос перевіряє кількість параметрів і їх типи. Ось так викликається функція:
Щоб використовувати invoke для виклику процедури, ви повинні визначити її прототип:
Ця директива оголошує процедуру, названу testproc, яка бере 3 параметра розміром DWORD.
Тепер, якщо ви зробите це.
masm видасть вам помилку тому, що процедура testproc бере 3 параметра, а не 4. Masm також має контроль відповідності типів, тобто перевіряє, чи мають параметри правильний тип (розмір).
Це створює процедуру, названу testproc, з трьома параметрами. Прототип використовується, invoke. Всі параметри можна використовувати в коді процедури, вони автоматично розпакуються з стека. Також в процедурах можна використовувати локальні змінні.
Ви не можете використовувати ці змінні поза процедурою. Вони збережені в стеці і видаляються при поверненні з процедури.
Конструкції порівняння і повтору.
If - Про цю конструкції я розповідав на 10 уроці. Вона має той же самий синтаксис, що і в TASM.
Repeat - Ця конструкція виконує блок, поки умова не істинно:
Ця конструкція повторює код між repeat і until, поки eax не стане рівним 1.
While - Конструкція while це інверсія конструкції repeat. Вона виконує блок, поки умова істинна:
Ви можете використовувати директиву .BREAK, щоб перервати цикл і вийти.
Якщо eax = 7, цикл while буде перерваний.
Директива continue здійснює перехід на код перевіряючий умова циклу в конструкціях repeat і while.
Тепер наша перша програма видозмінюється наступним чином:
При компіляції в TASM шляху до статичних бібліотек ми вказували при компіляції, в MASM шляху до статичних бібліотек ми вказуємо в тексті програми точно так само як і шляхи до включених файлів за допомогою директиви includelib.
Прототипи кожної з бібліотек є в однойменних включаються файлах в папці include. Тепер не треба писати прототипи функцій самому, вони вже є:
У цих включаються файлах визначені функції без букв A або W в кінці. Тепер не треба вказувати ці букви в кінці.
Компіляція.
ассемблирование без лінковки
В основному ви будете використовувати цю опцію, так як ви будете використовувати зовнішній линкер (наприклад link.exe), для компонування ваших файлів.
генерувати об'єктний файл в COFF форматі
Це генерує формат файлу для компоновщика microsoft.
ім'я об'єктного файлу
може використовуватися, якщо ви хочете, щоб вихідний файл був з іншим ім'ям, не таким як вихідний файл.
Використовує виклики Pascal, C, або Stdcall
виберіть тип викликів для ваших процедур.