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

1 2.5.3. Команды арифметических операций '

Эта группа (табл. 2.42) содержит как команды, использующие принцип циклического переноса, так и команды, использующие принцип насыщения. Мнемокоды команд, при вы­полнении которых реализуется принцип циклического переноса, содержат только суффик­сы В, W или D, определяющие тип обрабатываемых данных. При переполнении перенос не фиксируется, сохраняется только элемент формата. Мнемокоды команд, реализующих принцип насыщения, кроме суффиксов, определяющих тип данных, содержат суффикс S или US, указывающий вид насыщения - знаковое или беззнаковое.

Команды PADD[B,W,D] и PSUB[B,W,D], PADDS[B,W] и PSUBS[B,W], PADDUS[B,W] и PSUBUS[B,W] производят сложение и вычитание элементов данных, представленных в со­ответствующем формате. При выполнении этих операций один из операндов всегда разме­щается в ММХ-регистре mm, другой операнд - в регистре или ячейке памяти mm/m64, результат располагается в регистре mm. Команды PADD[B,W,D], PSUB[B,W,D] выполняют сло­жение и вычитание элементов без знака, используя принцип циклического переноса (обыч­ная арифметика). Команды PADDS[B,W], PSUBS[B,W] и PADDUS[B,W], PSUBUS[B,W] вы­полняют сложение и вычитание элементов со знаком (суффикс S) и без знака (суффикс US), используя принцип насыщения.

Команды PMULHW и PMULLW осуществляют умножение слов со знаком, хранящихся в ММХ-регистре mm и регистре или ячейке памяти mm/m64. После выполнения операции в соответствующих элементах (словах) регистра mm размещается старшее (команда PMULHW с суффиксом Н) или младшее (команда PMULLW с суффиксом L) слово полу­ченного 32-разрядного произведения. Команда PMULHUW выполняет действия, анало­гичные команде PMULHW, над словами без знака.

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

на слова W3-0 операнда, хранящегося в регистре или ячейке памяти mm/m64. Таким обра­зом, получается промежуточный результат в виде четырех двойных слов D3-0. Затем два старших двойных слова этого результата - D3 и D2 - суммируются. Их сумма записывает­ся в ММХ-регистр mm в качестве старшего двойного слова D1 конечного результата. Два младших двойных слова промежуточного результата - D1 и DO-также суммируются, и их сумма записывается в регистр mm в качестве младшего двойного слова DO конечного ре­зультата.

При сложении двойных слов промежуточного результата (D3 и D2, или D1 и DO) может образоваться перенос, если все четыре слова, участвующие в операции умножения при получении промежуточного результата, равны 8000h (- 32768). В этом случае двойное слов D1 или DO в окончательном результате данной операции будет иметь значение SOOOOOOOh (- 2147483648).

Команда PAVG[B,W] производит вычисление средних значений беззнаковых элемен­тов (байтов или слов) в исходных операндах, которые хранятся в регистре mm и регистре или ячейке памяти mm/m64. Эти элементы сначала складываются, а затем их сумма вме­сте с битом переноса сдвигается на один разряд влево, что эквивалентно делению на 2. При этом старший бит элемента заполняется битом переноса, который получился в ре­зультате сложения. Таким образом, в каждом элементе результата, записываемого в ре­гистр mm, оказывается среднее значение элементов исходных операндов.

Команда PSADBW выполняет сложение абсолютных разностей байтов без знака (рис. 2.31). Беззнаковые байты, хранящиеся в регистре или ячейке памяти mm/m64, вы­читаются из беззнаковых байтов в регистре mm, а затем абсолютные значения получен­ных разностей суммируются. Результат их сложения записывается в качестве младшего слова WO в регистр mm. В старшие три слова W3-1 этого регистра записываются нули.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]