Учебные материалы по математике | Команды ассемблера | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Команды ассемблера


dest — операнд-приемник; первый операнд команды и местонахождение результата;

src — операнд-источник; второй операнд команды;

src16 — шестнадцатиразрядный операнд-источник;

src8 — восьмиразрядный операнд-источник;

count — счетчик; может задаваться либо непосредственным операндом, либо с

помощью регистра CX(CL);

reg16 — шестнадцатиразрядный регистр;

mem16 — шестнадцатиразрядное слово памяти;

acc — аккумулятор — регистр AX(AL);

port — адрес порта ввода/вывода, задаваемый непосредственно;

addr — адрес памяти;

far_addr — "дальний адрес" — адрес в формате "сегмент:смещение";

near_addr— "близкий адрес" — адрес в формате "смещение";

short_label — "короткая метка" — метка(адрес) отстоящая от текущего адреса не

более чем на +/- 127 байт, фактически всегда преобразуется в однобайтовое знаковое

смещение;

7.6.1. Арифметические и логические инструкции

ADD dest, src Сложить два операнда: dest+src->dest

ADC dest, src Сложить два операнда с учетом переноса

src+dest+cy->dest

INC dest Увеличить содержимое операнда на 1 dest+1 ->

dest

SUB dest, src Вычесть из dest src : dest-src -> dest

SBB dest, src Вычесть с учетом заема: dest-src-cy -> dest

DEC dest Уменьшить на единицу содержимое dest: dest-1 ->

dest

NEG dest Измeнить знак операнда: 0-dest -> dest

MUL src беззнаковое умножение:

1.Операнды восьмиразрядные (AL)*src8 -> AX

2.Операнды шестнадцатиразрядные: (AX)*src16->

72

DX:AX

IMUL src Умножение чисел со знаком (Аналогично выше)

DIV src Деление беззнаковое:

1.Восьмиразрядные операнды АХ/src8 -> AL; AX

mod src8 -> AH;

2. Шестнадцатиразрядный операнд: DX:AX / src16

-> AX; DX:AX mod src16 -> DX.

IDIV src Деление чисел со знаком — аналогично

беззнаковому

AAA Надстройка для сложения чисел в коде ASCII.

Корректирует сумму двух байтов в регистре AL.

Если правые четыре бита в регистре AL имеют

значение больше 9 или флаг AF=1, то команда

AAA прибавляет к регистру AH единицу и

устанавливает флаги AF и CY. Команда всегда

очищает четыре левых бита регистра AL.

AAS Надстройка для вычитания ASCII-чисел.

Применяется после вычитания для

преобразования AL в две цифры кода ASCII.

AAM Надстройка для умножения ASCII — чисел. Делит

содержимое регистра AL на 10, частное

помещается в регистр AH, остаток — в регистр AL.

Применяется после умножения двух чисел в коде

ASCII.

AAD Надстройка для деления ASCII. Применяется

перед делением чисел в коде ASCII. Команда

корректирует делимое в двоичное значение в

регистре AL для последующего двоичного

деления. Затем умножает содержимое регистра

AH на 10, прибавляет результат к содержимому

регистра AL и очищает AH.

DAA Десятичная надстройка для сложения.

Корректирует результат операции сложения двух

упакованных десятичных чисел с целью

получения упакованного десятичного числа.

73

DAS Десятичная надстройка для вычитания.

Корректирует результат вычитания двух

упакованных десятичных чисел с целью

получения десятичного числа.

CBW Преобразовать БАЙТ в СЛОВО. Исходный

операнд в AL, результат в AX

CWD Преобразовать СЛОВО в ДВОЙНОЕ СЛОВО.

Исходное слово в AX, результат в DX:AX

AND dest, src Логическое И: src & dest -> dest

OR dest, src Логическое ИЛИ: src OR dest -> dest

XOR dest, src Исключающее ИЛИ: dest ^ src -> dest

NOT dest Логическое НЕ: dest -> ^dest

RCL dest, count Содержимое dest циклически сдвигается влево

через флаг переноса на count двоичных разрядов.

В качестве count может использоваться

содержимое регистра СL, либо непосредственный

операнд 1.

RCR dest, count То же, но сдвиг вправо.

ROL dest, count Циклический сдвиг влево

ROR dest, count Циклический сдвиг вправо

SAL/SHL dest, count Арифметический сдвиг влево (сдвиг на один

разряд эквивалентен умножению dest на 2).

SAR dest, count Арифметический сдвиг вправо (сдвиг на один

разряд эквивалентен делению на 2)

SHR dest, count Логический сдвиг вправо на count разрядов.

Освобождающиеся разряды заполняются нулями.

7.6.2. Инструкции пересылки данных

MOV dest, src Пересылка данных: src -> dest

XCHG dest, src Oбмен содержимым операндов: dest <-> src

LEA reg16,addr Загрузка адреса : аddr -> reg16

LDS reg16,mem Загрузка сегментного регистра DS и reg16

содержимым памяти, при этом reg16 < [mem16];

74

DS < [mem16+2]

LES reg16,mem Загрузка сегментного регистра ES и reg16

содержимым памяти, при этом reg16 < [mem16];

ES < [mem16+2]

PUSH src Запись операнда в стек

PUSHF Запись регистра флагов в стек

