logo

Воскресенье 21 Октябрь 2018 (GMT+0300)

Главная Система команд x86 Базовая система команд CPU CPUID

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

CPUID

Идентификация CPU

Влияние команды на флаги и форматы команды:

OF

DF

IF

TF

SF

ZF

AF

PF

CF

                 

 

Код

Команда

Описание

Проц.

Пример

0F A2

CPUID

Идентификация CPU

Pentium

cpuid

Описание:

Команда CPUID впервые была введена в процессоре Pentium, она предназначена для считывания программным обеспечением информации о продавце, семействе, модели и поколении процессора, а также специфической для процессора дополнительной информации (поддерживаемые наборы команд, размеры буферов, кэшей, разнообразные расширения архитектуры и т.п.).

Перед выполнением команды CPUID в регистр EAX должно помещаться входное значение, которое и указывает — какую информацию необходимо выдать. Для разных моделей процессоров задокументированы различные наборы допустимых входных значений в регистре EAX перед выполнением команды CPUID. В общем случае их можно разделить на стандартные (поддерживаемые всеми производителями) и расширенные (так или иначе отличающиеся для процессоров разных моделей и производителей).

 

Стандартные функции

 

Входное значение EAX = 0

При входном значении EAX = 0, после выполнения команды CPUID регистр EAX будет содержать максимальное значение, понимаемое командой CPUID (при запросе стандартных функций), а в регистрах EBXEDX и ECX будет находится строка идентификации производителя процессора (EBX содержит первых 4 символа, EDX содержит следующие 4 символа и ECX содержит последние 4 символа). В таблице 6.33. приведены значения, выдаваемые наиболее распространенными моделями микропроцессоров.

 

Таблица 6.33. Строки идентификации, возвращаемые процессорами различных производителей

 

Содержимое регистров после выполнения команды CPUID (EAX = 0)

Тип процессора (производитель)

EAX

EBX : EDX : ECX

486SL … Pentium III Xeon (Intel)

x

GenuineIntel (756E6547h : 49656E69h : 6C65746Eh)

Pentium 4, Pentium 4D, Pentium 4E, Xeon, Core i3, i5, i7, Core 2 Duo (Intel)

x

GenuineIntel

Atom, Celeron, Celeron M (Intel)

x

GenuineIntel

6x86, 6x86L (Cyrix)

1 (01h)

CyrixInstead (69727943h : 736E4978h : 64616574h)

6x86MX (Cyrix)

1 (01h)

CyrixInstead

MediaGX (Cyrix)

1 (01h)

CyrixInstead

MediaGX MMX Enhansed (Cyrix)

2 (02h)

CyrixInstead

WinChip 2, 2A, 2B, C6 (IDT)

1 (01h)

CentaurHauls (746E6543h : 48727561h :736C7561h)

VIA Eden, Eden-N, Eden ESP, Eden ULV, Cyrix III, C3, C3-M, C7, C7-M, C7-D, CoreFusion (VIA)

1 (01h)

CentaurHauls

VIA nano, nano-M, nano X2, Eden X2, QuadCore (VIA)

10 (0Ah)

CentaurHauls

VIA Eden X4 (VIA)

13 (0Dh)

CentaurHauls

Am486, Am5x86, AMD K5, AMD K6, AMD K6-2, AMD K6-2+, AMD K6-III, AMD K6-III+, AMD K-7,  AMD Athlon, AMD Athlon XP, Duron, AMD Athlon 64, DualCore AMD Athlon 64 X2, AMD Opteron, 2x AMD Opteron, DualCore AMD Opteron, AMD Sempron, AMD K-8, AMD Turion, DualCore AMD Turion (AMD)

1 (01h)

AuthenticAMD (68747541h : 444D4163h : 69746E65h)

2x DualCore AMD Opteron, QuadCore AMD Phenom, DualCore AMD Phenom II X2,  TripleCore AMD Phenom II X3, QuadCore AMD Phenom II X4, QuadCore AMD Phenom II TWKR, AMD Propus, AMD Athlon II X4, DualCore AMD Athlon II X2, AMD Sempron, 2x HexaCore AMD Opteron, 2x DodecaCore AMD Opteron (AMD)

5 (05h)

AuthenticAMD

