Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Справочник по командам языка Ассемблера




Обозначение регистров

Команды, использующие регистр, могут содержать три бита, указывающих на конкретный регистр, и один бит «w», определяющий размер регистра: байт или слово. Кроме того, лишь некоторые команды обеспечивают доступ к сегментным регистрам.

Байт способа адресации

Байт способа адресации, если он присутствует, занимает второй байт машинного кода и состоит из следующих трех элементов:

1) mod — двухбитового кода, имеющего значения 11 для ссылки на регистр и 00, 01 и 10 для ссылки на память;

2) reg — трехбитового указателя регистра;

3) r/m — трехбитового указателя регистра или памяти (r — регистр, m — адрес памяти).

Кроме того, первый байт машинного кода может содержать бит «а», который указывает направление потока между операндом 1 и операндом 2.

Биты MOD

Два бита mod определяют адресацию регистра или памяти.

Биты REG

Три бита reg (вместе с битом w) определяют конкретный восьми- или шестнадцатибитовый регистр.

Биты R/M

Три бита г/m (регистр/память) совместно с битами mod определяют способ адресации.

 

Команды в алфавитном порядке

Addr

адрес памяти

Addr-high

первый байт адреса (старший)

Addr-low

левый (младший) байт адреса

Data

непосредственный операнд (8 бит при w=0 и 16 бит при w= 1)

Data-high

правый (старший) байт непосредственного операнда

Data-low

левый (младший) байт непосредственного операнда

Disp

смещение (относительный адрес)

Rеg

ссылка на регистр.

AAA

Коррекция ASCII-формата для сложения

Операция: Корректирует сумму двух ASCII-байтов в регистре AL. В случае, если правые четыре бита регистра AL имеют значение больше 9 или флаг AF установлен в 1, то команда AAA прибавляет к регистру АН единицу и устанавливает флаги AF и CF. Команда всегда очищает четыре левых бита в регистре AL.

Флаги: Команда воздействует на флаги AF и CF (флаги OF, PF, SF и ZF не определены).

Объектный код: 00110111 (без операндов).

AAD

Коррекция ASCII-формата для деления

Операция: Корректирует ASCII-величины для деления. Команда AAD используется перед делением неупакованных десятичных чисел в регистре AХ (удаляет тройки ASCII-кода). Эта команда корректирует делимое в двоичное значение в регистре AL для последующего двоичного деления. Затем умножает содержимое регистра AН на 10, прибавляет результат к содержимому регистра AL и очищает AН. Команда AAD не имеет операндов.

Флаги: Команда воздействует на флаги PF, CF, ZF (флаги AF CF и OF не определены).

Объектный код: |11010101|00001010|.

AAМ

Коррекция ASCII-формата для умножения

Операция: Команда AAM используется для коррекции результата умножения двух неупакованных десятичных чисел. Команда делит содержимое регистра AL на 10, записывает частное в регистр AН, а остаток в регистр AL.

Флаги: Команда воздействует на флаги PF, SF и ZF (флаги AF CF и OF не определены).

Объектный код: |11010100|00001010| (без операндов).

AAS

Коррекция ASCII-формата для вычитания

Операция: Корректирует разность двух ASCII-байтов в регистре AL. В случае, если первые четыре бита имеют значение больше 9 или флаг CF установлен в 1, то команда AAS вычитает 6 из регистра AL и 1 из регистра АН, флаги AF и CF при этом устанавливаются в 1. Команда всегда очищает левые четыре бита в регистре AL.

Флаги: Команда воздействует на флаги AF и CF (флаги OF PF SF и ZF не определены).

Объектный код: 00111111 (без операндов).

ADC

Сложение с переносом

Операция: Обычно используется при сложении многословных величин для учета бита переполнения в последующих фазах операции. В случае, если флаг CF установлен в 1, то команда ADC сначала прибавляет 1 к операнду 1. Команда всегда прибавляет операнд 2 к операнду 1, аналогично команде ADD.

Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

ADD

Сложение двоичных чисел

Операция: Прибавляет один байт или одно слово в памяти, регистре или непосредственно к содержимому регистра или прибавляет один байт или слово в регистре или непосредственно к памяти.

Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

AND

Логическое И

Операция: Команда выполняет поразрядную конъюнкцию (И) битов двух операндов. Операнды представляют собой одно- или двухбайтовые величины в регистре или памяти. Второй операнд может содержать непосредственные данные. Команда AND проверяет два операнда поразрядно. В случае, если два проверяемых бита равны 1, то в первом операнде устанавливается единичное значение бита, в других случаях — нулевое.

