2.3.11. Другие команды

Команда

Назначение

Процессор

NOP

Отсутствие операции

BGB6

NOP - однобайтная команда (код 90h), которая не выполняет ничего, только занимает место и время. Код этой команды фактически соответствует XCHG AL,AL. Многие команды разрешается записать так, что они не будут приводить ни к каким действиям, например:

mov

ax, ax

 

байта.

xchg

ax, ax

 

2 байта.

lea

bx, [bx+0]

 

3 байта  (8Dh,  5Fh, OOh, но многие ассемблеры,

 

 

 

встретив такую команду, реально используют более

 

 

 

короткую lea bx,[bx] с кодом 8Dh 1Fh).

shl

eax,0

 

4 байта.

shrd

eax ,eax, 0

 

5 байт.

Команда

 

Назначение Процессор

LOCK

 

Префикс блокировки шины данных BGB6

На все время выполнения команды, снабженной таким префиксом, будет заб­локирована шина данных, и если в системе присутствует другой процессор, он не сможет обращаться к памяти, пока не закончится выполнение команды с префик­сом LOCK. Команда XCHG всегда выполняется автоматически с блокировкой до­ступа к памяти, даже если префикс LOCK не указан. Этот префикс можно исполь­зовать только с командами ADD, ADC, AND, ВТС, BTR, BTS, CMPXCHG, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD и XCHG.

Команда

Назначение

Процессор

UD2

Неопределенная операция

Р6

