Команды передачи данных. В группу команд передачи данных входят две команды 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 заполняют элемент данных выходного операнда единицами, если соответствующий элемент данных выходного операнда больше соответствующего входного элемента и нулями, в противном случае.
Дата добавления: 2015-12-22; просмотров: 1042;