Флаги: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF не определен).

CALL

Вызов процедуры

Операция: Выполняет короткий или длинный вызов процедуры для связи подпрограмм. Для возврата из процедуры используется команда RET. Команда CALL уменьшает содержимое SP на 2 и заносит в стек адрес следующей команды (из IP), а затем устанавливает в регистре IP относительный адрес процедуры. Впоследствии команда RET использует значение в стеке для возврата. Существует четыре типа команды CALL для вызова внутри сегмента и между сегментами. Команда межсегментного вызова сначала уменьшает SP, заносит в стек адрес из регистра CS, а затем загружает в стек внутрисегментный указатель.

Флаги: Не меняются.

CBW

Преобразование байта в слово

Операция: Расширяет однобайтовое арифметическое значение в регистре AL до размеров слова. Команда CBW размножает знаковый бит (7) в регистре AL по всем Битам регистра АН.

Флаги: Не меняются.

Объектный код: 10011000 (без операндов).

CLC

Сброс флага переноса

Операция: Устанавливает значение флага переноса, равное 0, так что, например, команда ADC не прибавляет единичный бит. Команда CLC не имеет операндов.

Флаги: Команда воздействует на флаг CF (устанавливается в 0).

Объектный код: 11111000.

CLD

Сброс флага направления

Операция: Устанавливает значение флага направления, равное 0. В результате такие строковые операции, как CMPS или MOVS обрабатывают данные слева направо.

Флаги: Команда воздействует на флаг DF (устанавливается в 0).

Объектный код: 11111100 (без операндов).

CLI

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

Операция: Запрещает маскируемые внешние прерывания по процессорной шине INTR посредством установки значения флага прерывания IF в 0.

Флаги: Команда воздействует на флаг IF (устанавливается в 0).

Объектный код: 11111010 (без операндов).

CMC

Переключение флага переноса

Операция: Инвертирует флаг CF, то есть, преобразует нулевое значение флага CF в единичное и наоборот.

Флаги: Команда воздействует на флаг CF (инвертируется).

Объектный код: 11110101 (без операндов).

CMP

Сравнение

Операция: Сравнивает содержимое двух полей данных. Фактически команда CMP вычитает второй операнд из первого, но содержимое полей не изменяет. Операнды должны иметь одинаковую длину: байт или слово. Команда CMP может сравнивать содержимое регистра, памяти или непосредственное значение с содержимым регистра; или содержимое регистра или непосредственное значение с содержимым памяти.

Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

CMPS/CMPSB/CMPSW

Сравнение строк

Операция: Сравнивают строки любой длины. Этим командам обычно предшествует префикс REPn, например REPE CMPSB. Команда CMPSB сравнивает память по байтам, а команда CMPSW — по словам. Первый операнд этих команд адресуется регистровой парой DS:SI, а второй — регистровой парой ES:DI. В случае, если флаг DF установлен в 0, то сравнение происходит слева направо, регистры SI и DI при этом увеличиваются после каждого сравнения. В случае, если флаг DF установлен в 1, то сравнение происходит справа налево, а регистры SI и DI при этом уменьшаются после каждого сравнения.

Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

Объектный код: 1010011w.

CWD

Преобразование слова в двойное слово

Операция: Расширяет арифметическое значение в регистре АХ до размеров двойного слова в регистровой паре DX:AX, дублируя при этом знаковый бит (15-й бит в регистре АХ) через регистр DX. Обычно используется для получения 32-битового делимого.

Флаги: Не меняются.

Объектный код: 10011001 (без операндов).

DAA

Десятичная коррекция для сложения

Операция: Корректирует результат сложения двух BCD (десятичных упакованных) элементов в регистре AL. В случае, если четыре правых бита имеют значение больше 9 или флаг AF установлен в 1, то команда DAA прибавляет 6 к регистру AL и устанавливает флаг AF. В случае, если регистр AL содержит значение больше, чем 9F, или флаг CF установлен в 1, то команда DAA прибавляет 60Н к регистру AL и устанавливает флаг CF.

Флаги: Команда воздействует на флаги AF. CF, PF, SF и 2F (флаг OF неопределен).

Объектный код: 00100111 (без операндов).

DAS

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

Операция: Корректирует результат вычитания двух BCD (десятичных упакованных) чисел в регистре AL. В случае, если четыре правых бита имеют значение больше 9 или флаг AF установлен в 1, то команда DAS вычитает 60Н из регистра AL и устанавливает флаг CF.

Флаги: Команда воздействует на флаги AF, CF, PF, SF и ZF.

Объектный код: 00101111 (без операндов).

