PUSH operand onto stack – поместить в стек.
Поместить в стек слово или двойное слово. Поскольку при включении в стек слова нарушается выравнивание стека по границам двойных слов, рекомендуется в любом случае помещать в стек двойное слово.
PUSH const
Поместить в стек непосредственный 32-битный операнд.
PUSHA
PUSH All general registers onto stack – поместить в стек все регистры общего назначения.
Поместить в стек регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.
POP пприемник
POP operand from the stack – извлечь операнд из стека.
Извлечь из стека слово или двойное слово.
POPА
POP All general registers onto stack – извлечь изстека все регистры общего назначения.
Извлечье из стека данные в регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP.
PUSHF
PUSH Flags register onto stack
Помещение в стек регистра флагов.
POPF
POP Flags register from the stack
Извлечь из стека данные в регистр флагов.
Команда
Описание
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.
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.
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав!Последнее добавление