Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5_Система команд.doc
Скачиваний:
2
Добавлен:
26.11.2019
Размер:
328.19 Кб
Скачать

5. Лекция. Система команд процессоров IA-32 Pentium

  1. Система команд процессоров IA-32 Pentium

    1. Регистры и адресация

      1. Структура регистров процессоров IA-32

    2. Команды и последовательности команд

      1. Нотация для описания операций с регистрами

      2. Нотация языка ассемблера

      3. Базовые типы команд

      4. Выполнение команд и линейный код

      5. Ветвление

      6. Флаги кодов условий регистра состояния

    3. Режимы адресации

    4. Команды IA-32

      1. Программа для сложения чисел

      2. Формат машинных команд

      3. Однобайтовые команды

      4. Кодировка непосредственной адресации

      5. Режимы адресации и поля смещения

Все процессоры корпорации Intel имеют общее название Intel Architecture (IA). Мы с вами рассмотрим лишь процессоры IA, которые работают с 32-разрядными адресами памяти и 32-разрядными данными. Общее название процессоров этого семейства IA-32, а самые последние их представители носят имя Pentium. Пер­вый процессор архитектуры IA-32 — процессор 80386 — увидел свет в 1985 году. После этого были созданы процессоры 80486 (1989), Pentium (1993), Pentium Pro (1995), Pentium II (1997), Pentium III (1999) и Pentium 4 (2000). Каждый новый процессор обладал более высокой производительностью, что достигалось за счет множества архитектурных усовершенствований и новых решений в микроэлек­тронной технологии. Последние его члены поддерживают специализированные команды для управле­ния мультимедийной графической информацией и обработки векторных данных. Набор команд процессоров IA-32 очень большой, по­этому придется ограничиться рассмотрением самых основных команд и режимов адресации, а полную информацию об архитектуре системы команд процессоров IA-32 и их языке ассемблера вы найдете на web-узле Intel, который находится по адресу http://www.intel.com.

5.1. Регистры и адресация

В архитектуре процессоров IA-32 память адресуется побайтово при помощи 32-разрядных адресов, а команды работают с операндами размером 8 и 32 разря­да. Эти два размера операндов, согласно терминологии Intel, называются байтом и двойным словом. В первых моделях процессоров Intel 16-разрядный операнд назывался словом. Для хранения информации используется прямой порядок байтов, описанный в разделе 4.2. Многобайтные операнды могут начинаться по любым адресам. Выравниваться как-либо в памяти они не должны.

Структура регистров процессоров IA-32

Регистры процессора IA-32 показаны на рис. 5.1., Обычно восемь 32-разрядных регистров с именами от R0 до R7 являются регистрами общего назначения и ис­пользуются для хранения операндов-данных или адресной информации. Кроме то­го, имеется восемь регистров с плавающей запятой для хранения операндов-дан­ных, имеющих размер двойного или четверного (64 разряда) слова. Регистры с плавающей запятой содержат поле расширения (на рис. 5.1. не показано), с уче­том которого их длина составляет 80 бит. Дополнительные биты используются для увеличения точности при обработке процессором чисел с плавающей запя­той. Архитектура IA-32 основана на модели памяти, в которой различные области памяти, называемые сегментами, имеют разное назначение. Сегмент кода содер­жит команды программы, сегмент стека — стек процессора, а четыре сегмента дан­ных предназначены для хранения операндов-данных. В шести сегментных регист­рах хранятся значения селекторов, используемые для идентификации указанных сегментов в адресном пространстве памяти. О назначении этих регистров мы по­говорим в разделе 9.6, где будет обсуждаться семейство IA-32. Пока же такого рода информация нам не нужна. 32-разрядные адреса в архитектуре IA-32 часто при­меняются для доступа к тем областям памяти, в которых располагается сама про­грамма, стек процессора и области данных.

0

NT

IOPL

OF

DF

IF

TF

SF

ZF

0

AF

O

PF

1

CF

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

Регистр флагов flags

Рис. 5.1. Регистры процессоров IA-32

В нижней части рис. 5.1. показаны еще два регистра — указатель команды, яв­ляющийся счетчиком команд и содержащий адрес следующей выполняемой ко­манды программы, и регистр состояния, в котором хранятся флаги кодов условий (CF, ZF, SF, OF). Флаги информируют о результатах арифметических операций. Биты режима выполнения программы (IOPL, IF, TF) связаны с операциями ввода-вывода и прерываниями, о которых рассказывается в разделе 6.

Регистры общего назначения процессоров семейства IA-32 совместимы с ре­гистрами ранних 8- и 16-разрядных процессоров Intel. В этих процессорах на ис­пользование разных регистров в программах накладывались некоторые ограни­чения. О соответствии регистров процессоров IA-32 регистрам более ранних процессоров можно судить по рис. 5.2. Восемь регистров общего назначения раз­делены на три группы: регистры данных для хранения операндов, регистры-ука­затели и индексные регистры для хранения адресов и индексов, посредством ко­торых определяется исполнительный адрес операнда в памяти.

Имя регистра общего

назначения

31 16

15 8

7 0

R0

EAX

AH

AL

Регистры данных

AX

R1

ECX

CH

CL

CX

R2

EDX

DH

DL

DX

R3

EBX

BH

BL

BX

R4

ESP

SP

Регистры-указатели

R5

EBP

BP

R6

ESI

SI

Индексные регистры

R7

EDI

DI

EIP

IP

Указатель команды

EFLAGS

FLAGS

Регистр состояния

Рис. 5.2. Соответствие регистров IA-32 регистрам более ранних процессоров Intel

В первых, 8-разрядных, процессорах Intel регистры данных назывались А, В, С и D. В более поздних 16-разрядных процессорах их стали называть АХ, ВХ, СХ и DX. Старший и младший байты каждого регистра идентифицируются суффик­сами Н и L. Например, два байта в регистре АХ называются АН и AL. В процессо­рах IA-32 для идентификации соответствующих «расширенных» 32-разрядных регистров используется префикс E: ЕАХ, ЕВХ, ЕСХ и EDX. Этот же префикс употребляется и с другими 32-разрядными регистрами, показанными на рис. 5.2 (они являются расширенными версиями соответствующих 16-разрядных регист­ров, использовавшихся в более ранних процессорах).

Все перечисленные наименования регистров до сих пор применяются в техни­ческой документации Intel и других описаниях процессоров этой корпорации. Старые наименования регистров сохранены потому, что Intel поддерживает об­ратную совместимость для всех своих процессоров. Это означает, что при кор­ректной установке состояния процессора программы на машинном языке, соз­данные для ранних 16-разрядных процессоров, будут нормально работать на со­временных процессорах IA-32 без каких-либо изменений. В программах на языке ассемблера для 16-разрядных процессоров мы будем использовать в именах реги­стров префикс E, поскольку это мнемоническое обозначение применяется в теку­щих версиях ассемблера процессоров IA-32. Для однобайтовых операндов, храня­щихся в младших разрядах 32-разрядных регистров процессора, используются обозначения AL, BL и т. д. Для команд процессора IA-32 можно динамически ус­тановить 32- или 16-разрядный режим, для чего используется байт префикса ко­манды.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]