DEC

Декремент

Операция: Вычитает 1 из байта или слова в регистре или в памяти например DEC СХ.

Флаги: Команда воздействует на флаги AF, OF, PF, SF и ZF.

DIV

Деление

Операция: Выполняет деление беззнакового делимого (16 или 32 бит) на беззнаковый делитель (8 или 16 бит). Левый единичный бит рассматривается как бит данных, а не как минус для отрицательных чисел. Для 16-битового деления делимое должно находиться в регистре АХ, а 8-битовый делитель возможен в регистре или в памяти, например DIV BH. Частное от деления получается в регистре AL, а остаток — в регистре AН. Для 32-битового деления делимое должно находиться в регистровой паре DX:AX а 16-битовый делитель возможен в регистре или в памяти, например DIV СХ. Частное от деления получается в регистре AХ, а остаток — в регистре DX.

Флаги: Команда воздействует на флаги AF, CF, OF, PF SF и ZF (все не определены).

ESC

Переключение на сопроцессор

Операция: Обеспечивает использование сопроцессора для выполнения специальных операций. Команда ESC передает в сопроцессор инструкцию и операнд для выполнения необходимой операции.

Флаги: Не меняются.

HLT

Останов микропроцессора

Операция: Приводит процессор в состояние останова, в котором происходит ожидание прерывания. При завершении команды HLT регистры CS:IP указывают на следующую команду. При возникновении прерывания процессор записывает в стек регистры CS и IP и выполняет подпрограмму обработки прерывания. При возврате из подпрограммы команда IRET восстанавливает регистры CS и IP из стека и управление передается на команду, следующую за командой HLT.

Флаги: Не меняются.

Объектный код: 11110100 (без операндов).

IDIV

Целое деление знаковых величин

Операция: Выполняет деление знакового делимого (16 или 32 бит) на знаковый делитель (8 или 16 бит). Левый единичный бит рассматривается как знак минус для отрицательных чисел. Для 16-битового деления делимое должно находиться в регистре АХ, a 8-битовый делитель возможен в регистре или в памяти, например IDIV DL. Частное от деления получается в регистре AL, а остаток — в регистре АН. Для 32-битового деления делимое должно находиться в регистровой паре DX:AX, а 16-битовый делитель возможен в регистре или в памяти, например IDIV BX. Частное от деления получается в регистре АХ, а остаток — в регистре DX.

Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

IMUL

Целое умножение знаковых величин

Операция: Выполняет умножение на знаковый множитель (8 или 16 бит). Левый единичный бит рассматривается как знак минус для отрицательных чисел. Для 8-битового умножения множимое должно находиться в регистре AL, а множитель возможен в регистре или в памяти, например IMUL BL. Произведение получается в регистре АХ. Для 16-битового умножения множимое должно находиться в регистре АХ, а множитель возможен в регистре или в памяти, например IMUL BX. Произведение получается в регистровой паре DX:AX.

Флаги: Команда воздействует на флаги CF и OF (флаги AF PF SF и ZF не определены).

 

IN

Ввод байта или слова из порта

Операция: Передает из вводного порта один байт в регистр AL или два байта в регистр АХ). Порт кодируется как фиксированный числовой операнд (IN АХ,порт#) или как переменная в регистре DX (IN AX,DX).

Флаги: Не меняются.

INC

Инкремент

Операция: Прибавляет 1 к байту или слову в регистре или в памяти, например INC СХ.

Флаги: Команда воздействует на флаги AF, OF, PF, SF и ZF.

INT

Прерывание

Операция: Прерывает выполнение программы и передает управление по одному из 256 адресов (векторов прерывания). Команда INT выполняет следующее:

1) уменьшает значение SP на 2 и заносит в стек флаговый регистр, сбрасывает флаги IF и TF;

2) уменьшает значение SP на 2 и заносит регистр CS в стек, старшее слово из вектора прерывания помещает в регистр CS;

3) уменьшает значение SP на 2 и заносит регистр IP в стек, младшее слово из вектора прерывания помещает в регистр IP.

Флаги: Команда воздействует на флаги IF и TF.

INTO

Прерывание по переполнению

Операция: Приводит к прерыванию при возникновении переполнения (флаг OF установлен в 1) и выполняет команду IRET 4. Адрес подпрограммы обработки прерывания (вектор прерывания) находится по адресу 10Н.

Флаги: Не меняются.

Объектный код: 11001110 (без операндов).

 

 

IRET

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

Операция: Обеспечивает возврат из подпрограммы обработки прерывания. Команда IRET выполняет следующее:

