Учебный курс. Часть 28. Основы создания макросов

Автор: xrnd | Рубрика: Учебный курс | 16-11-2010

Отличительной особенность FASM является очень гибкая и мощная поддержка макросов. В этой статье мы рассмотрим лишь основы создания макросов, так как эта тема довольно обширна и рассказать всё в одной статье не получится.

Что же такое макросы? Макросы — это шаблоны для генерации кода. Один раз создав макрос, мы можем использовать его во многих местах в коде программы. Макросы делают процесс программирования на ассемблере более приятным и простым, а код программы получается понятнее. Макросы позволяют расширять синтаксис ассемблера и даже добавлять собственные «команды», которых нет в процессоре.

Обработкой макросов занимается препроцессор FASM. Преобразование исходного кода в исполняемый код FASM выполняет в два этапа. Первый этап — препроцессирование, а второй — собственно ассемблирование или компиляция. На первом этапе происходит вычисление всех числовых выражений, вместо констант и названий меток подставляются их фактические значения, вместо макросов подставляется сгенерированный код. На втором этапе все данные и машинные команды преобразуются в соответствующие байты, и в результате получается исполняемый файл требуемого формата.

Синтаксис создания макроса

Для создания макроса используется директива macro. Эта директива имеет следующий синтаксис:

macro < название_макроса> [< список_параметров>]
{
    < тело_макроса>
}

Читать полностью »

Учебный курс. Часть 27. Синтаксис объявления меток

Автор: xrnd | Рубрика: Учебный курс | 03-11-2010

Не сомневаюсь, что объявлять метки вы уже научились :) Однако, синтаксис FASM не ограничивается объявлением простых меток. В этой части мы рассмотрим дополнительную директиву для создания меток, а также научимся использовать локальные и анонимные метки.

В синтаксисе FASM существует 3 основных способа объявления меток:

1. Имя метки, после которого ставится двоеточие. Это самый простой способ. Обычно так объявляются метки в коде. (Подробнее об этом способе читайте в части 13 учебного курса)

exit_app:
    mov ax,4C00h
    int 21h

2. Использование директив объявления данных. Имя переменной является по сути той же меткой. Отличие от первого способа в том, что дополнительно с именем метки связывается размер переменной. (Подробнее читайте в части 5 учебного курса)

x db 5
y dw 34,1200,?
z rd 1

Читать полностью »

Учебный курс. Часть 5. Директивы объявления данных

Автор: xrnd | Рубрика: Учебный курс | 14-03-2010

Практически любая программа кроме машинных команд содержит также какие-то данные. Например, числа, текстовые строчки, идентификаторы, различные ресурсы и т.д. Данные могут быть как константами, не меняющими своё значение во время выполнения программы, так и переменными, в которых хранятся всякие промежуточные результаты.

Прежде всего нужно научиться объявлять данные в программе. Для этого в ассемблере существуют директивы объявления данных.

Размер
(в байтах)
Объявление Резервирование
1 db rb
2 dw
du
rw
4 dd rd
6 dp
df
rp
rf
8 dq rq
10 dt rt
N file

Читать полностью »