Манипуляции с данными
- AND логическое И
- OR логическое ИЛИ-(включающее)
Инструкции AND и OR выполняют поразрядные операции, которые должны быть знакомы каждому, потому что они являются основой для манипуляции с разрядами.
- NOT отрицание с поразрядным дополнением до 1
- NEG отрицание с поразрядным дополнением до 2
Инструкции NOT и NEG иногда вызывают некоторое замешательство, потому что по виду они похожи, но, конечно, не выполняют одну и ту же операцию. Инструкция NOT — поразрядная операция, которая устанавливает каждую двоичную 1 в 0 и каждый двоичный 0 в 1. Инструкция NEG выполняет вычитание операнда из 0. Следующий фрагмент кода показывает различия между этими двумя инструкциями:
void NOTExample { void )
{
_asm {
MOV EAX , OFFh
MOV EBX , 1
NOT EAX // EAX теперь содержит OFFFFFFOOh.
NOT EBX // ЕВХ теперь содержит OFFFFFFFEh.
}
}
void NEGExample ( void ) (
_asm
{
MOV EAX , OFFh MOV EBX , 1
NEG EAX // EAX теперь содержит OFFFFFFOlh ( 0 - OFFh ).
NEC EBX // EBX теперь содержит OFFFFFFFFh ( 0 - 1 ).
}
}
- XOR логическое ИЛИ (исключающее)
Инструкция XOR — это самый быстрый способ обнулить значение. XOR с двумя операндами установит каждый разряд в 1, если одинаковые разряды в каждом операнде различны. Если все разряды одинаковы, то результат равен 0. Поскольку операция
XOR ЕАХ,ЕАХ
выполняется быстрее, чем
MOV EAX,0
(потому что первая занимает меньшее количество машинных тактов), компиляторы Microsoft используют XOR для обнуления регистров.
- INC инкремент (увеличение) на 1
- DEC декремент (уменьшение) на 1
Эти инструкции очень просты, и можно понять, что они делают, прямо из их названий. Компилятор часто использует эти инструкции при оптимизации некоторых кодовых последовательностей, потому что каждый из них выполняется за один цикл часов.
Кроме того, эти инструкции отображаются прямо в целочисленные арифметические С-операции ++ и - -
- SHL сдвиг влево, умножение на 2
- SHR сдвиг вправо, деление на 2
- DIV беззнаковое деление
- MUL беззнаковое умножение
- IDIV деление со знаком
- IUML умножение со знаком
- LOCK устанавливает сигнальный префикс LOCK#
- MOVSX пересылка с расширением знакового разряда
- MDVZX пересылка с расширением нулем