1) помещает слово из вершины стека в регистр IP и увеличивает значение SP на 2;

2) помещает слово из вершины стека в регистр CS и увеличивает значение SP на 2;

3) помещает слово из вершины стека во флаговый регистр и увеличивает значение SP на 2.

Флаги: Команда воздействует на все флаги.

Объектный код: 11001111 (бег операндов).

JA/JNBE

Переход по «выше» или «не ниже или равно»

Операция: Используется после проверки беззнаковых данных для передачи управления по другому адресу. В случае, если флаг CF равен нулю (нет переноса) и флаг ZF равен нулю (не нуль), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JAE/JNB

Переход по «выше или равно» или «не ниже»

Операция: Используется после проверки беззнаковых данных для передачи управления по другому адресу. В случае, если флаг CF равен нулю (нет переноса), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JB/JNAE

Переход по «ниже» или «не выше или равно»

Операция: Используется после проверки беззнаковых данных для Передачи управления по другому адресу. В случае, если флаг CF равен единице (есть перенос), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JBE/JNA

Переход по «ниже или равно» или «не выше»

Операция: Используется после проверки беззнаковых данных для передачи управления по другому адресу. В случае, если флаг CF равен единице (есть перенос) или флаг AF равен единице, то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JC

Переход по переносу

Операция: Идентична JB/JNAE.

JCXZ

Переход по «CX равно нулю»

Операция: Выполняет передачу управления по указанному в операнде адресу, если значение в регистре CX равно нулю. Команда JCXZ может быть полезна в начале циклов LOOP.

Флаги: Не меняются.

JE/JZ

Переход по «равно» или по «нулю»

Операция: Используется после проверки знаковых или беззнаковых данных для передачи управления по другому адресу. В случае, если флаг ZF равен единице (нулевое состояние), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JG/JNLE

Переход по «больше» или «не меньше или равно»

Операция: Используется после проверки знаковых данных для передачи управления по другому адресу. В случае, если флаг ZF равен нулю (не нуль) и флаги SF и OF одинаковы (оба 0 или оба 1), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JGE/JNL

Переход по «больше или равно» или «не меньше»

Операция: Используется после проверки знаковых данных для передачи управления по другому адресу. В случае, если флаги SF и OF одинаковы (оба 0 или оба 1), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JL/JNGE

Переход по «меньше» или «не больше или равно»

Операция: Используется после проверки знаковых данных для передачи управления по другому адресу. В случае, если флаги SF и OF различны, то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JLE/JNG

Переход по «меньше или равно» или «не больше»

Операция: Используется после проверки знаковых данных для передачи управления по другому адресу. В случае, если флаг ZF равен единице (нулевое состояние) и флаги SF и OF различны, то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JMP

Безусловный переход

Операция: Выполняет переход по указанному адресу при любых условиях. Команда JMP заносит в регистр IP необходимый адрес перехода. Существует пять типов команды JMP для передачи управления внутри сегмента или между сегментами. При межсегментном переходе в регистр CS заносится также новый сегментный адрес.

Флаги: Не меняются.

JNC

Переход если нет переноса

Операция: Идентична JAE/JNB.

JNE/JNZ

Переход по «не равно» или по «не нуль»

Операция: Используется после проверки знаковых данных для передачи управления по другому адресу. В случае, если флаг ZF равен нулю (ненулевое состояние), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

INO

Переход, если нет переполнения

Операция: Используется для передачи управления по определенному адресу после проверки на отсутствие переполнения. В случае, если флаг OF равен, нулю (нет переполнения), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JNP/JPO

Переход, если нет паритета или паритет нечетный

Операция: Приводит к передаче управления по определенному адресу, если в результате операции обнаружено отсутствие паритета или паритет нечетный. Нечетный паритет в данном случае означает, что в результате операции в младших восьми битах получено нечетное число битов. В случае, если флаг PF равен нулю (нечетный паритет), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JHS

Переход, если нет знака

Операция: Приводит к передаче управления по определенному адресу, если в результате операции получен положительный знак. В случае, если флаг SF равен нулю (положительное), то команда JNS прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

 

JO

Переход по переполнению

Операция: Приводит к передаче управления по определенному адресу, если в результате операции получено состояние переполнения. В случае, если флаг OF равен единице (переполнение), то команда JO прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JP/JPE

Переход, если есть паритет или паритет четный

Операция: Приводит к передаче управления по определенному адресу, если в результате операции обнаружен четный паритет. Четный паритет в данном случае означает, что в результате операции в младших восьми битах получено четное число битов. В случае, если флаг PF равен единице (четный паритет), то команда прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

JS

Переход по знаку

Операция: Передает управления по определенному адресу, если в результате операции получен отрицательный знак. В случае, если флаг SF равен единице (отрицательно), то команда JS прибавляет к регистру IP значение операнда (относительное смещение) и выполняет таким образом переход.

Флаги: Не меняются.

LAHF

Загрузка флагов в регистр АН

Операция: Загружает значение флагового регистра в регистр АН. Команда LAHF заносит правый байт флагового регистра в регистр АН в следующем виде:

SZ * A * P * C (* обозначает неиспользуемые биты)

Флаги: Не меняются.

Объектный код: 10011111 (без операндов)

 

LDS

Загрузка регистра сегмента данных

Операция: Инициализирует начальный адрес сегмента данных и адрес смещения к переменной для обеспечения доступа к данной переменной. Команда LDS загружает в необходимые регистры четыре байта из области памяти, содержащей относительный адрес и сегментный адрес. Сегментный адрес помещается в регистр DS, а относительный адрес — в любой из общих или индексных регистров или в регистровый указатель. Следующая команда загружает относительный адрес в регистр DI:

LDS DI,адрес_памяти

Флаги: Не меняются.

LES

Загрузка регистра дополнительного сегмента

Операция: Инициализирует начальный адрес дополнительного сегмента и адрес смещения к переменной для обеспечения доступа к данной переменной.

Флаги: Не меняются.

LOCK

Блокировка шины доступа к данным

Операция: Запрещает другим (сопроцессорам одновременно изменять элементы данных. Команда LOCK представляет собой однобайтовый префикс, который можно кодировать непосредственно перед любой командой. Данная операция посылает сигнал в другой процессор, запрещая использование данных, пока не будет завершена следующая команда.

Флаги: Не меняются.

Объектный код: 11110000

LODS/LODSB/LODSW

Загрузка однобайтовой или двухбайтовой строки

Операция: Загружает из памяти один байт в регистр AL или одно слово в регистр AХ. Несмотря на то, что команда LODS выполняет строковую операцию, нет смысла использовать ее с префиксом REP. Регистровая пара DS:SI адресует в памяти байт (для LODSB) или слово (для LODSW), которые загружаются в регистр AL или AХ соответственно. В случае, если флаг DF равен нулю, то операция прибавляет 1 (для байта) или 2 (для слова) к регистру SI.

В случае, если флаг DF равен единице, то операция вычитает 1 (для байта) или 2 (для слова) из регистра SI.

Флаги: Не меняются.

Объектный код: 1010110w (без операндов).

LOOP

Цикл

Операция: Управляет выполнением группы команд определенное число раз. До начала цикла в регистр CX должно быть загружено число выполняемых циклов. Команда LOOP находится в конце цикла, где она уменьшает значение в регистре СХ на единицу. В случае, если значение в регистре CX не равно нулю, то команда передает управление по адресу, указанному в операнде (прибавляет к регистру IP значение операнда); в противном случае управление передается на следующую после LOOP команду (происходит выход из цикла).

Флаги: Не меняются.

LOOPE/LOOPZ

Цикл, если равно или нуль

Операция: Управляет выполнением группы команд определенное число раз или пока установлен флаг ZF (в единичное состояние). Команды LOOPE/LOOPZ аналогичны команде LOOP, за исключением того, что по этим командам цикл прекращается либо по нулевому значению в регистре CX, либо по нулевому значению флага ZF (ненулевое состояние).

Флаги: Не меняются.

LOOPNE/LOOPNZ

Цикл, если не равно или не нуль

Операция: Управляет выполнением группы команд определенное число раз или пока сброшен флаг ZF (в нулевое состояние). Команды LOOPNE/LOOPNZ аналогичны команде LOOP за исключением того, что по этим командам цикл прекращается либо по нулевому значению в регистре CX, либо по единичному значению флага ZF (нулевое состояние).

Флаги: Не меняются.

 

 

MOV

Пересылка данных

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

Флаги: Не меняются.

MOVS/MOVSB/MOVSW

Пересылка строки байт или строки слов

Операция: Пересылает данные между областями памяти. Команды MOVS(B/W) обычно используются с префиксом REP. Команда MOVSB пересылает любое число байтов, а команда MOVSW — любое число слов. Перед выполнением команды регистровая пара DS:SI должна адресовать источник пересылки («откуда») а регистровая пара ES:DI — получатель пересылки («куда»). В случае, если флаг DF равен нулю, то операция пересылает данные слева направо и увеличивает регистры SI и DI. В случае, если флаг DF равен единице то операция пересылает данные справа налево и уменьшает регистры SI и DI.

Флаги: Не меняются.

Объектный код: 1010010w (без операндов).

MUL

Беззнаковое умножение

Операция: Умножает беззнаковое множимое (8 или 16 бит) на беззнаковый множитель (8 или 16 бит). Левый единичный бит рассматривается как бит данных, но не как знак минус для отрицательных чисел. Для 8-битового умножения множимое должно находиться в регистре AL, а множитель возможен в регистре или в памяти, например MUL CL. Произведение получается в регистре АХ. Для 16-битового умножения множимое должно находиться в регистре АХ, а множитель возможен в регистре или в памяти, например MUL ВХ. Произведение получается в регистровой паре DX:AX.

Флаги: Команда воздействует на флаги CF и OF (флаги AF, PF, SF и ZF не определены).

 

 

NEG

Изменение знака числа

Операция: Меняет двоичное значение из положительного в отрицательное и из отрицательного в положительное. Команда NEG вычисляет двоичное дополнение от указанного операнда: вычитает операнд из нуля и прибавляет единицу. Операндом может быть байт или слово в регистре или в памяти.

Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

NOP

Нет операции

Операция: Применяется для удаления или вставки машинных кодов или для задержки выполнения программы. Команда NOP выполняет операцию XCHG АХ,АХ, которая ничего не меняет.

Флаги: Не меняются.

Объектный код: 10010000 (без операндов)

NOT

Логическое НЕТ

Операция: Меняет нулевые биты на единичные и наоборот. Операндом может быть байт или слово в регистре или в памяти.

Флаги: Не меняются.

OR

Логическое ИЛИ

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

Флаги: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF неопределен).

