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

Команды логических операций предназначены для поразрядной обработки содержимого двух ММХ-регистров или ММХ-регистра и 64-битного операнда в памяти. Эти команды реализуют следующие логические операции: «И», «И-НЕ», «ИЛИ», «исключающее ИЛИ». Заметьте, что появилась новая логическая операция «И-НЕ», которой нет среди логических команд основного процессора. Другая особенность логических команд заключается в том, что они выполняются над всеми шестьюдесятью четырьмя разрядами ММХ-операндов. Для структурирования результатов их работы нужно применять другие команды MMX-расширения.

pand приемник,источник — выполнение поразрядной операции «И» над операндами приемника источник. Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти. Биты результата в прием ник формируются в соответствии с табл. 2.4.

 

 

Таблица 2.4. Таблица истинности для операции «И»

Приемник
Источник
Результат

Принцип работы команды pand демонстрирует пример:

.data ;сегмент данных mem dw 0505h df 7ff002203080hmem1 dw 0005h df 7ff002000f80h.code... ... ...movq rmmx0, mem ;rmmx0=7ff0 0220 3080 0505 ;mem1 =7ff0 0200 0f80 0005pand rmmx0, mem1 ;rmmx0=7ff0 0200 0080 0005... ... ...

pandn приемник, источник — выполнение поразрядной операции «И-НЕ» над операндами приемники источник. Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти. Биты результата в приемник формируются в соответствии с табл. 2.5. Из нее видно, что единичные биты в результате могут появиться только в одном случае, когда единичные биты второго операнда совпадают с нулевыми битами первого операнда. Команда позволяет определить положение единичных битов второго операнда, которым не соответствуют единичные биты первого операнда.

Таблица 2.5. Таблица истинности для операции «И-НЕ»

Приемник
Источник
Результат

Принцип работы команды pandn демонстрирует пример:

.data ;сегмент данныхmem dw 0505h df 7ff002203080hmem1 dw 0005h df 7ff003000f80h.code... ... ...
movq rmmx0, mem ;rmmx0=7ff0 0220 3080 0505 ;mem1 =7ff0 0300 0f80 0005pandn rmmx0, mem1 ;rmmx0=0000 0100 0f00 0000... ... ...

роr приемник, источник — выполнение поразрядной операции «ИЛИ» над операндами приемники источник. Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти. Биты результата в приемник формируются в соответствии с табл. 2.6.

Таблица 2.6. Таблица истинности для операции «ИЛИ»

Приемник
Источник
Результат

Принцип работы команды рог демонстрирует пример:

.data ;сегмент данныхmem dw 0505h
df 7ff002203080h
mem1 dw 0005h df 7ff003000f80h.code... ... ...movq rmmx0, mem ;rmmx0=7ff0 0220 3080 0505 ;mem1=7ff0 0300 0f80 0005por rmmx0, mem1 ; rmmx0=7ff0 0320 3f80 0505... ... ...

pxor приемник, источник — выполнение поразрядной операции «исключающее ИЛИ» над операндами приемники источник. Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти. Биты результата в приемник формируются в соответствии с табл. 2.7.

Таблица 2.7. Таблица истинности для операции «исключающее ИЛИ»

Приемник
Источник
Результат

Принцип работы команды рхоr демонстрирует пример:

.data :сегмент данныхmem dw 0505h df 7ff002203080h
mem1 dw 0005h df 7ff003000f80h
.code... ... ...movq rmmx0, mem ;rmmx0=7ff0 0220 3080 0505 ;mem1 =7ff0 0300 0f80 0005 рхоr rmmx0, mem1 ;rmmx0=0000 0120 3f00 0500... ... ...

Команды сдвига

Среди ММХ-команд сдвига существуют команды арифметического и логического сдвига. Обратите внимание на то обстоятельство, что ММХ-команд сдвига упакованных байтов нет. Сдвигать можно только упакованные слова, двойные слова и учетверенные слова (целиком весь ММХ-регистр).

psllw | pslld | psllq приемник, источник — команды логического сдвига влево упакованных слов, двойных слов или учетверенных слов в приемник на количество разрядов, указанных значением источник. Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти. Освобождающиеся в результате сдвига младшие биты упакованных элементов nрueмнuк заполняются нулями.

psllw | pslld | psllq приемник, количество_сдвигов —команды логического сдвига влево аналогичны рассмотренным выше командам, за исключением того, что все упакованные слова, двойные слова и учетверенные слова в приемник сдвигаются на количество разрядов, указанных значением непосредственного операнда источник. Освобождающиеся в результате сдвига младшие биты упакованных элементов лриемник заполняются нулями.

psrlw | psrld | psrlq приемник,источник —команды логического сдвига вправо упакованных слов, двойных слов или учетверенных слов в приемник на количество разрядов, указанных значением в источник. Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти. Освобождающиеся в результате сдвига старшие биты упакованных элементов приемник заполняются нулями.

psrlw | psrld | psrlq приемник, количество_сдвигов — команды логического сдвига вправо аналогичны рассмотренным выше командам, за исключением того, что все упакованные слова, двойные слова или учетверенные слова в приемник сдвигаются на количество разрядов, указанных значением непосредственного операнда источник. Освобождающиеся в результате сдвига старшие биты упакованных элементов приемник заполняются нулями.

.data ;сегмент данных mem dw 0ffffh df 0ffffffffffffh mem1 dw 4 df 0 .code... ... ...movq rmmx0, mem ;rmmx0=ffff ffff ffff ffff ;mem1 =0000 0000 0000 0004 psllw rmmx0, mem1 ;rmmx0=fff0 fff0 fff0 fff0 psrlw rmmx0, 4 ;rmmx0=0fff 0fff 0fff 0fff... ... ...

Следующие команды являются командами арифметического сдвига. Эти команды сдвигают значение операнда вправо. Команд арифметического сдвига влево нет, так как они аналогичны командам логического сдвига, не сохраняющим значения знакового разряда.

psraw | psrad приемник,источник— команды арифметического сдвига вправо упакованных слов или двойных слов в приемник на количество разрядов, указанных в источник. Результат помещается в приемник, который является одним из ММХ-регистров. Источник— либо ММХ-регистр, либо 64-разрядная ячейка памяти. Освобождающиеся в результате сдвига старшие биты упакованных элементов приемник заполняются значением знаковых (старших) разрядов этих элементов.