Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
MASKMOVQ
Влияние команды на флаги и форматы команды:
|
|
|
|
|
|
0F F7 /r |
MASKMOVQ mm1,mm2 |
Копировать упакованные байты из mm1 в память по адресу DS:(E)DX согласно установок знаковых битов в соответствующих упакованных байтах mm2 |
Pentium III |
maskmovq mm2,mm6 |
Описание:
Команда MASKMOVQ пересылает данные из MMX-регистра (левый операнд) в операнд в памяти, адресуемый регистрами DS:(E)DX, используя содержимое второго MMX-регистра (правый операнд) для разрешения пересылки отдельных байтов пересылаемых данных. А именно: каждый байт исходного операнда либо копируется в аналогичное поле операнда-назначения, когда в соответствующем байте регистра маски установлен самый старший бит, либо не копируется, когда этот бит сброшен.
Если все управляющие биты маски сброшены, то для данной команды не будут срабатывать некоторые условия генерации особых ситуаций, а также не будут соблюдаться некоторые правила работы:
- #GP и #SS не будут генерироваться для некорректных ссылок в память;
- #PG не будет генерироватьсяв некоторых процессорах;
- переключение состояния FPU в MMX-режим будет происходить также, как и для всех MMX-команд;
- могут не срабатывать некоторые ловушки отладки по коду и по данным;
- #UD, #NM, #MF и #AC генерируются обычным образом.
Поле mod байта ModR/M кода команды должно быть установлено в 11b, иначе будет генерироваться ошибка #UD.
Операция:
IF (SRC[7] = 1) THEN
m64[EDI] = DEST[7-0];
ELSE
M64[EDI] = 0h;
FI;
IF (SRC[15] = 1) THEN
m64[EDI] = DEST[15-8];
ELSE
M64[EDI] = 0h;
FI;
IF (SRC[23] = 1) THEN
m64[EDI] = DEST[23-16];
ELSE
M64[EDI] = 0h;
FI;
IF (SRC[31] = 1) THEN
m64[EDI] = DEST[31-24];
ELSE
M64[EDI] = 0h;
FI;
IF (SRC[39] = 1) THEN
m64[EDI] = DEST[39-32];
ELSE
M64[EDI] = 0h;
FI;
IF (SRC[47] = 1) THEN
m64[EDI] = DEST[47-40];
ELSE
M64[EDI] = 0h;
FI;
IF (SRC[55] = 1) THEN
m64[EDI] = DEST[55-48];
ELSE
M64[EDI] = 0X0;
FI;
IF (SRC[63] = 1) THEN
m64[EDI] = DEST[63-56];
ELSE
M64[EDI] = 0h;
FI;
Особые ситуации защищенного режима:
#GP(0) при некорретном эффективном адресе операнда в памяти в сегментах CS, DS, ES, FS или GS.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки) при страничной ошибке.
#NM, если CR0.TS = 1.
#AC при невыровненных обращениях к памяти (когда CR0.AM = 1, EFLAGS.AC = 1 и CPL = 3).
#UD, если CR0.EM = 1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов от 0 до 0FFFFh.
#NM, если CR0.TS = 1.
#UD, если CR0.EM = 1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC при невыровненных обращениях к памяти (когда CR0.AM = 1 и EFLAGS.AC = 1).
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru