компілятор masm

На всіх попередніх уроках я розповідав про компіляторі 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

виберіть тип викликів для ваших процедур.

Схожі статті