Синтаксис у языка ассемблер довольно простой. Его изучение может занять буквально несколько минут.

Как уже было ранее сказано, программа на языке ассемблер - это обычный текстовый файл, набранный в любом текстовом редакторе. Давайте посмотрим какой у него формат и что может содержать этот текстовый файл.

Вот небольшой пример программы на ассемблере, которая написана для операционной системы DOS и выводит на экран традиционное "Hello, World!":

                .model  tiny
                .code
                org     100h
                                           ; начало выполнения
start:          mov     dx, offset str
                mov     ah, 09h            ; команда вывода строки
                int     21h                ; вызов прерывания
                ret
str             db      'Hello, World!',0
                end     start

Программа состоит из строк, каждая из которых - это отдельная команда языка ассемблер, либо строка комментария. Каждая команда состоит из следующих компенентов: метка, операция, операнды, комментарий. Компоненты разделяются между собой символами пробела или табуляции. Рассмотрим каждый компонент подробнее.

Первый компонент необязательный - это метка строки. Метка - это мнемоническое обозначение строки программы. Используется для того чтобы в командах перехода не вычислять адрес памяти, куда нужно передать управления, а передать эту работу компилятору с помощью указания метки. Метка должна всегда заканчиваться символом двоеточия ":". В приведенном тексте программы содержится одна единственная метка - это "start:". В конце программы команда "end start" указывает компилятору с какой метки нужно начинать выполнение программы.

Второй компонент команды - это операция. Это обязательный компонент, без которого команда не может быть выполнена. Операцией может быть директива ассемблера, либо инструкция процессора. В приведенном тексте программы две первые строки содержат директивы ассемблера, указывающие ему какую модель памяти и какой тип сегмента использовать в программе.

                .model  tiny
                .code

В третьей строке тоже находится директива

                org     100h

Она указывает с какого смещения в сегменте должен располагаться последующий код. В данном случае - это адрес 100h, что соответствует смещению 256 байт от начала сегмента памяти. В последней строке программы расположена директива ассемблера

                end     start

Эта директива указывает ассемблеру на метку строки с которой нужно начинать выполнение программы.

В тексте программы есть еще одна директива

str             db      'Hello, World!',0

Это директива резервирования памяти. У нее несколько особый формат - вместо метки используется имя области памяти. В данном случае - это str.

Если в операции используется инструкция процессора, то пишется мнемоническое обозначение этой инструкции, согласно спецификации процессора. В нашем случае используемые инструкции процессора - это mov, int, ret.

Третий компонент команды - это, так называемые, операнды. Это необязательный компонент, формат и состав которого зависит от используемой директивы или инструкции процессора. Например директива указания модели памяти .model требует в качестве операнда название модели (tiny, small, flat). Директива .code вообще не требует операндов. Инструкции процессора mov требуется указать через запятую два операнда - приемник и источник данных. Также, инструкция ret, например, как и директива .code не требует операндов для работы.

Более подробно описание конкретных директив и инструкций будет рассмотрено в следующих статьях.

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

Как я и писал выше, синтаксис у ассемблера очень простой и изучается за несколько минут.

Теперь начинается самое интересное