Рефераты. Форматы данных и команды их обработки процессоров Pentium III, Pentium IV p> • ? — после выполнения команды флаг не определен;

• список исключений.

На многих диаграммах в целях компактности возможные сочетания операндов показаны в виде следующей конструкции:

[pic]

Конструируя команду на основе подобной синтаксической диаграммы, нужно помнить о соответствии типов. Допустимы только следующие сочетания: "r8, m8", "r16, m16", "r32, m32", а сочетание, например, "r8, m16" недопустимо.
Однако, есть единичные случаи, когда подобные сочетания возможны; тогда они оговариваются специальным образом.

Описание машинного кода приводится в двух вариантах.

• В двоичном виде. Это описание применяется для демонстрации особенностей внутренней структуры машинной команды. Байты машинного представления машинной команды отделяются двоеточием.

• В шеснадцатеричном виде. Каждый байт машинного представления команды представлен двумя шестнадцатеричными цифрами. Часто за одним (двумя и более) первым байтом следует обозначение: /цифра. Это означает, что поле reg в байте mod r/m используется как часть кода операции и цифра представляет содержимое этого поля.

Вместо цифры может стоять символ "r" — /r. Как уже не раз отмечалось, большинство команд процессора — двухоперандные. Один операнд располагается в регистре, местоположение другого операнда определяет байт ModR/M — это может быть либо регистр, либо ячейка памяти. Более того, если операнд — ячейка памяти, то содержимое байта ModR/M определяет номенклатуру компонентов машинного кода команды, которые должны использоваться для вычисления эффективного адреса.

При описании команд могут быть опущены некоторые из перечисленных пунктов. Например, отсутствие пункта "синтаксис" говорит о том, что он совпадает со схемой команды. Отсутствие пункта "исключения" означает, что при выполнении данной команды исключения не возникают. То же касается описания флагов.

Некоторые регистры программной модели процессора имеют внутреннюю структуру. Указание того, о каком поле такого регистра идет речь, показано следующим образом: имя_регистра.имя_поля.

1. Команды блока XMM (SSE – Pentium 3)

ADDPS приемник, источник

ADDPS (ADDition Packed Single-precision float-point) — сложение упакованных значений в формате ХММ.

Синтаксис: ADDPS rxmm1, rxmm2/m128

Машинный код: 00001111:01011000:mod rxmm1 r/m

Действие: алгоритм работы команды показан на рисунке ниже.

[pic]

Исключения: NE: #O, #U, #I, #Р, #D; PM: #GP(0): 37; #NM: 3; #PF(fault- code); #SS(0): 13; #UD: 10,11,12,13; #XM; RM: #GP: 13; #NM: 3; #UD: 17,18;
#XM; VM: исключения реального режима; #PF(fault-code).

ADDSS приемник, источник

ADDSS (ADD Scalar Single-precision float-point) — скалярное сложение значений в формате ХММ.

Синтаксис: ADDSS rxmm1, rxmm2/m128

Машинный код: 11110011:00001111:01011000:mod rxmm1 r/m

Действие: алгоритм работы команды показан на рисунке ниже.

[pic]

Исключения: NE: #O, #U,. #I, #P, #D; PM: #АС: 4; #GP(0): 37; #NM: 3;
#PF(fault-code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-
20; #XM; VM: исключения реального режима; #АС(0); #PF(fault-code).

ANDNPS приемник, источник

ANDNPS (bit-wise logical AND Not for Packed Single-precision float- point) — поразрядное логическое И-НЕ над упакованными значениями в формате
ХММ.

Синтаксис: ANDNPS rxmm1, rxmm2/m128

Машинный код: 00001111:01010101:mod rxmm1 r/m

Действие: инвертировать биты операнда приемник, над каждой парой битов операндов приемник (после инвертирования) и источник выполнить операцию логического И.

Исключения: PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13; #UD:
10,12,13; RM: #GP: 13; #NM: 3; #UD: 7; VM: исключения реального режима;
#PF(fault-code); #UD: 16, 17.

ANDPS приемник, источник

ANDPS (bit-wise logical AND for Packed Single-precision float-point) — поразрядное логическое И над каждой парой бит операндов источник и приемник.

Синтаксис: ANDPS rxmm1, rxmm2/m128

Машинный код: 00001111:01010100: mod rxmm 1 r/m

Исключения: 1; PM: #GP(0): 37; #NM: 3; #PF(fault-code); #SS(0): 13;
#UD: 10,12, 13; RM: #GP: 13; #NM: 3; #UD: 17, 19, 20; VM: исключения реального режима; #PF(fault-code).

CMPPS приемник, источник, условие

CMPPS (CoMPare Packed Single-precision float-point) — сравнение упакованных значений в формате ХММ

Синтаксис: CMPPS rxmm1, rxmm2/m128, i8

Машинный код: 00001111:11000010: mod rxmm1 r/m: i8

Действие: условие, в соответствии с которым производится сравнение каждой пары элементов операндов приемник и источник, задается явно в виде непосредственного операнда (см. ниже). В результате сравнения в приемнике формируются единичные (если условие выполнено) или нулевые элементы (если условие не выполнено).

|Усло-|Описание |Отношение |Эмуляция |Код |Результат, |Исключение #I, |
|вие |условия | | |маски |если операнд|если операнд |
| | | | |i8 |NaN |qNAN/sNAN |
|Eq |Equal |xmm1== |000b |False |Нет |
| |(равно) |xmm2 | | | |
|Lt |less-than |xmm1>= |Перестанов-| |False |Да |
| |than-or- |xmm2 |ка с | | | |
| |equal | |сохране- | | | |
| |(больше | |нием, le | | | |
| |чем или | | | | | |
| |равно) | | | | | |
|Unord|Unordered |xmm1 ? |011b |True |Нет |
| |(одно из |xmm2 | | | |
| |чисел | | | | |
| |QNAN) | | | | |
| | | | | | |
|Neq |not-equal |!(xmm1== |100b |True |Нет |
| |(не равно)|xmm2) | | | |
|Nit |not-less- |!(xmm1 >| | |True |Да |
| |r-than-or-|= xmm2) |Перестанов-| | | |
| | | |ка с | | | |
| |equal (не | |сохранением| | | |
| |больше чем| |, nle | | | |
| | | | | | | |
| |или равно)| | | | | |
|Ord |Ordered |!(xmm1 |111b |False |Нет |
| |(числа |?xmm2) | | | |
| |неQNAN) | | | | |

Исключения: 1; NE: #I, #D; PM: #GP(0): 37; #NM: 3; #PF(fault-code);
#SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #VD: 17-20; #XM; VM: исключения реального режима; #PF(fault-code).

CMPSS приемник, источник, условие

CMPSS (CoMPare Scalar Single-precision float-point) — скалярное сравнение значений в формате ХММ.

Синтаксис: CMPSS rxmm1, rxmm2/m32, i8

Машинный код: 11110011:00001111:11000010:mod rxmm1 r/m: i8

Действие: для пары значений операндов приемник и источник выполняется сравнение, в результате которого формируются единичные (если условие выполнено) или нулевые элементы (если условие не выполнено). Значение источника может быть расположено в 32-битной ячейке памяти или в младшем двойном слове регистра ХММ. Значение приемника расположено в младшем двойном слове другого регистра ХММ.

Возможные значения условий приведены в описании команды CMPPS.

Исключения: NE: #I, #D; PM: #AC(0); #GP(0): 37; #NM: 3; #PF(fault- code); #SS(0): 13; #UD: 10-13; #XM; RM: #GP: 13; #NM: 3; #UD: 17-20; #ХМ;
VM: исключения реального режима; #АС(0); #PF(fault-code).

COMISS приемник, источник

COMISS (COMpare ordered Scalar Single-precision float-point COMpare and Set EFLAGS) — скалярное упорядоченное сравнение значений в формате ХММ с установкой EFLAGS.

Синтаксис: COMISS rxmm1, rxmm2/m32

Машинный код: 00001111:00101111 :mod rxmm1 r/m