OUT

Вывод байта или слова в порт

Операция: Передает в выводной порт байт из регистра AL или слово из регистра AХ. Порт кодируется как фиксированный числовой операнд (OUT порт#,АХ) или как переменная в регистре DX (OUT DX.AX). Процессоры имеют, кроме того, команду OUTS (Output String — вывод строки).

Флаги: Не меняются.

POP

Извлечение слова из стека

Операция: Передает слово (помещенное ранее в стек) в указанный операнд. Регистр SP указывает на текущее слово в вершине стека. Команда POP извлекает слово из стека и увеличивает значение в регистре SP на 2. Существует три типа команды POP в зависимости от операнда: общий регистр, сегментный регистр, слово в памяти.

Флаги: Не меняются.

POPA

Извлечение из стека всех общих регистров

Операция: Извлекает из стека восемь значений в регистры Dl, SI BP, SP, BX, DX, CX, AX в указанной последовательности и увеличивает регистр SP на 16. Регистры обычно записываются в стек ранее соответствующей командой PUSHA.

Флаги: Не меняются.

Объектный код: 01100001 (без операндов).

POPF

Извлечение флагов из стека

Операция: Передает биты (помещенные ранее в стек) во флаговый регистр. Регистр SP указывает на текущее слово в вершине стека. Команда POPF передает биты из этого слова во флаговый регистр и увеличивает значение в регистре SP на 2. Обычно команда PUSHF записывает значения флагов в стек, а команда POPF восстанавливает эти флаги.

Флаги: Команда воздействует на все флаги.

Объектный код: 10011101 (без операндов).

PUSH

Занесение слова в стек

Операция: Сохраняет значение слова (адрес или элемент данных) в стеке для последующего использования. Регистр SP указывает на текущее слово в вершине стека. Команда PUSH уменьшает значение в регистре SP на 2 и передает слово из указанного операнда в новую вершину стека. Существует три типа команды PUSH в зависимости от операнда: общий регистр, сегментный регистр или слово в памяти.

Флаги: Не меняются.

PUSHA

Занесение в стек всех общих регистров

Операция: Записывает в стек восемь значений регистров AX, CX, DX, BX, SP, BP, SI, DI в указанной последовательности и уменьшает регистр SP на 16. Обычно команда POPA позже восстановит эти регистры из стека.

Флаги: Не меняются.

Объектный код: 01100000 (без операндов).

PUSHF

Занесение флагов в стек

Операция: Сохраняет значения флагов из флагового регистра в стеке для последующего использования. Регистр SP указывает на текущее слово в вершине стека. Команда PUSHF уменьшает значение в регистре SP на 2 и передает флаги в новую вершину стека.

Флаги: Не меняются.

Объектный код: 10011100 (без операндов).

RCL и RCR

Циклический сдвиг влево через перенос и циклический сдвиг вправо через перенос

Операция: Выполняет циклический сдвиг битов (ротацию) влево или вправо через флаг CF. Данные операции могут выполняться в байте или в слове, в регистре или в памяти. Ротация на один бит кодируется в команде значением 1; ротация более чем на один бит требует указания регистра CL, который содержит счетчик. Для команды RCL значение флага CF записывается в бит 0, а. самый левый бит записывается во флаг CF; все другие биты сдвигаются влево. Для команды RCR значение флага CF записывается в самый левый бит, а бит 0 записывается во флаг CF; все другие биты сдвигаются вправо.

Флаги: Команда воздействует на флаги CF и OF.

 

REP/REPE/REPZ/REPNE/REPNZ

Повтор строковой операции

Операция: Повторяет строковую операцию определенное число раз. Используется в качестве префикса повторения перед строковыми командами CMPS, MOVS, SCAS, STOS. Счетчик повторений должен быть загружен в регистр CX до выполнения строковой команды. Операция уменьшает регистр CX на 1 при каждом выполнении строковой команды. Для префикса REP операция повторяется, пока содержимое регистра CX не достигнет нуля. Для префикса REPE/REPZ операция повторяется, пока регистр CX содержит ненулевое значение и флаг ZF равен 1 (нулевое состояние). Для префикса REPNE/REPNZ операция повторяется, пока регистр CX содержит ненулевое значение и флаг ZF равен 0 (ненулевое состояние).

Флаги: Определяются соответствующей строковой командой.

Объектныйкод: REP/REPNE: 11110010 REPE: 11110011

RET

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

Операция: Возвращает управление из процедуры, вызванной ранее командой CALL. Команда CALL может передавать управление внутри одного сегмента или между сегментами. Команда RET заносит слово из вершины стека в регистр IP и увеличивает значение SP на 2. Для межсегментного возврата команда RET, кроме того, заносит слово из новой вершины стека в регистр CS и еще раз увеличивает значение SP на 2. Любой числовой операнд команды (например, RET 4) прибавляется к указателю стека SP.

Флаги: Не меняются.

ROL и ROR

Циклический сдвиг влево и циклический сдвиг вправо

Операция: Выполняет циклический сдвиг битов (ротацию) влево или вправо. Данные операции могут выполняться в байте или в слове, в регистре или в памяти. Ротация на один бит кодируется в команде значением 1; ротация более чем на один бит требует указания регистра CL, который содержит счётчик. Для команды ROL самый левый бит записывается в бит 0; все другие биты сдвигаются влево. Для команды ROR бит 0 записывается в самый левый бит; все другие биты сдвигаются вправо.

Флаги: Команда воздействует на флаги CF и OF.

 

SAHF

Установка флагов из регистра АН

Операция: Данная команда обеспечивает совместимость с процессором 8080 для пересылки значений флагов из регистра АН во флаговый регистр. Команда SAHF пересылает определенные биты из регистра АН во флаговый регистр в следующем виде:

SZ * A * P * C (* обозначает неиспользуемые биты)

Флаги: Не меняются.

Объектный код: 10011110 (без операндов)

SAL, SAR, SHL и SHR

Сдвиг влево или вправо

Операция: Выполняет сдвиг битов влево или вправо. Данные операции могут выполняться в байте или в слове, в регистре или в памяти. Сдвиг на один бит кодируется в команде значением 1; сдвиг более чем на один бит требует указания регистра CL, который содержит счетчик сдвига.

Команда SAR выполняет арифметический сдвиг, который учитывает знак сдвигаемого значения. Команды SHL и SHR выполняют логический сдвиг и рассматривают знаковый бит как обычный бит данных. Команда SAL выполняется аналогично команде SHL. Команды SAL и SHL сдвигают биты влево определенное число раз и правый освобождающийся бит заполняют нулевым значением.

Команда SHR сдвигает биты вправо определенное число раз и левый освобождающийся бит заполняет нулевым значением. Команда SAR сдвигает биты вправо определенное число раз и левый освобождающийся бит заполняет значением знакового бита (0 или 1). Во всех случаях значения битов, выдвигаемых за разрядную сетку, теряются.

Флаги: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF не определен).

SBB

Вычитание с заемом

Операция: Обычно используется при вычитании многословных двоичных величин для учета единичного бита переполнения в последующей фазе операции. В случае, если флаг CF установлен в 1, то команда SBB сначала вычитает 1 из операнда 1. Команда SBB всегда вычитает операнд 2 из операнда 1, аналогично команде SUB.

Флаги: Команда воздействует на флаги AF, CF, OF, PF. SF и ZF.

SCAS/SCASB/SCASW

Поиск байта или слова в строке

Операция: Выполняет поиск определенного байта или слова в строке. Для команды SCASB необходимое значение загружается в регистр AL, а для команды SCASW — в регистр AX. Регистровая пара ES:DI указывает на строку в памяти, которая должна быть сканирована. Данные команды обычно используются с префиксом REPE или REPNE. В случае, если флаг DF равен нулю, то операция сканирует память слева направо и увеличивает регистр DI. В случае, если флаг DF равен единице, то операция сканирует память справа налево и уменьшает регистр DI.

Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

Объектный код: 1010111w (без операндов).

STC

Установка флага переноса

Операция: Устанавливает значение флага CF в 1.

Флаги: Команда воздействует на флаг CF (устанавливается в 1).

Объектный код: 11111001 (без операндов).

STD

Установка флага направления

