Форматы данных и команды их обработки процессоров Pentium III, Pentium IVРефераты >> Программирование и компьютеры >> Форматы данных и команды их обработки процессоров Pentium III, Pentium IV
• маска[1:0]:
• 00 приемник[00 15] ß источник[00 15];
• 01 приемник[00 15] ß источник[16 31];
• 10 приемник[00 15] ß источник[32 47];
• 11 приемник[00 15] ß источник[48 63];
• маска[3:2]:
• 00 приемник[16 .31] ß источник[00 15];
• 01 приемник[16 .31] ß источник[16 .31];
• 10 приемник[16 .31] ß источгшк[32 47];
• 11 приемник[16 .31] ß источник[48 .63];
• маска[5:4]:
• 00 приемник[32 47] ß источник[00 15];
• 01 приемник[32 47] ß источник[16 31];
• 10 приемник[32 47] ß источник[32 47];
• 11 приемник[32 47] ß источник[48 63];
• маска[7:6]:
• 00 приемник[47 .63] ß источник[00 15];
• 01 приемник[47 .63] ß источник[16 31];
• 10 приемник[47 .63] ß истспник[32 47];
• 11 приемник[47 .63] ß источник[48 63].
Если использовать один и тот же ХММ-регистр в качестве источника и приемника, то можно выполнять любые перестановки слов в пределах младшего учетверенного слова одного ХММ-регистра, в том числе и инициализацию значением одного слова других слов. Работу команды PSHUFLW поясняет схема, показанная далее.
Флаги: не изменяются.
Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13, 16; #UD: 17,19,22; #NM: 3; VM: исключения реального режима; #PF(fault-code).
PSLLDQ приемник, количество сдвигов
PSLLDQ (Shift Double Quadword Left Logical) — логический сдвиг влево приемника на число байт количество _сдвигов.
Синтаксис: PSLLDQ xmm1, imm8
Машинный код: 66 0F 73 /7 i8
Действие: сдвиг влево приемника на число байт, указанных непосредственным операндом количество _сдвигов. Освобождаемые слева младшие байты обнуляются. Если значение, указанное операндом количество _сдвигов, больше чем 15, операнд приемник обнуляется.
Флаги: не изменяются.
Исключения: #UD: 10,12,15; #NM: 3; RM: исключения защищенного режима; VM: исключения защищенного режима.
PSLLW/PSLLD/PSLLQ приемник, количество_сдвигов
PSLLW/PSLLD/PSLLQ (SHIFt packed data Left Logical) — сдвиг влево логический приемника на число бит количество_сдвигов.
Синтаксис и машинный код:
66 0F F1 /r PSLLW rxmrn-l, rxmm2/m128
66 0F 71 /6 ib PSLLW rxmm1, imm8
66 0F F2 /r PSLLD rxmm1, rxmm2/m128
66 0F 72 /6 ib PSLLD rxmm1, imm8
66 0F F3 /r PSLLQ rxmm1, rxmm2/m128
66 0F 73 /6 ib PSLLQ rxmm1, imm8
Действие: сдвиг упакованных элементов приемника (слов, двойных слов, учетверенных слов) влево на число бит, указанных операндом количество _сдвигов. Освобождаемые слева биты замещаются нулевыми. Если значение, указанное операндом количество _сдвигов, больше чем 15 (для слов), 31 (для двойных слов) или 63 (для учетверенных слов), то значение операнда приемник устанавливается равным 0. Операнд количество _сдвигов может быть либо ХММ-регистром (128-разрядной ячейкой памяти), либо непосредственным 8-разрядным операндом. Флаги: не изменяются.
Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).
PSRAW/PSRAD приемник, количество_сдвигов
PSRAW/PSRAD (SHIFt Packed data Right Arithetic) — сдвиг вправо арифметический приемника на число бит количество_сдвигов.
Синтаксис и машинный код:
66 0F Е1 /r PSRAWxmmI, xmm2/m128
66 0F 71/4 i8 PSRAW xmm1, imm8
66 0F E2 /r PSRAD xmm1, xmm2/m128
66 0F 72 /4 i8 PSRAD xmm1, imm8
Действие: сдвиг упакованных элементов приемника (слов, двойных слов) вправо на число бит, указанных операндом количество_сдвигов. Освобождаемые справа биты заполняются значением знакового разряда элемента данных. Если значение, указанное операндом количество_сдвигов, больше чем 15 (для слов) или 31 (для двойных слов), то каждый элемент данных приемника заполняется начальным значением знакового разряда элемента. Операнд количество _сдвигов может быть либо ХММ-регистром (128-разрядной ячейкой памяти), либо непосредственным 8-разрядным операндом.
Флаги: не изменяются.
Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).
PSRLDQ приемник, количество_сдвигов
PSRLDQ (Shift Double Quadword Right Logical) — сдвиг вправо приемника на число байт количество_сдвигов.
Синтаксис: PSRLDQ xmm1, imm8
Машинный код: 66 0F 73 /З i8
Действие: сдвиг вправо приемника на число байт, указанных непосредственным операндом количество_сдвигов. Освобождаемые справа младшие байты обнуляются. Если значение, указанное операндом количество_сдвигов, больше чем 15, операнд приемник обнуляется.
Флаги: не изменяются.
Исключения: #UD: 10, 12, 15; #NM: 3; RM: исключения защищенного режима; VM: исключения защищенного режима.
PSRLW/PSRLD/PSRLQ приемник, количество_сдвигов
PSRLW/PSRLD/PSRLQ (Shift Packed Data Right Logical) — сдвиг вправо логический приемника на число бит количество _сдвигов.
Синтаксис и машинный код:
66 0F D1 /r PSRLW rxmm1, rxmm2/m128
66 0F 71 /2 i8 PSRLW rxmm1, imm8
66 0FD2/r PSRLD rxmm1, rxmm2/m128
66 0F 72 /2 i8 PSRLD rxmm1, imm8
66 0F D3/r PSRLQ rxmm1, rxmm2/m128
66 0F 73/2 i8 PSRLQ rxmm1, imm8
Действие: сдвиг упакованных элементов приемника (слов, двойных слов, учетверенных слов) вправо на число бит, указанных операндом количество _сдвшов. Освобождаемые справа биты замещаются нулевыми. Если значение, указанное операндом количество_сдвиюв, больше чем 15 (для слов), 31 (для двойных слов) или 63 (для учетверенных слов), то значение операнда приемник устанавливается равным 0. Операнд количество_сдвшов может быть либо ХММ-регистром (128-разрядной ячейкой памяти), либо непосредственным 8-разрядным операндом. Флаги: не изменяются.
Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(fault-code); RM: #GP: 13,16; #NM: 3; #UD: 17,19, 22; VM: исключения реального режима; #PF(lault-code).
PSUBB/PSUBW/PSUBD приемник, источник
PSUBB (Packed Subtraction Bytes) — вычитание упакованных байт. PSUBW (Packed Subtraction Words) — вычитание упакованных слов. PSUBD (Packed Subtraction Double words) — вычитание упакованных двойных слов.
Синтаксис и машинный код:
66 0F F8 /r PSUBB rxmm1, rxmm2/m128
66 0F F9 /r PSUBW rxmm1, rxmm2/m128
66 0F FA /r PSUBD rxmm1, rxmm2/m128
Действие: команда вычитает из элементов источника элементы приемника размером байт/слова/двойное слово в зависимости от кода операции. При переполнении результат формируется в соответствии с принципом циклического переполнения. Результат помещается в операнд приемник.
Флаги: не изменяются.
Исключения: РМ: #GP(0): 2, 42; #SS(0): 1; #UD: 10, 12, 15; #NM: 3; #PF(iau!t-code); RM: #GP: 13,16; ^NM: 3; #UD: 17,19,22; VM: исключения реального режима; #PF(fault-code).
PSUBQ приемник, источник