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
Спасибо за внимание