Операция: Устанавливает значение флага направления в 1. В результате строковые операции, такие, как MOVS или CMPS, обрабатывают данные справа налево.

Флаги: Команда воздействует на флаг DF (устанавливается в 1).

Объектный код: 11111101 (без операндов).

STI

Установка флага прерывания

Операция: Разрешает маскируемые внешние прерывания после выполнения следующей команды и устанавливает значения флага прерывания IF в 1.

Флаги: Команда воздействует на флаг IF (устанавливается в 1).

Объектный код: 11111011 (без операндов).

STOS/STOSB/STOSW

Запись однобайтовой или двухбайтовой строки

Операция: Сохраняет байт или слово в памяти. При использовании префикса REP операция дублирует значение байта или слова определенное число раз, что делает ее удобной для очистки областей памяти. Для команды STOSB необходимый байт загружается в регистр AL, а для команды STOSW необходимое слово загружается в регистр АХ. Регистровая пара ES:DI указывает область памяти, куда должен быть записан байт или слово. В случае, если флаг DF равен нулю, то операция записывает в память слева направо и увеличивает регистр DI. В случае, если флаг DF равен единице, то операция записывает в память справа налево и уменьшает значение в регистре DI.

Флаги: Не меняются.

Объектный код: 1010101w (без операндов).

SUB

Вычитание двоичных чисел

Операция: Вычитает байт или слово в регистре, памяти или непосредственное значение из регистра; или вычитает байт или слово в регистре или непосредственное значение из памяти.

Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

TEST

Проверка битов

Операция: Команда выполняет проверку байта или слова на определенную битовую комбинацию. Команда TEST действует аналогично команде AND, но не изменяет результирующий операнд. Операнды могут иметь однобайтовые или двухбайтовые значения. Второй операнд может иметь непосредственное значение. Команда выставляет флаги в соответствии с логической функцией И.

Флаги: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF не определен).

WAIT

Установка процессора в состояние ожидания

Операция: Позволяет процессору оставаться в состоянии ожидания, пока не произойдет внешнее прерывание. Данная операция необходима для обеспечения синхронизации процессора с внешним устройством или с сопроцессором. Процессор ожидает, пока внешнее устройство (или сопроцессор) не закончит выполнение операции и на входной линии TEST не появится сигнал (активный уровень).

Флаги: Не меняются.

Объектный код: 10011011

XCHG

Перестановка

Операция: Переставляет два байта или два слова между двумя регистрами (например, XCHG AH,BL) или между регистром и памятью (например, XCHG CX,word).

Флаги: Не меняются.

XLAT

Перекодировка

Операция: Транслирует байты в другой формат, например при переводе нижнего регистра в верхний или при перекодировке ASCII-кода в EBCDIC-код. Для выполнения данной команды необходимо определить таблицу преобразования байт и загрузить ее адрес в регистр ВХ. Регистр AL должен содержать байт, который будет преобразован с помощью команды XLAT. Операция использует значение в регистре AL как смещение в таблице, выбирает байт по этому смещению и помещает его в регистр AL.

Флаги: Не меняются.

Объектный код: 11010111 (без операндов).

XOR

Исключающее ИЛИ

Операция: Выполняет логическую операцию исключающего ИЛИ над битами двух операндов. Операндами являются байты или слова в регистрах или в памяти, второй операнд может иметь непосредственное значение. Команда XOR обрабатывает операнды побитово. В случае, если проверяемые биты одинаковы, то команда XOR устанавливает бит в операнде 1 равным нулю, если биты различны, то бит в операнде 1 устанавливается равным единице.

Флаги: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF неопределен).

 










Последнее изменение этой страницы: 2018-05-10; просмотров: 158.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...