Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мпс с 1 по 294.doc
Скачиваний:
13
Добавлен:
16.04.2019
Размер:
6.2 Mб
Скачать

2.5.4. Команды логических операций и сдвигов

Команды этой группы приведены в таблице 2.43.

Команды PAND, PANDN, POR, PXOR выполняют логические операции И, НЕ-И (Запрет), ИЛИ, Исключающее ИЛИ соответственно. Логические операции выполняются над значения­ми каждого из разрядов исходных операндов, которые размещаются в регистре mm и регистре или ячейке памяти mm/m64. Результат операции записывается в регистр mm.

В командах сдвига сдвигаемый операнд всегда размещается в ММХ-регистре mm.Число разрядов сдвига указывается во втором операнде (операнде-источнике), который мо­ жет храниться в ММХ-регистре mm, ячейке памяти т64 или задаваться непосредственно операндом im8. Сдвиг выполняется отдельно для каждого элемента исходного операнда. При этом выдвигаемые биты не сохраняются.

Команды PSLL[W, D, Q] производят логический сдвиг каждого элемента (слова, двой­ного или счетверенного слова) влево. При этом освобождающиеся младшие биты каждого элемента заполняются нулями. Команда PSRL[W, D, Q] осуществляет логический сдвиг соответствующих элементов вправо, заполняя освобождающиеся старшие биты каждого элемента нулями. Отметим, что если заданное число разрядов сдвига превышает 15 (при сдвиге слов), 31 (при сдвиге двойных слов) или 63 (при сдвиге счетверенного слова), то результатом операции являются нулевые значения всех элементов.

Команда PSRA[W,D] выполняет арифметический сдвиг вправо каждого элемента (слова или двойного слова), хранящегося в заданном ММХ-регистре mm. При таком сдвиге освобож­дающиеся старшие биты каждого элемента заполняются значением знакового бита.

2.5.5. Команды сравнения и нахождения максимума/минимума

Команды этой группы приведены в табл. 2.44. Выполнение этих команд отличается от обычных команд сравнения, которые работают с регистрами общего назначения. Обыч­ные команды сравнения СМР не изменяют значения исходных операндов, а результатом сравнения является установка соответствующих признаков в регистре EFLAGS. ММХ-команды сравнения представляют результат операции в виде значения операнда, помещае­мого в регистр mm, и не станавливают каких-либо признаков.

Команды PCMPEQ[B, W, D] и PCMPGT[B, W, D] производят сравнение элементов (бай­тов, слов или двойных слов), которые представляются как числа со знаком. Если значения элемента в исходных операндах, которые располагаются в регистре mm и регистре или ячейке памяти mm/m64, равны, то при выполнении команды PCMPEQ (сравнение элемен­тов на равенство), все биты в соответствующем элементе результата, размещаемого в регистре mm, принимают значение «1». В противном случае (неравенство элементов) все биты в элементе результата принимают значение «О». Команда PCMPGT (сравнение на большее значение) проверяет, имеет ли элемент операнда в регистре mm большее зна­чение, чем аналогичный элемент в регистре или ячейке памяти mm/m64. Если это условие выполняется, то все биты соответствующего элемента результата в регистре mm прини­мают значение «1», в противном случае значение «О».

Команды PMAXSW и PMAXUB реализуют выделение в исходных операндах элементов с большим значением, из которых формируется результат операции. Эти команды выпол­няют сравнение элементов исходных операндов, размещенных в регистре mm и регистре или ячейке памяти mm/m64, выделяют элементы с большим значением и размещают их в качестве соответствующих элементов результата в регистр mm. Команды PMINSW PMINUB также производят сравнение элементов в исходных операндах, но выделяют эле­менты с меньшим значением, которые размещаются в регистре mm в качестве результата операции. Команды PMAXSW, PMINSW обрабатывают слова со знаком, команды PMAXUB, PMINUB-байты без знака.