Неспециализированные сведения
Текст исходной программы складывается из операторов ассемблера, любой из которых занимает отдельную строчок этого текста. Различают два директивы операторов: и типа инструкции. Первые при трансляции преобразуются в команды процессора, каковые выполняются по окончании загрузки в память загрузочного модуля программы, имеющего расширение .COM либо .EXE . Операторы второго типа управляют процессом ассемблирования — преобразования текста исходной программы в коды объектного модуля (расширение .OBJ). Ассемблер интерпретирует и обрабатывает операторы один за другим, генерируя последовательность из байтов и команд процессора данных.
Очень направляться остановиться на применении макрокоманд. При программировании на макроассемблере возможно вырабатывать обращение к довольно часто повторяющейся последовательности команд при помощи одного оператора. Данный прием пара напоминает вызов подпрограмм в языках большого уровня, но между ними лежит значительное различие, заключающееся в том, что подпрограмма, занимающая некий участок памяти, возможно выполнена неограниченное число раз методом передачи ей управления из вызывающей программы, в которую подпрограмма сама после этого возвращает управление. В ассемблере употребляются макровызовы макроопределений. Макроопределение — это последовательность операторов, каковые смогут содержать формальные параметры. Макроопределение и команда обращения к макроопределению (макровызов) образуют макрокоманду. Макровызов — это оператор вызова макроопределения. В случае если макроопределение содержит формальные параметры, то макровызов обязан содержать фактические значения этих параметров, каковые будут подставлены вместо соответствующих формальных. В результате макровызовва формируется настоящая последовательность команд — макрорасширение. Макрорасширение вставляется в исходный текст программы на место оператора макровызова. Так, в исходный текст программы макрорасширение одного и того же макроопределения возможно засунуто пара раз, по числу макровызовов. Каждое макрорасширение по окончании трансляции естественно занимает собственный участок памяти.
В ассемблере имеется три вида вызова подпрограмм.
— CALL NEAR (маленький вызов);
— CALL FAR (долгий вызов);
— INT (прерывание),
но ни один из них не содержит явного механизма передачи параметров. Данный механизм определяется внутренней организацией приводимой к.
Неспециализированный формат оператора ассемблера имеет следующий вид:
[Метка:]Код_операции[Операнд1[,Операнд2]][;Комментарий],
где элементы, указанные в квадратных скобках, смогут отсутствовать.
Пробелы вводятся произвольно, но минимум один пробел должен быть по окончании кода операции.
Метка — это идентификатор, присваиваемый первому байту того оператора, в котором она появляется.
Код_операции — это мнемоническое обозначение соответствующих команд процессора.
Операнды оператора ассемблера описываются выражениями. Выражения конструируются на базе операций над числовыми и текстовыми константами, идентификаторами и метками переменных с применением знаков операций и некоторых зарезервированных слов. Ниже приведены все определенные в ассемблере операции. Порядок старшинства операций от высшей к низшей:
LENGTH, SIZE, WIDTH, MASK, (), [],
.
:
PTR, OFFSET, SEG, TYPE, THIS
HIGH, LOW
+ (unary), — (unary)
*, /, MOD, SHL, SHR
+, —
EQ, NE, LT, LE, GT, GE
NOT
AND
OR, XOR
SHORT, .TYPE
Старшинство операций определяет порядок, по которому будет вычисляться выражение. Более старшие операции будут производиться раньше операций, имеющих меньшее старшинство. Операции, стоящие в одной строке, имеют равный приоритет. Операции равного старшинства вычисляются слева направо. Операции, стоящие в скобках, выполняются первыми.
Пример оператора ассемблера: l0c_1: mov ax,(DAT_1+4) SHR 4, тут использованы следующие операции ассемблера: ( ), + и SHR.
NASM. Первая программа. Урок 1