Тема 4. Требования языка Ассемблер
Написание программ на машинных кодах представляет из себя очень трудоемкий процесс и используется только в тех случаях, когда другими средствами нельзя решить поставленную задачу.
Для создания программ с множеством функций по управлению различными устройствами компьютера без машинных кодов не обойтись, т.к. различные режимы работы устройств задаются машинными кодами. Для того, чтобы максимально облегчить работу программиста при разработке программы, и в то же время обеспечить возможность манипулирования машинными кодами применяются языки программирования низкого уровня, наиболее распространенным из которых является язык Ассемблер.
Основные требования языка Ассемблер:
1. Комментарии в ассемблерных программах всегда начинаются символом « ; »
Ассемблер полагает в этом случае, что все символы, находящиеся справа от символа « ; » для данной строки являются комментарием и могут содержать любые печатные символы.
2. Основной формат кодирования команд Ассемблера имеет следующий вид:
[Имя] Команда [Операнды]
Имя и операнды могут отсутствовать. Имя, команда и операнды разделяются как минимум одним пробелом. Операнд определяет размещение данных, необходимых для выполнения команды.
Пример 1:
COUNT DB 1
В данном примере имеются имя, команда и один операнд. В качестве операнда используется число 1.
Пример 2:
MOV AX,0
В данном примере имя отсутствует, указана команда и два операнда, разделяющиеся друг от друга запятой.
В имени могут использоваться буквы и цифры, но первым символом обязательно должна быть буква.
3. Все имена регистров AX, BX, CX, DX и т.д. являются зарезервированными и используются только для указания соответствующих регистров.
Пример 3:
ADD AX,BX
Для данной команды Ассемблер автоматически определяет, что AX и BX являются регистрами процессора. Каждый регистр процессора имеет размерность 16 бит, т.е. 2 Байта. В ассемблерных командах регистры процессора могут использоваться полностью или наполовину, т.к. в каждом регистре имеется старший байт и младший байт.

В этой команде имеются два операнда. REG – это имя области памяти, определенной в сегменте данных. AH – это старший байт регистра AX.
4. В сегменте данных команда определяет константу, поле из нескольких констант или область ячеек памяти. В сегменте данных операнд определяет начальное значение данных:
CNTR DB 0
В данном примере CNTR - это имя константы, DB – это команда, определяющая размер константы в 1 Байт, 0 – это операнд, определяющий значение константы равное нулю.
5. В сегменте команд команда определяет действие, которое должен выполнить процессор. В сегменте команд операнд указывает где размещаются данные, с которыми работает команда:
MOV AX,BX
В данном примере MOV – это команда пересылки данных, выполняя которую процессор перемещает данные из одной области в другую, AX – операнд, который указывает, что данные должны записываться в регистр AX, BX – операнд, который указывает, что данные должны пересылаться из регистра BX.
6. В сегменте стека команда определяет размерность одного элемента стековой памяти. В сегменте стека операнд определяет количество элементов стековой памяти:
DW 32 DUP(?)
В данном примере DW – это команда, которая определяет, что каждый элемент стековой памяти должен иметь размер 2 Байта, 32 DUP(?) – это операнд, который определяет, что стековая память должна иметь 32 элемента. По этой команде задается объем стековой памяти в 64 Байта.
7. Текст ассемблерной программы должен составляться в простом текстовом редакторе и сохраняться в файле с расширением .ASM. Такой файл с текстом программы называется исходный модуль.
8. Исходный модуль должен быть преобразован в объектный модуль. Эта операция называется ассемблирование или компиляция. Операция ассемблирования выполняется программой Ассемблером-крмпилятором TASM.EXE. В результате ассемблирования получают объектный модуль в виде файла с расширением .OBJ. Объектный модуль содержит в себе машинные коды команд, адресов и данных, присутствующих в исходном модуле. Объектный модуль может использоваться в программах, написанных на других языках программирования.
9. При выполнении операции ассемблирования получают не только объектный модуль но и листинг. Листинг сохраняется в файле с расширением .LST. Листинг представляет собой текстовый файл, содержащий информацию о распределении команд и данных в ячейках сегментов. В листинге указываются относительные адреса ячеек сегментов, в которых размещаются команды и данные программы. Листинг используется программистом при отладке программы.
10. Объектный модуль должен быть преобразован в загрузочный модуль. Эта операция называется компоновка. Операция компоновки выполняется программой компоновщиком TLINK.EXE. При выполнении компоновки происходит перекодировка адресов команд и данных. Относительные адреса ячеек памяти, представленные в объектном модуле, преобразуются в физические адреса, т.к. оперативная память компьютера может работать только с физическими адресами. В результате компоновки получают загрузочный модуль либо в файле с расширением .EXE либо в файле с расширением .COM. Загрузочный модуль представляет собой готовую к выполнению программу, которую можно запускать в среде операционной системы. Файлы с расширением .EXE могут иметь произвольный размер, файлы с расширением .COM могут иметь размер не превышающий 64 кБ. Файлы с расширением .COM – это более быстродействующие программы, чем файлы с расширением .EXE.