HexaCore AMD Phenom II X6, Mobile DualCore AMD E2, QuadCore AMD A8, DualCore AMD Bobcat, DualCore AMD C-50, DualCore AMD G-T56N, DualCore AMD E-xxx (AMD)

6 (06h)

AuthenticAMD

QuadCore AMD Bulldozer, QuadCore AMD FX, OctalCore AMD FX, HexaCore AMD FX,  2x 16-Core AMD Opteron, QuadCore AMD A10, QuadCore AMD A8, QuadCore AMD A12, DualCore AMD A9, QuadCore AMD A4, QuadCore AMD Athlon, QuadCore AMD Temash, DualCore AMD GX, QuadCore AMD A6, Summit Ridge A stepping, OctalCore AMD Ryzen 7, QuadCore AMD Ryzen 5, 12-Core AMD Ryzen, 16-Core AMD Ryzen, 32-Core AMD EPYC (AMD)

13 (0Dh)

AuthenticAMD

RDC IAD 100 (RDC Semiconductor)

1 (01h)

(756E6547h : 20656E69h : 43445220h)

SiS550 (SiS)

 1 (01h)

SiS SiS SiS (20536953h : 20536953h : 20536953h)

Nx586 (NexGen)

 1 (01h)

NexGenDriven (4778654Eh : 72446E65h : 6E657669h)

Transmeta Crusoe, Transmeta Efficeon (Transmeta)

 3 (03h)

GenuineTMx86 (756E6547h : 54656E69h : 3638784Dh)

Rise mP6, Rise mP6-II (Rise)

1 (01h) 

RiseRiseRise (65736952h : 65736952h : 65736952h)

(UMC)

 

UMC UMC UMC (20434D55h : 20434D55h : 20434D55h)

Geode GX1, GXLV, GXm (National Semiconductor)

 2 (02h)

Geode by NSC (646F6547h : 79622065h : 43534E20h)

Geode GX2 (National Semiconductor)

 1 (01h)

Geode by NSC

Vortex86 (DM&P Electronics)

 1 (01h)

Vortex86 SoC (74726F56h : 36387865h : 436F5320h)

 

Входное значение EAX = 1

После выполнения команды CPUID со входным значением 1, регистр EAX будет содержать следующую информацию (т.н. сигнатура процессора):

  • EAX[3:0] — (Stepping) номер разработки микропроцессора;
  • EAX[7:4] — (Model) модель микропроцессора,
  • EAX[11:8] — (Family) номер семейства микропроцессора
  • EAX[13:12] — (Type) тип микропроцессора (00b – стандартный, 01b – OverDrive, 10b – Dual), процессоры Pentium OverDrive for Pentium возвращают 00b в поле тип;
  • EAX[31:14] — зарезирвировано.

Регистры EBX и ECX зарезервированы.

В регистре EDX будет содержаться информация о некоторых свойствах и возможностях микропроцессора. Установленный флаг свойств указывает на то, что соответствующее свойство (возможность, функция) данной моделью микропроцессора поддерживается. Информация о свойствах определена следующим образом:

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

В таблице 6.34. представлена информация о содержимом регистров некоторых наиболее распространенных моделей микропроцессоров после выполнения команды CPUID с входным EAX = 1.

 

Таблица 6.34



Тип процессора

EAX[11:8] Family

EAX[7:4] Model

EAX[3:0] Stepping

EDX Feature Flags

Intel486SL

4

4

x

н/д

Intel WB Enhansed 486DX2

4

7

x

н/д

Intel 486DX4

4

8

x

н/д

Pentium (60, 66)

5

1

x

н/д

Pentium (75…200)

5

2

x

н/д

Pentium MMX (166, 200)

5

4

x

н/д

PentiumPro

6

1

x

н/д

Pentium II (Model 3)

6

3

x

н/д

Pentium II Xeon (Model 5)

6

5

x

н/д

Intel Celeron (Model 5)

6

5

x

н/д

Intel Celeron (Model 6)

6

6

x

н/д

Pentium III

6

7

x

н/д

Pentium III Xeon

6

7

x

н/д

6x86(L) (Cyrix)

5

2

x

00000105h

6x86MX (Cyrix)

6

0

x

0080A13Dh

MediaGX (Cyrix)

4

4

