Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методички по ассемблеру / Методичка_часть1 Архитектура Вычислительных Систем-Новиков.doc
Скачиваний:
88
Добавлен:
02.05.2014
Размер:
1.31 Mб
Скачать

2.3.10. Загрузка сегментных регистров

 Команда:

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

 Назначение:

Загрузить адрес, используя DS

 Процессор:

8086

 Команда:

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

 Назначение:

Загрузить адрес, используя ES

 Процессор:

8086

 Команда:

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

 Назначение:

Загрузить адрес, используя FS

 Процессор:

80386

 Команда:

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

 Назначение:

Загрузить адрес, используя GS

 Процессор:

80386

 Команда:

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

 Назначение:

Загрузить адрес, используя SS

 Процессор:

8086

Второй операнд (источник) для всех этих команд — переменная в памяти размером в 32 или 48 бит (в зависимости от разрядности операндов). Первые 16 бит из этой переменной загружаются в соответствующий сегментный регистр (DS для LDS, ES для LES и т.д.), а следующие 16 или 32 — в регистр общего назначения, указанный в качестве первого операнда. В защищенном режиме значение, загружаемое в сегментный регистр, всегда должно быть правильным селектором сегмента (в реальном режиме любое число может использоваться как селектор).

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

 Команда:

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 — число байт на линию.