Assembler - язык неограниченных возможностей

         

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




  • Команда:
  • NOP
  • Назначение:
  • Отсутствие операции
  • Процессор:
  • 8086

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

    mov ax,ax ; 2 байта xchg ax,ax ; 2 байта lea bx,[bx+0] ; 3 байта (8Dh, 5Fh, 00h, но многие ; ассемблеры, встретив такую команду, ; реально используют более короткую команду ; lea bx,[bx] с кодом 8Dh 1Fh) shl eax,0 ; 4 байта shrd еах,еах,0 ; 5 байт

  • Префикс:
  • LOCK
  • Назначение:
  • Префикс блокировки шины данных
  • Процессор:
  • 8086

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

  • Команда:
  • UD2
  • Назначение:
  • Неопределенная операция
  • Процессор:
  • P6

    Эта команда всегда вызывает ошибку «неопределенная операция» (исключение #UD). Впервые она описана как таковая для Pentium Pro, но во всех предыдущих процессорах эта команда (код 0Fh 0Bh) не была определена и, естественно, приводила к такой же ошибке. UD2 предназначена для тестирования программного обеспечения, в частности операционных систем, которые должны уметь корректно обрабатывать такую ошибку. Название команды происходит от команды UD (код 0Fh 0FFh), которая была определена AMD для процессоров AMD K5.

  • Команда:
  • CPUID
  • Назначение:
  • Идентификация процессора
  • Процессор:
  • 80486

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


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

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

    Производитель Строка в ЕВХ:ЕСХ:ЕРХ
    Intel GenuineIntel
    UMC UMC UMC UMC
    Cyrix CyrixInstead
    AMD AuthenticAMD
    NexGen NexGenDriven
    Centaur Technology CentaurHalls
    Например, для процессоров Intel регистр ЕВХ содержит «Genu» (756E6547h), ЕСХ содержит «ineI» (49656E69h), a EDX — «ntel» (6C65746Eh).

    Если ЕАХ = 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 ЕАХ зарезервированы и равны нулю.

    Бит 0 EDX — «FPU» Процессор содержит FPU и может выполнять весь набор команд 80387.

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

    Бит 2 EDX — «DE» Процессор поддерживает точки останова по вводу/выводу, бит DE в CR0.

    Бит 3 EDX — «PSE» Процессор поддерживает страницы до 4 Мб, бит PSE в CR4, модифицированные биты в элементах списков страниц (РDЕ) и таблиц страниц (РТЕ).

    Бит 4 EDX — «TSC» Процессор поддерживает команду RDTSC и бит TSC в CR4.



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

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

    Бит 6 EDX — «РТЕ» (только для Cyrix).

    Бит 7 EDX — «МСЕ» Процессор поддерживает бит МСЕ в CR4.

    Бит 8 EDX — «СХ8» Процессор поддерживает команду CMPXCHG8B.

    Бит 9 EDX — «APIC» Процессор содержит встроенный контроллер прерываний (APIC), и он активирован и доступен.

    Бит 9 EDX — «PGE» (только для AMD).

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

    Бит 11 EDX — «SEP» Процессор поддерживает быстрые системные вызовы, команды SYSENTER и SYSEXIT (Pentium II).

    Бит 12 EDX — «MTRR» Процессор поддерживает машинно-специфичные регистры MTRR.

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

    Бит 14 EDX — «МСА» Процессор поддерживает машинно-специфичный регистр MCG_CAP.

    Бит 15 EDX — «CMOV» Процессор поддерживает команды CMOVcc и (если бит 0 EDX установлен) FCMOVcc (Pentium Pro).

    Бит 16 EDX — «PAT» Процессор поддерживает таблицу атрибутов страниц.

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

    Бит 23 EDX — «ММХ» Процессор поддерживает набор команд ММХ.

    Бит 24 EDX — «FXSR» Процессор поддерживает команды быстрого чтения/записи (ММХ2).

    Биты 31 – 25 EDX зарезервированы.



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

    00h — Пустой дескриптор.

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

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

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

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

    06h — Кэш команд, 8 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

    08h — Кэш команд, 16 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

    0Ah — Кэш данных, 8 Кб, 2-сторонняя ассоциативность, 32 байта в строке.

    0Ch — Кэш данных, 16 Кб, 2-сторонняя ассоциативность, 32 байта в строке.

    41h — Унифицированный кэш, 128 Кб, 4-сторонняя ассоциативность, 32 байта в строке.

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

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

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

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

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



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

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

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

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

    Бит 24 EDX — Процессор поддерживает ММХ с расширениями от Cyrix.

    Бит 25 EDX — Процессор поддерживает набор команд AMD 3D.

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

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


    Содержание раздела