Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
PMULHRW
Влияние команды на флаги и форматы команды:
|
|
|
|
|
|
|
|
|
Код/Суфф. |
|||
0F 0F / B7 |
PMULHRW mm,mm/m64 |
Перемножить упакованные целые со знаком из mm и из mm/m64, результат округлить к ближайшему и его старшие 16 бит поместить в mm |
pmulhrw mm2,[esi] |
Описание:
Команда PMULHRW производит перемножение четырех знаковых 16-битных целых значений из операнда-источника и соответствующих целых знаковых элементов операнда-назначения. Затем к младшим 16 битам 32-битных результатов добавляется 0x8000h, что приводит к округлению (к ближайшему) старших 16 бит результата (включая знаковый бит), которые записываются в операнд-назначение, занимая соответствующие слова в упакованном целочисленном формате.
Операндом-назначением является MMX-регистр. Операндом-источником может быть как MMX-регистр, так и операнд в памяти.
Команда PMULHRW обеспечивает более точный результат, чем команда PMULMH, которая обрезает 32-битное значение, полученное после умножения, вместо округления.
Для примера, для исходных значений операндов 0xD2505321_7007FFFFh и 0x8807EC22_7FFEFFFFh после выполнения команды PMULHRW будет получено значение 0x1569F98C_38030000h.
Операция:
temp1 <- dest[15:0] * src[15:0];
temp2 <- dest[31:16] * src[31:16];
temp3 <- dest[47:32] * src[47:32];
temp4 <- dest[63:48] * src[63:48];
dest[15:0] <- temp1[31:16];
dest[31:16] <- temp2[31:16];
dest[47:32] <- temp3[31:16];
dest[63:48] <- temp4[31:16];
Особые ситуации защищенного режима:
#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#UD, если CRO.EM=1.
#NM, если CRO.TS=1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#UD, если CRO.EM=1.
#NM, если CRO.TS=1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru