Команды двоичной арифметики, синтаксис команд

Программирование арифметических выражений в языке Ассемблер происходит через некоторые команды такие, как: mul, div, sub, add. Эти команды называются командами арифметических операций.

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

Adc – сложение с переносом

XAdd – обменять между собой и сложить

Синтаксис: Add приемник, источник

Sub – команда вычитания. Вычитает два числа. Результат заносится в первый регистр.

Sbb – вычитание с займом

Синтаксис: Sub приемник, источник

Mul – команда умножения без учета знака. Она умножает регистр ax на то, что стоит после нее.

IMul – умножение со знаком

Синтаксис: MUL источник

Div – команда деления без учета знака. Она делит регистр ax на то, что стоит после нее..

IDiv - деление со знаком

Синтаксис:

inc - вызывают инкременты. Увеличивает на 1.

dec - декремент, уменьшает на 1

Синтаксис: INC приемник

NEG - Изменение знака

Синтаксис: NEG приемник

CMP - Сравнение

Синтаксис: CMP приемник, источник

Команды логических операций, синтаксис команд.

Эти команды, точно так же, как и арифметические команды, преобразуют данные, но делают это не арифметически. Логические команды работают со значениями 0 и 1, которые использует ЭВМ.

Четырьмя основными логическими командами являются AND (и), OR (или), XOR (исключающее или), NOT (не). Эти четыре команды работают непосредственно с нулями и единицами двоичного кода.

Простейшая функция выполняется командой NOT. Эта команда основывается на определении единицы и нуля, как истины (TRUE) и лжи (FALSE) соответственно.

Действие логических команд:

X Y X AND Y X OR Y X XOR Y
Знач. NOT

Синтаксис:

NOT <операнд> (логическое умножение)

AND <операнд1>, <операнд2> (логическое сложение)

OR <операнд1>, <операнд2> (выполняет сложение по модулю 2 )

XOR <операнд1>, <операнд2>

Сдвиговые операции:

· Команда: SARприемник, счетчик
· Назначение: Арифметический сдвиг вправо
· Команда: SALприемник, счетчик
· Назначение: Арифметический сдвиг влево
· Команда: SHRприемник, счетчик
· Назначение: Логический сдвиг вправо
· Команда: SHLприемник, счетчик
· Назначение: Логический сдвиг влево


Общий вид строк программ на языке ассемблера.

Строка имеет следующий синтаксический вид:

метка команда/директива операнд(ы) ;комментарии

Все поля не обязательны. Метка может быть любой комбинацией английских букв и символов. Второе поле содержит команды процессора, транспортируемые в исполняемый код или директиву управляющую работой ассемблера. Если команду или директиву необходимо продолжить на следующей строке, то используется символ обратный слеш: \.

По умолчанию язык ассемблера не различает заглавные и строчные буквы в написании команд или директив.

Метка: назначение, синтаксис, правила именования, директива метки, вызов метки

Метка в языке ассемблера может содержать следующие символы:

· все буквы латинского алфавита;

· цифры от 0 до 9;

· спецсимволы: _, @, $, ?.

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

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

Директивы, работающие напрямую с метками: LABEL, EQU и =.

Директива LABEL определяет метку и задает ее тип. Тип может быть одним из:

· BYTE (байт),

· WORD (слово),

· DWORD (двойное слово),

· FWORD (6 байт),

· QWORD (учетверенное слово),

· TBYTE (10 байт),

· NEAR (ближняя метка),

· FAR (дальняя метка).

Метка получает значение, равное адресу следующей команды или следующих данных, и тип, указанный явно.

В зависимости от типа команда mov метка,0 запишет в память байт , заполненный нулями, а команда call метка выполнит ближний или дальний вызов подпрограммы.

Директива EQU присваивает метке значение, которое определяется как результат целочисленного выражения в правой части.

Метка = выражение

Специальные предопределенные метки:

· @date или ??date - это может быть текущая дата

· @cpu - тип процессора

· $ - текущий адрес

Псевдокоманды

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

имя_переменной d* значение

где D* — одна из нижеприведенных псевдокоманд:

DB — определить байт;

DW — определить слово (2 байта);

DD — определить двойное слово (4 байта);

DF — определить 6 байт (адрес в формате 16-битный селектор: 32-битное смещение);

DQ — определить учетверенное слово (8 байт);

DT — определить 10 байт (80-битные типы данных, используемые FPU).

Поле значения может содержать одно или несколько чисел, строк символо, операторов ? и DUP, разделенных запятыми. Например:

text_string db 'Hello world!'

number dw 7

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

Если нужно заполнить участок памяти повторяющимися данными, используется специальный оператор DUP.

Наши рекомендации