Действие: команда сравнивает пару значений операндов приемник и источник, в результате чего устанавливаются флаги в регистре EFLAGS, как показано ниже.

Значение источника может быть расположено в 32-битной ячейке памяти или младшем двойном слове регистра ХММ. Значение приемника расположено в младшем двойном слове другого регистра ХММ.

|Соотношение операндов |Значение флагов |
|Приемник>источник |0F=SF=AF=ZF=PF=CF=0 |
|Приемникисточник |0F=SF=AF=ZF=PF=CF=0 |
|Приемник= источник)).

Исключения: SIMD (NE): #I (если операнд SNaN или QNaN), #D; PM:
#GP(0):
37, 42; #NM: 3; #PF(fault-code); #SS(0): 13; #UD: 10-12, 15; #XM; RM: #GP:
13, 16; #NM: 3; #UD: 17, 19, 22; #XM; VM: исключения реального режима;
#PF(fault-code).

CMPSD приемник, источник, условие

CMPSD (CoMPare Scalar Double-precision floating-point values description) — сравнение скалярных значений с плавающей точкой двойной точности.

Синтаксис: CMPSD xmm1, xmm2/m64, imm8

Машинный код: F2 0F C2 /r i8

Действие: сравнить упакованные значения с плавающей точкой двойной точности в разрядах [63-0] приемника и источника. Формирование проверяемого условия и результата выполнения команды аналогичны соответствующим атрибутам команды CMPPD.

Исключения: SIMD (NE): #I (если операнд SNaN или QNaN), #D; PM:
#GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM; #UD: 10-12, 15;
#AC(0)_cpl3; RM: #GP: 13, 16; #NM: 3; #XM; #UD: 17-19, 22; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

COMISD приемник, источник, условие

COMISD (COMpare Scalar ordered Double-precision floating-point values and set EFLAGS) — сравнение упорядоченных скалярных значений с плавающей точкой двойной точности и установка регистра EFLAGS.

Синтаксис: COMISD xmm1, xmm2/m64

Машинный код: 66 0F 2F /r

Действие: сравнить упорядоченные скалярные значения с плавающей точкой двойной точности в разрядах [63-0] приемника и источника. По результату сравнения установить флаги ZF, PF и CF в регистре EFLAGS: приемник > источник (ZF = О, PF = О, CF = 0), приемник > источник (ZF = О, PF = О, CF
= 1), приемник = источник (ZF = 1, PF = О, CF = 0), приемник и(или) источник NAN или в неопределенном формате (ZF = 1, PF = 1, CF = 1). Флаги
0F, SF и AF устанавливаются в 0. В случае генерации немаскированного исключения с плавающей точкой регистр EFLAGS не модифицируется.

Исключения: SIMD (NE): #I (если операнд SNaN или QNaN), #D; PM:
#GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM; #UD: 10-12, 15;
#AC(0)_cpl3; RM: #GP: 13; #NM: 3; #XM; #UD: 17-19, 22; VM: исключения реального режима; #PF(fault-code); #AC(0)_u.

CVTDQ2PD приемник, источник

CVTDQ2PD (ConVerT packed Doubleword Integers to Packed Double- precision floating-point values) — преобразование двух упакованных 32- битных целых в два упакованных значения с плавающей точкой двойной точности.

Синтаксис: CVTDQ2PD rxmm1, rxmm2/m64

Машинный код: F3 0F E6

Действие: алгоритм работы команды показан на рисунке ниже.

[pic]

Исключения: PM: #GP(0): 37; #SS(0): 13; #PF(fault-code); #NM: 3; #XM;
#UD:
10, 11, 12, 15; #AC(0)_cpl3; RM: #GP: 13; #NM: 3; #UD: 17-19, 22; #XM; VM: исключения реального режима; #АС: 5; #PF(fault-code); #AC(0)_u.

CVTDQ2PS приемник, источник

CVTDQ2PS (ConVerT Packed Doubleword integers to Packed Single- precision floatingpoint values) — преобразование четырех упакованных 32- битных целых со знаком в четыре упакованных значения с плавающей точкой одинарной точности.

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.