Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

Команды, использующие регистр, могут содержать три бита, указывающих на конкретный регистр, и один бит «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:




Поделиться с друзьями:


Дата добавления: 2017-02-01; Просмотров: 66; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.123 сек.