x

00000001h

MediaGX MMX Enhansed (Cyrix)

5

4

x

00808131h

WinChip 2 (IDT)

5

8

x

008000B5h

Am486 (AMD)

4

x

x

00000001h

Am5x86 (AMD)

4

x

x

00000001h

AMD-K5 (Model 0) (AMD)

5

0

x

000003BFh

AMD-K5 (Model 1) (AMD)

5

1

x

000021BFh

AMD-K5 (Model 2) (AMD)

5

2

x

000021BFh

AMD-K5 (Model 3) (AMD)

5

3

x

000021BFh

н/д — не документировано. Производители выпускали и выпускают

          многие процессоры с различной функциональностью (в разных

          корпусах, по разным технологиям и т.п.). Соответственно, в

          процессорах одного наименования и производителя одни и те же

          функции могут и поддерживаться и не поддерживаться.

 

Входное значение EAX = 2

Команда CPUID со входным значением EAX = 2 предназначена для получения информации об объеме и типе КЭШ памяти микропроцессора. После выполнения этой команды в регистрах EAX, EBX, EDX, ECX содержится соответствующая информация, причем, в младших 8-ми битах регистра EAX (регистр AL) содержится число, указывающее на то, сколько раз подряд необходимо выполнить команду CPUID со входным EAX = 2, чтобы получить достоверную информацию о микропроцессоре (в случае AL = 1, команда должна выполняться однократно).

Самый старший бит в каждом 32-битном регистре указывает на то, содержит ли данный регистр информацию (бит 31 = 0) или зарезирвирован (бит 31 = 1). Все байты незарезирвированных регистров (EAX, EBX, EDX, ECX) содержат т.н. дескрипторы, которые описывают всю, имеющуюся в микропроцессоре КЭШ память. Значения этих дескрипторов расшифровываются по таблице 6.35.

 

Таблица 6.35. Рашифровка значений дескрипторов, возвращаемых командой CPUID в регистрах EAX, EBX, EDX, ECX

 

Значение дескриптора

Описание

00h

Нуль-дескриптор (без значения)

01h

TLB команд, 4К страницы: 4-направленный ассоциативный, 32 элемента

02h

TLB команд, 4М страницы: полностью ассоциативный, 2 элемента

03h

TLB данных, 4К страницы: 4-направленный ассоциативный, 64 элемента

04h

TLB данных, 4М страницы: 4-направленный ассоциативный, 8 элементов

06h

КЭШ команд: размер 8К,4-направленный ассоциативный, длина строки 32 байта

0Ah

КЭШ данных: размер 8К,2-направленный ассоциативный, длина строки 32 байта

0Ch

КЭШ данных: размер 16К,4-направленный ассоциативный, длина строки 32 байта

40h

Нет интегрированного КЭШа второго уровня (L2 cache)

41h

Объединенный КЭШ: размер 128К, 4-направленный ассоциативный, длина строки 32 байта

42h

Объединенный КЭШ: размер 256К, 4-направленный ассоциативный, длина строки 32 байта

43h

Объединенный КЭШ: размер 512К, 4-направленный ассоциативный, длина строки 32 байта

44h

Объединенный КЭШ: размер 1М, 4-направленный ассоциативный, длина строки 32 байта

45h

Объединенный КЭШ: размер 2М, 4-направленный ассоциативный, длина строки 32 байта

 

Например, процессор Pentium Pro с КЭШ второго уровня 256К возвращает следующие значения в регистрах: EAX = 03020101h, EBX = 00000000h, ECX = 00000000h, EDX = 06040A42h; а процессор Pentium II (Model 3) с КЭШ второго уровня 512К — EAX = 03020101h, EBX = 00000000h, ECX = 00000000h, EDX = 0C040843h.

 

Входное значение EAX = 3

Команда CPUID со входным значением EAX = 3 — одно из последних нововведений Intel. Она предназначена для чтения т.н. идентификационного номера микропроцессора — уникального 96-разрядного номера, который может использоваться программным обеспечением, например, для авторизации доступа к каким-либо ресурсам, идентификации пользователя и т.п. После выполнения этой команды регистр ECX содержит младшие 32 бита идентификационного номера, а регистр EDX — средние 32 бита. Старшие 32 бита идентификационного номера — это данные, выдаваемые в регистре EAX командой CPUID с входным EDX = 1. Стандартная форма записи идентификационного номера, определяемая фирмой Intel, выглядит следующим образом: XXXX-XXXX-XXXX-XXXX-XXXX-XXXX (где X – шестнадцатиричная цифра, запись в верхнем регистре).

 

