![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Команды передачи данных. В группу команд передачи данных входят две команды 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 заполняют элемент данных выходного операнда единицами, если соответствующий элемент данных выходного операнда больше соответствующего входного элемента и нулями, в противном случае.
|