Команда
| Описание
|
ADD приемник, источник
| ADDition – сложение.
Сложение двух операндов. Один из операндов – приемник. Первый операнд может быть регистром или ячейкой памяти, второй - регистром, ячейкой памяти, константой. Невозможно только, когда оба операнда являются ячейками памяти.
|
XADD приемник, источник
| eXchange and ADD –обмен двух значений и суммирование.
Данная операция производит в начале обмен операндами, а затем выполняет операцию ADD.
|
ADC приемник, источник
| ADdition with Carry.
Сложение с учетом флага переноса - в младший бит добавляется бит (флаг) переноса.
|
INC операнд
| INCrement operand by 1.
Увеличить операнд на 1.
|
SUB операнд1, операнд2
| SUBtract.
Вычитание двух операндов. Остальное аналогично сложению (команда ADD).
|
SBB операнд1, операнд2
| SuBtract with Borrow.
Вычитание с учетом предыдущего вычитания (бита заема). Из младшего бита вычитается бит (флаг) переноса.
|
DEC r/m
| DECrement operand by 1.
Уменьшить операнд на 1.
|
CMP операнд1, операнд2
| CoMPare operands – сравнение операндов.
Вычитание без изменения операндов (сравнение).
|
CMPXCHG приемник, источник
| CoMPare and eXCHanGe – сравнение и обмен..
Сравнение с обменом. Источник – всегда аккумулятор. Если значения в операнде-получателе и аккумуляторе равны, операнд-получатель заменяется операндом-источником, исходное значение операнда-получателя загружается в аккумулятор.
|
CMPXCHG8B приемник, источник
| CoMPare and eXCHanGe 8 Byte – сравнение и обмен..
Сравнение с обменом 8 байтов. Источник – всегда аккумулятор. Если значения в операнде-получателе и аккумуляторе равны, операнд-получатель заменяется операндом-источником, исходное значение операнда-получателя загружается в аккумулятор.
|
NEG источник
| NEGate operand.
Изменение знака операнда.
|
ААА
| Ascii Adjust after Addition - ASCII-коррекция после сложения. Алгоритм:
· проверить значение младшего полубайта регистра AL и значение флага AF;
· если (значение младшего полубайта регистра AL>9) или (AF=1), то выполнить следующие действия: увеличить значение al на 6, очистить старший полубайт регистра al, увеличить значение ah на 1, установить флаги: AF=1, CF=1;
· иначе сбросить флаги AF= 0 и CF= 0.
|
AAS
| Ascii Adjust after Substraction - ASCII-коррекция после вычитания. Алгоритм работы:
· если (младший полубайт регистра AL меньше 9) или (флаг AF=1), то выполнить следующие действия: уменьшить значение младшего полубайта регистра al на 6, обнулить значение старшего полубайта регистра AL;
· установить флаги AF=1 и CF=1;.
|
ААМ
| Ascii Adjust after Multiply - ASCII-коррекция после умножения. Алгоритм работы:
· разделить значение регистра AL на 10;
· записать частное в регистр AH, остаток — в регистр AL.
|
AAD
| Ascii Adjust before Division - ASCII-коррекция перед делением. Алгоритм работы:
· умножить значение регистра AH на 10 и сложить полученное значение с содержимым регистра AL;
· присвоить регистру AL это значениеl;
· обнулить регистр AH.
|
DAA
| Decimal Adjust for Addition - десятичная коррекция после сложения. Алгоритм работы. команда работает только с регистром AL и анализирует наличие следующих ситуаций:
· Ситуация 1. В результате предыдущей команды сложения флаг AF=1 или значение младшей тетрады регистра AL>9. Напомним, что флаг AF устанавливается в 1 в случае переноса двоичной единицы из бита 3 младшей тетрады в старшую тетраду регистра AL (если значение превысило 0fh). Наличие одного из этих двух признаков говорит о том, что значение младшей тетрады превысило 9h.
· Ситуация 2. В результате предыдущей команды сложения флаг CF=1 или значение регистра AL>9fh. Напомним, что флаг CF устанавливается в 1 в случае переноса двоичной единицы в старший бит операнда (если значение превысило 0ffh в случае регистра AL). Наличие одного из этих двух признаков говорит о том, что значение в регистре AL превысило 9fh.
Если имеет место одна из этих двух ситуаций, то регистр al корректируется следующим образом:
· для ситуации 1 содержимое регистра AL увеличивается на 6;
· для ситуации 2 содержимое регистра AL увеличивается на 60h;
· если имеют место обе ситуации, то корректировка начинается с младшей тетрады.
|
DAS
| Decimal Adjust for Subtraction - десятичная коррекция после вычитания. Команда работает только с регистром AL и анализирует наличие следующих ситуаций:
· Ситуация 1. В результате предыдущей команды сложения флаг af =1 или значение младшей тетрады регистра al>9. Напомним, что для случая вычитания флаг af устанавливается в 1 в случае заема двоичной единицы из старшей тетрады в младшую тетраду регистра al. Наличие одного из этих двух признаков говорит о том, что значение младшей тетрады превысило 9h и его нужно корректировать.
· Ситуация 2. В результате предыдущей команды сложения флаг сf =1 или значение регистра al>9fh. Напомним, что для случая вычитания флаг cf устанавливается в 1 в случае заема двоичной единицы. Наличие одного из этих двух признаков говорит о том, что значение в регистре al превысило 9fh.
Если имеет место одна из этих ситуаций, то регистр al корректируется следующим образом:
· для ситуации 1 содержимое регистра al уменьшается на 6;
· для ситуации 2 содержимое регистра al уменьшается на 60h;
· если имеют место обе ситуации, то корректировка начинается с младшей тетрады.
|
MUL множитель
| MULtiplay - умножение целых чисел без знака.
Команда выполняет умножение двух операндов без учета знаков. Алгоритм зависит от формата операнда команды и требует явного указания местоположения только одного сомножителя, который может быть расположен в памяти или в регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:
· если операнд, указанный в команде — байт, то второй сомножитель должен располагаться в al;
· если операнд, указанный в команде — слово, то второй сомножитель должен располагаться в ax;
· если операнд, указанный в команде — двойное слово, то второй сомножитель должен располагаться в eax.
Результат умножения помещается также в фиксированное место, определяемое размером сомножителей:
· при умножении байтов результат помещается в ax;
· при умножении слов результат помещается в пару dx:ax;
· при умножении двойных слов результат помещается в пару edx:eax.
|
IMUL множ
IMUL множ1, множ2
IMUL резул, множ1, множ2
| Integer MULtiplay - умножение целых чисел со знаком.
Алгоритм работы команды зависит от используемой формы команды. Форма команды с одним операндом требует явного указания местоположения только одного сомножителя, который может быть расположен в ячейке памяти или регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:
· если операнд, указанный в команде, — байт, то второй сомножитель располагается в al;
· если операнд, указанный в команде, — слово, то второй сомножитель располагается в ax;
· если операнд, указанный в команде, — двойное слово, то второй сомножитель располагается в eax.
Результат умножения для команды с одним операндом также помещается в строго определенное место, определяемое размером сомножителей:
· при умножении байтов результат помещается в ax;
· при умножении слов результат помещается в пару dx:ax;
· при умножении двойных слов результат помещается в пару edx:eax.
Команды с двумя и тремя операндами однозначно определяют расположение результата и сомножителей следующим образом:
· в команде с двумя операндами первый операнд определяет местоположение первого сомножителя. На его место впоследствии будет записан результат. Второй операнд определяет местоположение второго сомножителя;
· в команде с тремя операндами первый операнд определяет местоположение результата, второй операнд — местоположение первого сомножителя, третий операнд может быть непосредственно заданным значением размером в байт, слово или двойное слово.
|
DIV делитель
| DIVide unsigned - деление целых чисел без знака.
Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно и размер его зависит от размера делителя, который указывается в команде. Алгоритм работы:
· если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;
· если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;
· если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx.
|
IDIV делитель
| Integer DIVide - деление целых чисел со знаком.
Для команды необходимо задание двух операндов — делимого и делителя. Делимое задается неявно, и размер его зависит от размера делителя, местонахождение которого указывается в команде. Алгоритм работы:
· если делитель размером в байт, то делимое должно быть расположено в регистре ax. После операции частное помещается в al, а остаток — в ah;
· если делитель размером в слово, то делимое должно быть расположено в паре регистров dx:ax, причем младшая часть делимого находится в ax. После операции частное помещается в ax, а остаток — в dx;
· если делитель размером в двойное слово, то делимое должно быть расположено в паре регистров edx:eax, причем младшая часть делимого находится в eax. После операции частное помещается в eax, а остаток — в edx;
|
CBW
| Convert Byte to Word - преобразование байта в слово
Команда использует только регистры al и ax: Алгоритм работы - анализ знакового бита регистра al:
· если знаковый бит al=0, то ah=00h;
· если знаковый бит al=1, то ah=0ffh.
|
CWD
| Convert Word to Double word - преобразование слова в двойное слово. Команда использует только регистры al и ax. Алгоритм работы -анализ знакового бита регистра al:
· если знаковый бит al=0, то ah=00h;
· если знаковый бит al=1, то ah=0ffh.
|
CWDE
| Convert Word to Double word Extended - преобразование слова в двойное слово с расширением. Ккоманда использует только регистры ax и eax. Алгоритм работы - анализ знакового бита регистра ax:
· если знаковый бит ax=0, то установить старшее слово eax=0000h;
· если знаковый бит ax=1, то установить старшее слово eax=0ffffh.
|
CDQ
| Convert Double word to Quad word
Преобразование двойного слова (EAX) в учетверенное слово (EDX:EAX).
Алгоритм работы: копирование значения старшего бита регистра eax на все биты регистра edx.
|