Входное значение EAX > 3

Все функции с входным значением в EAX большим, чем 3, но меньшим, чем выдаваемое функцией с EAX = 0 предельное значение, относятся к специфическим функциям модели, в типовой технической документации не описаны и могут меняться от процессора к процессору.

 

Нестандартные функции

 

Для некоторых процессоров-клонов (AMD, Cyrix, IDT…) определены т.н. нестандартные (расширенные) функции команды CPUID. Они вызываются при входных значениях в EAX больших 7FFF_FFFFh. Полное описание этих функций вы сможете найти в технических руководствах фирм-производителей по конкретным процессорам. Здесь приводятся лишь некоторые наиболее важные.

 

Входное значение EAX = 80000000h

Функция может быть вызвана только после идентификации производителя процессора. После ее выполнения в регистре EAX будет содержаться максимальное входное значение EAX для поддерживаемых расширенных (нестандартных) функций. В таблице даны результаты выполнения данной команды на некоторых процессорах.

 

Таблица 6.36. Содержимое регистров после выполнения команды CPUID с EAX = 80000000h

Тип процессора

EAX

MediaGX MMX Enhansed (Cyrix)

800000005h

WinChip 2 (IDT)

800000005h

Am486 (AMD)

800000000h

Am5x86 (AMD)

800000000h

AMD-K5 (Model 0) (AMD)

800000000h

AMD-K5 (Model 1) (AMD)

800000005h

AMD-K5 (Model 2) (AMD)

800000005h

AMD-K5 (Model 3) (AMD)

800000005h

AMD-K6 (AMD)

800000005h

AMD-K6-2 (AMD)

800000005h

AMD-K6-3 (AMD)

800000005h

 

Входное значение EAX = 80000001h

Результат выполнения данной команды практически идентичен команде CPUID с входным значением EAX = 1. Разница заключается в том, что в этом случае в регистре EDX содержится т.н. расширенная информация о свойствах (Extended Feature Flags). Помимо стандартной информации, здесь содержатся данные о наличии у процессора самых разнообразных специальных возможностей, которые не являются стандартными для процессоров Intel (например, поддержка команд 3DNow!).

У микропроцессоров разных производителей расширенная информация о свойствах, выдаваемая в регистре EDX после выполнения CPUID c входным EAX = 80000001h, определяется по разному. Для точной идентификации всех выдаваемых значений обратитесь к фирменной документации на конкретный тип микропроцессора. Для прикладного программирования имеет значение только один бит — бит, показывающий наличие поддержки 3DNow! команд. Согласно установленному фирмой AMD стандарту этот бит помещается в EDX[31] (0 – 3DNow! не поддерживается, 1 – 3DNow! поддерживается).

 

Входное значение EAX = 80000002h, 80000003h, 80000004h

Команда CPUID с указанными входными значениями в EAX выдает последовательно в регистрах EAX, EBX, ECX, EDX 48-ми значную ASCII строку, содержащую полное наименование процессора. Эта строка обычно используется BIOS для вывода на экран ПК при начальной загрузке.

 

Входное значение EAX = 80000005h

Данная команда предназначена для получения информации о TLB и КЭШе процессора (выдается в регистрах EBX, ECX, EDX).

Операция:

switch (EAX)

   case 0: (* EAX = 0 *)

      EAX = hv; (* hv = 2 для процессора Pentium II *)

      (* hv - это максимально возможное входное значение, которое распознается командой CPUID *)

      EBX = Строка идентификации продавца;

      EDX = Строка идентификации продавца;

      ECX = Строка идентификации продавца;

      break;

   case 1: (* EAX = 1 *)

      EAX[3:0] = Номер поколения;

      EAX[7:4] = Модель;

      EAX[11:8] = Семейство;

      EAX[13:12] = Тип;

      EAX[31:14] = Зарезервировано;

      EBX = Зарезервирован; (* 0 *)

      ECX = Зарезервирован; (* 0 *)

      EDX = Флаги особенностей;

      break;

   case 2: (* EAX = 2 *)

      EAX = Данные о КЭШ и TLB;

      EBX = Данные о КЭШ и TLB;

      ECX = Данные о КЭШ и TLB;

      EDX = Данные о КЭШ и TLB;

      break;

   case 3: (* EAX = 3 *)

      ECX = младшие 32 бита идентификационного номера CPU;

      EDX = средние 32 бита идентификационного номера CPU;

      break;

   default: (* EAX > hv *)

      EAX = Зарезервирован; (* Неопределен *)

      EBX = Зарезервирован; (* Неопределен *)

      ECX = Зарезервирован; (* Неопределен *)

      EDX = Зарезервирован; (* Неопределен *)

      break;

end-of-switch

Особые ситуации защищенного режима:

Нет.

Особые ситуации режима реальной адресации:

Нет.

Особые ситуации режима V86:

Нет.

Замечание:

До появления процессора Pentium для программного обеспечения существовала определенная проблема в определении того, под управлением какого процессора и с какими возможностями идет выполнение программы. В зависимости же от модели процессора разработчикам программного обеспечения хотелось использовать разные алгоритмы вычислений, "заточенные" именно на характеристики и поддерживаемые команды конкретного процессора.

Например, следующим образом можно отличить процессоры 8086/88 от Intel286 и более поздних:

pushf          ; запись в стек значения регистра FLAGS 

pop AX         ; загрузка в регистр AX значения FLAGSиз стека

mov CX, AX     ; сохраняем исходное значение FLAGS 

and AX, 0fffh  ; очистка битов 12-15 в регистре FLAGS 

push AX        ; запись в стек нового значения FLAGS

popf           ; загрузка из стека измененного значения в регистр FLAGS

pushf          ; повторное сохранение в стек значения регистра FLAGS 

pop AX         ; загрузка нового значения FLAGS в регистр AX 

and AX, 0f000h ; если биты 12-15 нового значения установлены, то
cmp AX, 0f000h ; процессор типа 8086/8088 или 80186/88
je cpu_8086    ; переход, если процессор 8086/8088 или 80186/88
...            ; дальнейшее уточнение типа процессора

Для отличия процессоров 8086/88 от Intel286 и более поздних используется также и другой алгоритм, который основан на ошибке, присутствовавшей в микрокоде процессоров 8086/88 и 80186/88. Эти процессоры при выполнении команды PUSH SP сперва уменьшали на 2 указатель стека, а уже потом сохраняли его значение в стеке. В более поздних моделях процессоров эта ошибка была устранена. Пример идентификации, основанный на этом свойстве приведен ниже:

push SP        ; сохраняем указатель стека
pop AX         ; считываем сохраненное значение в регистр AX
cmp AX, SP     ; сравниваем значение, взятое из стека, со значением SP

jne cpu_8086   ; переход, если процессор 8086/8088 или 80186/88

...            ; дальнейшее уточнение типа процессора


Предложенный алгоритм, однако, не позволяет различать процессоры 8086/88 и 80186/88. Чтобы идентифицировать процессоры 80186/88 можно использовать особенности исполнения команд циклического сдвига. Эти команды в качестве входного операнда используют значение в регистре CL. Для ускорения вычислений в процессорах, начиная с 80186/88 старшие разряды этого операнда маскируются так, что значащими являются только младшие 5 разрядов. То есть самым большим допустимым значением для числа сдвигов является значение 31. В процессорах 8086/8088 такого ограничения нет. Алгоритм идентификации, основанный на описанном свойстве, выглядит следующим образом.

mov AX, 0ffffh ; помещаем в регистр AX исходное значение для сдвига
mov CL, 32     ; используем 32 как заданное число требуемых сдвигов
shl AX, CL     ; проверяем, равен ли результат сдвига нулю

jz cpu_8086    ; переход, если процессор 8086/8088
...            ; дальнейшее уточнение типа процессора

Для идентификации различных процессоров-клонов из семейств 8086/88 и 80186/88 существуют различные дополнительные методики, основанные на специфике исполнения этими процессорами некоторых команд (см., например, замечания к командам MUL, AAD, AAM). Чтобы идентифицировать процессоры Intel286 и старше можно использовать следующий код.