POP src Извлечение операнда из верхушки стека

POPF Извлечение регистра флагов из верхушки стека

LAHF Загрузка младшего байта регистра флагов в

регистр AH. После выполнения операции регистр

AH содержит: значения флагов S Z * A * P * C

SAHF Загрузка младшего байта регистра флагов из

регистра AH

MOVS

MOVSB

MOVSW

Пересылает данные между областями памяти

размером до 64 K. Команда MOVS должна иметь

операнды, которые используются ассемблером

для определения типа пересылки, команды

MOVSB и MOVSW используются __________для пересылки

байтов и слов соответственно, и явных операндов

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

адресуемой парой DS:SI в область, адресуемую

парой ES:DI. После выполнения пересылки

очередного элемента SI и DI увеличиваются

(DF=0) или уменьшаются на единицу (для байтов)

или на 2 (для слов). Операция обычно

применяется с префиксами повторений.

LODS

LODSB

LODSW

Помещает в аккумулятор (AL или AX) значение

операнда, адресуемого парой DS:SI, за тем, в

зависимости от флага DF, адрес операнда

инкрементируется или декрементируется

STOS

STOSB

STOSW

Операция, обратная LODS

IN acc, port (или DX) Чтение содержимого порта, заданного адресом

port или содержимым регистра DX, в аккумулятор

75

(AL или AX)

OUT acc, port (или

DX)

Запись в порт, заданный адресом port или

содержимым регистра DX содержимого

аккумулятора (AL или AX)

XLAT src Транслитерация. Инструкция использует AL как

смещение байта в 256-байтовой таблице,

адресуемой парой DX:BX. Указанный байт

замещает собой значение AL.

7.6.3. Инструкции переходов

JMP addr Безусловный переход по адресу addr. Может быть

далеким (межсегментным), близким (в пределах

сегмента) и коротким

JCXZ short_label Переход, если СХ=0 (только короткий).

LOOP short_label Организация цикла со счетчиком: (CX-1) -> CX,

jmp short_label, если CX<>0

LOOPE short_label

LOOPZ short_label

То же, что и LOOP, но переход в том случае, если

CX<>0 и ZF=1

LOOPNE short_label

LOOPNZ short_label

То же, что и LOOP, но переход, если CX<>0 и

ZF=0

Условные переходы.

Все условные переходы — короткие (в пределах 127/-128 байт)

Мнемоника Условие перехода Флаги

JA/JNBE Более/Не менее и не равно CF or ZF =0

JAE/JNB Более или равно/Не менее CF=0

JB/JC Менее/Перенос CF=1

JE/JZ Равно/Нуль ZF=1

76

JG/JNLE Больше/Не меньше и не равно 0 SF=0 or SF<>OF

JGE/JNL Больше или равно/Не меньше SF=0 or ZF=1

JL/JNGE Меньше/Не больше и не равно SF=1,ZF<>1

JLE/JNG Меньше или равно/Не больше ZF=0 or SF=1

JNC Нет переноса CF=0

JNE/JNZ Не равно/Не нуль ZF=0

JNO Нет переполнения OF=0

JNP/JPO Нет четности PF=0

JNS Нет знака SF=0

JO Переполнение OF=1

JP/JPE Четность PF=1

JS Знак SF=1

Инструкции работы с подпрограммами и прерываниями

INT type Переход к прерыванию типа type

INTO Прерывание по переполнению. Вызывает прерывание по

вектору 4 в случае, если установлен флаг переполнения

IRET Возврат из прерывания

CALL addr Переход к подпрограмме

RET Возврат из подпрограммы

RETF Возврат из far процедуры

RET n Возврат с удалением n элементов из верхушки стека

7.6.4. Управление состоянием процессора

CMP dest, src Сравнить dest и src и установить регистр флагов,

операнды не изменяются

TEST dest, src dest&src и установить регистр флагов, операнды не

изменяются

SCAS Сканировать строку. Сравнивается содержимое

77

SCASB

SCASW

аккумулятора и элемент, указываемый текущим

значением пары ES:DI, соответствующим образом

устанавливается регистр флагов. После чего значение DI

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

CLC Очистить флаг переноса

STC Установить флаг переноса

CLI Запретить прерывания

STI Разрешить прерывания

CMC Инвертировать флаг переноса (CY)

CLD Очистить флаг направления (установить его в 0 или UP)

(для строковых операций)

STD Установить флаг направления (установить его в 1 или

DN)(для строковых операций)

HLT Остановить процессор

WAIT Перевести процессор в состояние ожидания внешнего

прерывания или сброса

LOCK Блокировка шины на время выполнения следующей

команды

SEG: Установить сегмент для последующей адресации

(префикс)

mas dw 10 dup(?) ; резервирование 10 слов под элементы

lea bx, mas ; в bx запишем адрес массива mas

mov ax,8 ; в ax – начальное значение элемента

mov si,0 ; в si будем хранить смещение текущего

; элемента массива относительно начала массива, для первого

; элемента в si запишем ноль

mov cx,10 ; сх поместим счетчик цикла

cycl: mov [bx][si],ax ; формирование очередного элемента

inc ax ; увеличим текущее значение

add si,2 ; переход к следующему элементу

loop cycl ; если счетчик не ноль, то на cycl

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020