Эта команда всегда вызывает ошибку «неопределенная операция» (исключе­ние #UD). Впервые она описана как таковая для Pentium Pro, но во всех предыду­щих процессорах UD2 (код OFh OBh) не была определена и, естественно, приво­дила к такой же ошибке. Команда предназначена для тестирования программного обеспечения, в частности операционных систем, которые должны уметь коррект­но обрабатывать такую ошибку. Название команды происходит от команды UD (код OFh OFFh), которая была определена AMD для процессоров AMD К5.

Команда

Назначение

Процессор

CPUID

Идентификация процессора

BG4B6

CPUID сообщает информацию о производителе, типе и модификации процес­сора и о наличии различных расширений. Команда CPUID поддерживается Intel, начиная с процессоров Intel 80486DX/SX/DX2 SL, UMC U5S, Cyrix Ml, AMD 80486DX4. Попробуйте установить флаг ID в 1 (бит 21 в регистре EFLAGS) - если это получается, значит, команда CPUID поддерживается.

Результат работы CPUID зависит от значения регистра ЕАХ. Если ЕАХ = О, CPUID возвращает в ЕАХ максимальное значение, с которым ее можно выбывать (2 для Р6,1 для Р5), а регистры EBX:ECX:EDX содержат 12-байтную строку - иден­тификатор производителя (см. табл. 8).

Таблица в. Строки производителей в CPUID

Производитель

Строка в EBX:ECX:EDX

Intel

Genuinelntel

UMC

UMC UMC

Cyrx

Cyrixlnstead

AMD

AuthenticAMD

NexGen

NexGenDn'ven

Centaur Technology

CentaurHalls

Например, для процессоров Intel регистр ЕВХ содержит Genu (756E6547h), ЕСХ - inel (49656E69h), a EDX - ntel (6C65746Eh).

Если EAX = 1, CPUID возвращает в ЕАХ информацию о версии процессора, а в EDX - сведения о поддерживаемых расширениях. Многие понятия в этом опи­сании относятся к работе процессора в защищенном режиме и рассмотрены ниже.

Информация о версии процессора:

Биты 3-0 - модификация.

Биты 7-4 - модель.

Биты 11-8 - семейство (3 для 386,4 для 486,5 для Pentium, 6 для Pentium Pro). Биты 13-12 - тип (0 - OEM, 1 - Overdrive, 2 - Dual). Биты 31-14 — зарезервированы и равны нулю. Поддерживаемые расширения (регистр EDX):

Бит 0: FPU - процессор содержит FPU и может выполнять весь набор команд 80387.

Бит 1: VME - процессор поддерживает усовершенствованный режим V86 (флаги VIF и VIP в EFLAGS, биты VME и PVI в CRO).

Бит 2: DE - процессор поддерживает точки останова по вводу/выводу, бит DE в CRO.

Бит 3: PSE - процессор поддерживает страницы до 4 Мб, бит PSE в CR4, мо­дифицированные биты в элементах списков страниц (PDE) и таблиц стра­ниц (РТЕ).

Бит 4: TSC - процессор поддерживает команду RDTSC и бит TSC в CR4.

Бит 5: MSR - процессор поддерживает команды RDMSR и WRMSR и машин­но-специфичные регистры, совместимые с Pentium.

Бит 6: РАЕ - процессор поддерживает физические адреса больше 32 бит, до­полнительный уровень в таблицах трансляции страниц, страницы по 2 Мб и бит РАЕ в CR4. Число битов для физических адресов зависит от модели процессора. Так, Pentium Pro поддерживает 36 бит.

Бит 6: РТЕ (только для Cyrix).

Бит 7: МСЕ - процессор поддерживает бит МСЕ в CR4.

Бит 8: СХ8 - процессор поддерживает команду CMPXCHG8B.

Бит 9: APIC - процессор содержит встроенный контроллер прерываний

(APIC), активизирован и доступен.

Бит 9: PGE (только для AMD).

_Процессоры! Intel в реальном режиме

Бит 10: зарезервирован.

Бит И; SEP - процессор поддерживает быстрые системные вызовы, команды

SYSENTER и SYSEXIT (Pentium II). Бит 12: MTRR - процессор поддерживает машинно-специфичные реестры

MTRR.

Бит 13: PGE - процессор поддерживает бит PGE в CR4 и глобальные флаги в PTDE и РТЕ, указывающие элементы TLB, которые принадлежат сразу нескольким задачам.

Бит 14: МСА - процессор поддерживает машинно-специфичный регистр

MCGCAP.

Бит 15: CMOV - процессор поддерживает команды CMOVcc и (если бит О EDX установлен) FCMOVcc (Pentium Pro).

Бит 16: PAT - процессор поддерживает таблицу атрибутов страниц.

Биты 17-22: зарезервированы.

Бит 23: ММХ - процессор поддерживает набор команд ММХ.

Бит 24: FXSR - процессор поддерживает команды быстрого чтения/записи

(ММХ2).

Бит 25: SSE - процессор поддерживает расширения SSE (Pentium III).

Биты 31-26: зарезервированы.

Если ЕАХ   2, CPUID на процессорах семейства Р6 возвращает в регистрах

ЕАХ, ЕВХ, ЕСХ и EDX информацию о кэшах и TLB. Самый младший байт ЕАХ (регистр AL) определяет, сколько раз надо вызвать CPUID с ЕАХ = 2, чтобы полу­чить информацию обо всех кэшах (1 для Pentium Pro и Pentium II). Самый старший бит (бит 31) каждого регистра указывает, содержит ли этот регистр правильную ин­формацию (бит 31=0) или он зарезервирован (бит 31 = 1). В первом случае регистр содержит информацию в 1-байтных дескрипторах со следующими значениями: 00h - пустой дескриптор;

Olh - TLB команд, 4-килобайтные страницы, 4-сторонняя ассоциативность, 32 элемента;

02h - TLB команд, 4-мегабайтные страницы, 4-сторонняя ассоциативность, 4 элемента;

03h - TLB данных, 4-килобайтные страницы, 4-сторонняя ассоциативность, 64 элемента;

04h - TLB данных, 4-мегабайтные страницы, 4-сторонняя ассоциативность,

8 элементов;

061т - кэш команд, 8 Кб, 4-сторонняя ассоциативность, 32 байта в строке; 081т - кэш команд, 16 Кб, 4-сторонняя ассоциативность, 32 байта в строке; ' OAh- кэш данных, 8 Кб, 2-сторонняя ассоциативность, 32 байта в строке; ОСЬ - кэш данных, 16 Кб, 2-сторонняя ассоциативность, 32 байта в строке; 4lh - унифицированный кэш, 128 Кб, 4-сторонняя ассоциативность, 32 байта в строке;

42h - унифицированный кэш, 256 Кб, 4-сторонняя ассоциативность, 32 байта в строке; '

43h - унифицированный кэш, 512 Кб, 4-сторонняя ассоциативность, 32 байта в строке;

Числа с плавающей запятой ,

• yggg лі нш і

44h - унифицированный кэш, 1 Мб, 4-сторонняя ассоциативность, 32 байта в строке.

Совместимые с Intel процессоры AMD и Cyrix поддерживают вызов «расши­ренных функций» CPUID со значениями ЕАХ, в которых самый старший бит всегда установлен в 1.

ЕАХ = 80000000b: возвращает в ЕАХ максимальный номер расширенной фун­кции CPUID, поддерживаемой данным процессором.

ЕАХ = 80000001b: возвращает в ЕАХ 051Xh для AMD К5 (X - номер модифи­кации) или 061Xh для AMD Кб. В EDX эта функция возвращает информацию о поддерживаемых расширениях (указаны только флаги, отличающиеся от

CPUID с ЕАХ = 1).

Бит 5: MSR — процессор поддерживает машинно-специфичные регистры, со­вместимые с К5.

Бит 10: процессор поддерживает команды SYSCALL и SYSRET.

Бит     процессор поддерживает команды FCMOVcc.

Бит 24: процессор поддерживает ММХ с расширениями от Cyrix. ' Бит 25: процессор поддерживает набор команд AMD 3D.

ЕАХ - 80000002h, 800000031т и 800000041т - последовательный вызов CPUID с этими значениями в ЕАХ возвращает в EAX:EBX:ECX:EDX последовательно четыре 16-байтные части строки - имени процессора. Например: AMD-K5(tm) Processor.

ЕАХ = 80000005b - команда возвращает информацию о TLB в регистре ЕВХ (старшее слово — TLB данных, младшее слово — TLB команд, старший байт — ас­социативность, младший байт - число элементов), о кэше данных в регистре ЕСХ и о кэше команд в регистре EDX (биты 31-24 - размер в килобайтах, биты 23-16 -

ассоциативность, биты 15-8 - число линий на тэг, биты 7-0 - число байтов на линию).