...; процессор Intel386 или старше
pushfd
pop eax
mov edx, eax
xor eax, 00240000h ; flip bits 18 (AC) and 21 (ID)
push eax
popfd
pushfd
pop eax
xor eax, edx ; check if both bits didn't toggle
jz _is_80386
shr eax, 19 ; check if only bit 18 toggled
jz _is_80486_without_CPUID

На практике самым надежным способом определения типа процессора программным обеспечением, начиная с процессора Intel186, является выполнение специфических команд с целью генерации особой ситуации Неопределенный код операции (#UD) и выявление таким образом характерных поддерживаемых и неподдерживаемых команд с последующей идентификацией модели процессора по матрице соответствия. Тем не менее, по прошествии многих лет старые методологии ушли в прошлое и основным способом идентификации стала именно команда CPUID.

Для того, чтобы узнать — поддерживается ли команда CPUID конкретной моделью процессора, программное обеспечение должно проверить флаг 21 (ID) регистра EFLAGS. Если в программе можно установить и сбросить этот флаг, значит команда CPUID данным процессором поддерживается. В противном случае, выполнение данной команды может вызвать особую ситуацию #UD (Неопределенный код операции). Ниже приведен пример программы, определяющей поддержку команды CPUID.

 

pushfd             ; EFLAGS копировать в стек

pop eax            ; выбрать в EAX содержимое стека

mov ebx, eax    ; сохранить выбранное значение флагов

xor eax, 200000h   ; изменить бит 21 в выбранном значении флагов

push eax           ; поместить новое значение флагов в стек

popfd              ; выбрать в EFLAGS из стека новые значения флагов

pushfd             ; EFLAGS копировать в стек

pop eax            ; выбрать в EAX содержимое стека

xor eax, ebx    ; сравнить считанное новое значение флагов с сохраненным ранее

je no_cpuid        ; переход, eсли бит 21 не изменился

 

Следующим обязательным шагом должна быть команда CPUID со входным занчением EAX = 0, позволяющая определить — какие входные значения поддерживает данный процессор. Помимо этого, интерпретация битов поддерживаемых свойств в регистре EDX (при входном значении EAX = 1) должна производиться только после анализа информации о производителе и модели микропроцессора, т.к. существуют некоторые отличия как по количеству, так и по назначению некоторых битов в разных моделях процессоров.

Использование информации, выдаваемой командой CPUID с входным EAX = 1 в прикладных задачах необходимо, например, для определения поддержки команд MMX. Это может быть сделано следующим образом.

 

mov eax,1          ; установка входного значения EAX=1

CPUID              ; выполнение функции

test edx, 800000   ; проверка 23-го бита

jnz YES_MM         ; переход, если MMX поддерживается

 

Аналогично, но с использованием расширенной функции CPUID, определяется поддержка 3DNow! команд в процессорах AMD (K6) и IDT (WinChip 2).

 

...

[проверка поддержки CPUID]

[проверка поддержки расширенных

функций – CPUID (EAX = 80000000h)]

...

mov eax,80000001h    ; установка входного значения EAX=8000_0001h

CPUID                ; выполнение расширенной функции

test edx,80000000h   ; проверка 31-го бита

jnz YES_3DNow!       ; переход, если 3DNow! поддерживается

 

Значения выдаваемые командой CPUID очень важны для правильного программирования систем. Попытка использования неподдерживаемых конкретным микропроцессором свойств и команд может привести к самым разнообразным исключительным ситуациям и во многих случаях реакция микропроцессора вообще не предсказуема.

Во мнигих микропроцессорах некоторые свойства и функции могут быть программно отключены путем программирования специальных регистров модели (MSR), которые для каждого микропроцессора различны (см. технические описания для каждой конкретной модели). В этом случае результат действия стандартных функций команды CPUID также изменяется — процессор индицирует поддержку только включенных функций. Более того, в некоторых процессорах можно программно отключить поддержку самой команды CPUID. Тогда, при попытке ее выполнения, будет генерироваться особая ситуация #UD (Неопределенный код операции).

 


Входит в группу команд: Базовая система команд CPU




Все права защищены © Алексей Ровдо, 1994-2018. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Яндекс.Метрика               Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники