Команды передачи данных. В группу команд передачи данных входят две команды movd и movq.

В группу команд передачи данных входят две команды movd и movq.

Команда movd позволяет копировать 32-разрядное число:

• из младших разрядов одного ММХ-регистра в младшие разряды другого

(старшие разряды заполняются нулями);

• из переменной в памяти либо из целочисленного регистра в младшие 32

разряда ММХ-регистра (старшие разряды заполняются нулями);

• из младших разрядов ММХ-регистра в ячейку памяти либо в целочисленный регистр.

Команда movq выполняет копирование 64 бит:

• из одного ММХ-регистра в другой;

• из памяти в ММХ-регистр;

• из ММХ-регистра в память.

Среди всех ММХ-команд только movd и movq могут иметь выходной операнд в памяти, a movd - единственная команда, операнд которой может находиться в 32-разрядном регистре процессора.

Арифметические командывключают команды сложения, вычитания, умножения и сравнения.

Команды сложения и вычитания работают с упакованными байтами и словами со знаком и без знака, а также с упакованными двойными словами со знаком. Они могут использовать как циклическую арифметику, так и арифметику с насыщением.

Команды сложения paddb, paddw, paddd (циклическая арифметика), paddsb, paddsw (арифметика со знаковым насыщением) и paddusb, paddusw (арифметика с беззнаковым насыщением) - входной операнд может находиться в ММХ-регистре или в памяти; выходной операнд должен находиться в ММХ-регистре.

Работа команды paddusw ММ0,ММ1 проиллюстрирована на рис. 3.5.

Из рисунка видно, что слово (16 – 31 разряд) содержит значение 65 535. Поскольку сумма соответствующих слов превышает предельно допустимое значение для данного типа операндов, в качестве суммы берется граничное значение.

Рис. 3.5. Сложение по команде paddusw MM0,MM1

Команды вычитания psub, psubw, psubd (циклическая арифметика), psubsb, psubsw (арифметика со знаковым насыщением) и psubusb, psubusw (арифметика с беззнаковым насыщением) - входной операнд может находиться в ММХ-регистре или в памяти; выходной операнд должен находиться в ММХ-регистре.

Команды вычитания работают с теми же типами данных и формируют результат точно так же, как и команды сложения.

Команды умножения попарно перемножают 16-разрядные слова и дают результат по правилам циклической арифметики.

Команда pmulhw (pmullw) - попарное умножение 16-разрядных слов со знаком, находящихся во входном и выходном операндах. Результатом операции являются четыре 32-разрядных произведения, при этом старшие (младшие) разряды произведений сохраняются в 16-разрядных словах выходного операнда, а младшие (старшие) разряды произведений теряются. Входным операндом может выступать ММХ-регистр или ячейка памяти, а выходным операндом должен быть ММХ-регистр. Для получения полного результата умножения с помощью этих команд необходимо выполнить такую



последовательность шагов:

· получить старшие 16 бит произведения, используя команду pmulhw.

· получить младшие 16 бит произведения, используя команду pmullw.

· объединить частичные результаты в одно двойное слово с помощью команд punpckhwd и punpcklwd.

Команда pmaddwd - попарное умножение 16-разрядных слов со знаком, находящихся в двух операндах. После получения в результате четырех 32-разрядных произведений первое произведение складывается со вторым, а третье - с четвертым. Суммы записываются в 32-разрядные слова выходного операнда. Работа команды pmaddwd ММ0,ММ1 проиллюстрирована на рис. 3.5.

Рис. 3.5. Умножение по команде ppaddwd MM0,MM1

Команды сравнения попарно сравнивают элементы данных (байты, 16- или 32-разрядные слова) входного и выходного операндов и в зависимости от результата сравнения соответствующий элемент данных выходного операнда заполняется нулями либо единицами. Входным операндом могут выступать ММХ-регистр или ячейка памяти, а выходной операнд должен находиться в ММХ-регистре.

Команды pcmpeqb, pcmpeqw, pcmpeqd заполняют элемент данных выходного операнда единицами, если соответствующие элементы равны и нулями, в противном случае.

Команды pcmpgtb, pcmpgtw, pcmpgtd заполняют элемент данных выходного операнда единицами, если соответствующий элемент данных выходного операнда больше соответствующего входного элемента и нулями, в противном случае.


3417956263802953.html
3418020176632352.html
    PR.RU™