Assembler #6 Макросы

Assembler #6 Макросы

https://t.me/Torchik_Ru

Доброго времени суток, господа. В этой части обучения мы выучим такое понятие как "Макрос". Изучать мы будем, как и раньше, под NASM.

Прошу заметить, что на других реализациях языка могут быть и другие реализации макросов.

Что такое "макрос"?

Макрос - это одна инструкция, которая имеет своей целью исполнить другие, ранее определённые, инструкции для облегчения работы и создания "модульности" для программы.

Выше Вы видите макрос exit, который исполняет системый вызов, который Вы уже знаете.

Определение макроса

Макрос создаётся таким образом

<name>
  имя макроса
<argc>
  количество аргументов, которые принимает макрос
<macro body>
  само определение макроса

Макрос "Exit"

Макрос для выхода из программы реализовывается таким образом:

exit - имя макроса
0 - количество параметров макроса

Аргументы для макроса

Если в макрос передаются аргуметы, то использовать их в теле макроса следует таким образом:

%1 - первый аргумент
%2 - второй аргумент
Т. Д.

Например этот код будет выводить 3 и 4

Если арументов более одного, то они передаются через запятую:

Этот код выведет 5

Лейблы в макросах

Мы так-же можем объявлять локальные лейблы внутри макросов. Примером является такой код:

Но такой подход может привести к неприятной ситуации. В результате исполения программы мы получим такую ситуацию:

Лейбл _loop будет вызываться два раза по одному и тому же имени. Это приведет к краху программы. Чтобы постоянно вызывать уникальный лейбл нужно использовать знак %% перед именем лейбла.

Определение значений через EQU

equ используется для определения констант для будущего использования.

Подключение внешних файлов

%includeподключает внешний файл и вставляет его содержимое в файл, в который он подключен.

Макросы и EQU-определения обычно пишутся в include-файлах.

Само подключение выглядит так:

Домашнее задание

Напишите программу для вывода строк(мы писали подпрограмму для этого в прошлом уроке), используя equ и %include

Спасибо за внимание

Report Page