Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скляров И. Изучаем Assembler за 7 дней (2010).pdf
Скачиваний:
1335
Добавлен:
23.02.2015
Размер:
2.11 Mб
Скачать

http://www.sklyaroff.ru

32

Создание исполняемой программы на ассемблере можно разбить на следующие этапы:

1.ВВОД ИСХОДНОГО ТЕКСТА. Пишется код на ассемблере в любом текстовом редакторе, например в стандартном Блокноте Windows (Notepad). Я лично люблю использовать встроенный редактор в файловом менеджере Far Manager, который вызывается клавишей <Shift>+<F4>. Скачать Far Manager можно с официального сайта http://www.farmanager.com. Жители xUSSR могут использовать Far Manager бесплатно.

2.ТРАНСЛЯЦИЯ. После того, как текст программы готов, он сохраняется в обычный текстовый файл с расширением .asm и передается через командную строку транслятору. Транслятор — это собственно и есть ассемблер, он переводит текст языка в машинный код (создает объектный файл .obj). Файл masm.exe, в пакете MASM, является транслятором. Параллельно с объектным файлом могут создаваться и другие вспомогательные файлы, например, файл листинга (.lst), предназначенный для отслеживания ошибок.

3.КОМПОНОВКА (ЛИНКОВКА). Полученный объектный файл, также через командную строку передается компоновщику (линковщику). И если не замечено ошибок, компоновщик выдает готовый исполняемый модуль (.exe). Компоновщик, как правило, стандартно входит в один пакет с ассемблером. Например, утилита link.exe в пакете MASM, это компоновщик.

4.ОТЛАДКА. Полученный исполняемый файл просматривается отладчиком на наличие логических ошибок. Этот этап является необязательным и обычно необходим только для больших программ. Существует огромное количество всевозможных отладчиков. Раздел 2.11 будет посвящен знакомству со стандартным DOS-отладчиком CodeView от Microsoft, который входит в пакет MASM (файл cv.exe в подкаталоге \BINR).

2.3. Структура программы

Программа на языке ассемблера состоит из строк, имеющих следующий общий вид:

[метка:] [команда или директива] [операнды] [;комментарий]

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

DownRight: add di,320

; Наращивание координаты Y

Разберем эту строку на отдельные поля: DownRight: является меткой,

add — команда,

di,320 — это два операнда команды ADD,

; Наращивание координаты Y — комментарий начинается от знака ";" и продолжается до конца строки.

2.3.1. Метка

Метка — это просто имя, которое обычно служит для ссылок на команду помеченной меткой из других мест программы.

Метка может состоять из любой комбинации букв латинского алфавита, а также цифр и символов _, $, @, ?, но цифра не может быть первым символом метки. Обратите внимание, метка не может содержать пробелы, поэтому, когда программистам нужно записать несколько слов в метке, то они их либо записывают

http://www.sklyaroff.ru

33

слитно, начиная каждое слово с большой буквы (например: LeftDownCicl), либо разделяют слова символом подчеркивания (например: left_down_cicl). Метка в программе должна быть уникальной, ранее не определявшейся, а за ней должно обязательно стоять двоеточие (:). Регистр символов по умолчанию не распознается, но это различие можно включить при ассемблировании в опциях командной строки транслятора. Если метка стоит одна в строке, то обычно считается, что такая метка метит следующую команду. Пример:

Start:

 

inc bx

; Метка Start: метит команду inc bx

2.3.2. Команда или директива

Во втором поле может стоять либо команда процессора, которая транслируется в исполняемый код, либо директива, которая не транслируется в исполняемый код, но служит для различных указаний самому ассемблеру. Формат строки директивы в основном совпадает с форматом строки команды, но перед директивой не может находиться поле метки. Использование основных команд и директив в программах на ассемблере мы рассмотрим в этой книге.

2.3.3. Операнды

Директива или команда может иметь один, два или три оператора, либо не иметь ни одного. Для многих команд наличие операнда обязательно, для других — запрещено. Операнды отделяются друг от друга запятыми. Если команда имеет два операнда, то первый операнд называется приемник, а второй источник. Источник никогда не изменяется в процессе выполнения команды. Например, в команде MOV AX,BX приемником является операнд AX, а источником операнд BX. После выполнения этой команды значение в регистре AX изменится, а в BX нет.

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

ADD

AX,

BX ; правильное размещение операндов

ADD

;

Ошибка! Команда ADD не может существовать без операндов.

AX,BX ;

Ошибка! Нельзя размещать операнды на отдельной строке.

2.3.4. Комментарий

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

Язык ассемблера допускает и многострочные комментарии, для этого служит директива COMMENT имеющая следующий синтаксис:

COMMENT маркер текст маркер

Где маркер — любой символ, который начинает комментарий. Этот же символ должен заканчивать многострочный комментарий.

текст — любой текст, который может размещаться на нескольких строчках. Пример:

COMMENT * все эти строки являются комментарием *

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