Ассемблер. Синтаксис
Синтаксис у языка ассемблер довольно простой. Его изучение может занять буквально несколько минут.
Как уже было ранее сказано, программа на языке ассемблер - это обычный текстовый файл, набранный в любом текстовом редакторе. Давайте посмотрим какой у него формат и что может содержать этот текстовый файл.
Вот небольшой пример программы на ассемблере, которая написана для операционной системы 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 не требует операндов для работы.
Более подробно описание конкретных директив и инструкций будет рассмотрено в следующих статьях.
Последний компонент команды - это комментарий. Комментарий всегда начинается с символа точка с запятой ";" и все, что следует за этим символом до конца строки, не анализируется компилятором. Комментарий может быть также единственным компонентом строки программы.
Как я и писал выше, синтаксис у ассемблера очень простой и изучается за несколько минут.
Теперь начинается самое интересное
Комментарии (0)