Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архит_ч1_А4.pdf
Скачиваний:
42
Добавлен:
20.03.2015
Размер:
1.2 Mб
Скачать

Вопросы для самоконтроля

1.Нарисуйте основные логические элементы ЭВМ?

2.Для чего необходимо знать алгебру логики?

3.Дайте понятие базиса логической схемы.

4.Какие технологии используются для создания логических элементов ЭВМ?

5.Назовите основные законы алгебры логики.

6.Какие методы минимизации логических функций Вы знаете?

Литература для самостоятельной подготовки по теме:

8, 9, 11.

ГЛАВА 5. ПРОГРАММНАЯ МОДЕЛЬ МИКРОПРОЦЕССОРА

Программную модель процессора в архитектуре IA-32 (lntel Architecture) процессоров Intel составляет следующий набор ресурсов (см. рис. 5.1):

пространство адресуемой памяти до 232 байт (4 Гбайт), для Репtim II и выше – до 236 байт (64 Гбайт);

регистры для хранения данных общего назначения;

сегментные регистры;

регистры состояния и управления;

регистры устройства вычислений с плавающей запятой (сопроцессора);

набор регистров целочисленного ММХ-расширения, отображенных на регистры сопроцессора (впервые появились в архитектуре процессора Pentium ММХ);

набор регистров ММХ-расширения с плавающей точкой (впервые появились в архитектуре процессора Pentium III);

программный стек – специальная информационная структура, для работы с которой предусмотрены специальные машинные команды.

Кроме того, к ресурсам, поддерживаемым архитектурой IA-32, необходимо отнести порты ввода-вывода, счетчики мониторинга производительности.

Программные модели более ранних процессоров (i486, первые Pentium до Pentium

ММХ включительно) отличаются меньшим размером адресуемого пространства оперативной памяти (максимально 232 адресов, так как разрядность их шины адреса составляет 32 бита) и отсутствием некоторых групп регистров. Поэтому на рис. 5.1 для каждой группы регистров в скобках показано, начиная с какой модели она появилась в программной модели процессоров Intel. Если такого обозначения нет, то это означает, что данная группа регистров присутствовала в процессорах i386 и i486.

73

EAX

 

 

 

 

AX

 

 

 

 

 

 

 

 

 

236 -1 (232 -1)

 

 

 

 

 

 

 

 

 

 

Адресное

 

 

 

 

 

 

 

 

AH

 

AL

 

 

 

 

 

пространство

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

памяти

 

 

 

 

 

i486,

 

 

 

 

 

 

 

 

 

DX

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EDX

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Pentium

 

 

 

DH

 

 

 

 

 

 

 

 

Стек

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Pentium II/III/IV

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ECX

 

 

 

 

CX

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CH

 

 

 

 

 

 

 

Сегментные регистры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EBX

 

 

 

 

BX

 

 

 

 

 

 

 

 

C3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

BH

 

 

 

 

 

 

 

 

 

 

D3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

31

 

 

15

 

 

7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S3

 

 

 

 

 

 

 

 

EBP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ESI

 

 

 

 

 

BP

 

 

 

 

 

 

 

 

 

E3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EDI

 

 

 

 

 

SI

 

 

 

 

 

 

 

 

 

F3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DI

 

 

 

 

 

 

 

 

 

G3

 

 

 

 

 

 

 

 

ESP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SP

 

 

 

 

 

 

 

15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

31

 

 

15

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Регистры сопроцессора

(устройств с плавающей

Регистры

 

 

 

 

 

 

 

 

 

 

 

 

 

ST(0)

 

 

 

 

запятой)

 

 

 

 

 

 

 

 

целочисленного

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ММХ расширения

 

ST(1)

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ST(2)

 

 

 

 

EFLAGS

 

 

 

FLAGS

 

 

 

 

 

MMX0

 

 

 

ST(3)

 

 

 

 

 

 

 

31

15

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMX1

 

 

 

 

 

 

 

 

 

 

 

 

 

Регистр указатель команды

 

 

 

ST(4)

 

 

 

 

 

 

 

 

 

MMX2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMX3

 

 

 

ST(5)

 

 

 

 

EІР

 

 

 

ІР

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMX4

 

 

 

ST(6)

 

 

 

31

15

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMX5

 

 

 

ST(7)

 

 

 

 

 

 

 

 

 

XMM0

 

 

 

 

 

 

MMX6

 

 

 

79

 

 

 

0

 

 

 

 

 

XMM1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MMX7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

XMM2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

63

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

XMM3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Регистры

 

 

 

ХММ-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

XMM4

 

 

 

 

 

 

 

 

 

 

расширения

с

плавающей

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

запятой РIII/PIV

 

 

 

 

 

 

 

 

 

XMM5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

XMM6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

XMM7

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

127

 

 

 

 

0

 

Рис. 5.1. Программная модель процессора ІА-32

Что касается еще более ранних процессоров i8086/88, то на самом деле они тоже полностью представлены на схеме, но составляют лишь небольшую ее часть. В программную модель этих процессоров входят 8- и 16-разрядные регистры общего назначения, сегментные регистры, регистры FLAGS, IP и адресное пространство памяти размером до 1 Мбайт.

Набор регистров

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

Первую группу образуют пользовательские регистры, к которым относятся:

регистры общего назначения EAX/AX/AH/AL, EВX/ВX/ВH/ВL, ЕDХ/DХ/DН/DL, ECX/CX/CH/CL, ЕBР/BР, ESI/SI, EDI/DI, ESP/SP предназначены для хранения данных и адресов. Программисты используют их для реализации своих алгоритмов;

сегментные регистры CS, DS, SS, ES, FS, GS служат для хранения значений, интерпретация которых зависит от режима работы процессора. В реальном режиме сегментные

74

регистры содержат адрес параграфа начала сегмента в памяти. В защищенном режиме сегментные регистры хранят индекс входа в одну из системных таблиц дескрипторов – GDT или LDT (они будут рассмотрены в следующей главе);

регистры сопроцессора SТ(0), ST(1), ST(2), SТ(З), SТ( 4), ST(5), SТ(6), ST(7)

предназначены для написания программ, оперирующих данными с плавающей запятой (точкой);

целочисленные регистры целочисленного ММХ – расширения ММХ0, ММХ1, ММХ2,

ММХЗ, ММХ4, ММХ5, ММХ6, ММХ7;

регистры ХММ – расширения с плавающей запятой ХММ0, ХММ1, ХММ2, ХММЗ,

ХММ4, ХММ5, ХММ6, ХММ7;

регистры состояния и управления (регистр флагов EFLAGS/FLAGS и регистр указателя команды EIP/IP) содержат информацию о состоянии процессора, исполняемой про граммы и позволяют изменить это состояние.

Во вторую группу входят системные регистры, то есть предназначенные для обеспечения различных режимов работы, сервисных функций, а также регистры, специфичные для определенной модели процессора. К системным регистрам, поддерживаемым IA-32, относятся:

управляющие регистры СR0-СR4 – определяют режим работы процессора и характеристики текущей исполняемой задачи;

регистры управления памятью GDTR, IDTR, LDTR и ТR используются в защищенном режиме работы процессора для локализации управляющих структур этого режима;

отладочные регистры DR0-DR7 предназначены для контроля и управления различными аспектами отладки;

регистры типов областей памяти МТRR используются для аппаратного управления кэшированием в целях назначения соответствующих свойств областям памяти;

машинно-зависимые регистры MSR задействуются для управления процессором, контроля его производительности, а также получения информации об ошибках.

Вобозначениях многих регистров программной модели стоит наклонная разделительная черта, которая означает, что эти регистры можно использовать в программе как отдельные объекты. Так сделано для обеспечения работоспособности программ, написанных для прежних 16-разрядных моделей процессоров фирмы Intel, начиная с i8086. Процессоры i486 и Pentium включают в себя в основном 32-разрядные регистры. Их количество, за исключением сегментных регистров, такое же, как и у i8086, но емкость больше, что и отражено в обозначениях, – они имеют приставку Е (Extended).

Регистры общего назначения

Регистры общего назначения привлекаются для хранения:

операндов команд целочисленного устройства;

адресов и компонентов адреса.

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

Перечислим регистры, относящиеся к группе регистров общего назначения и физически находящиеся в процессоре внутри арифметико-логического устройства (регистры АЛУ):

регистр-аккумулятор (accumulator register) EAX/AX/AH/AL применяется для хранения промежуточных данных, в некоторых командах его использование обязательно;

базовый регистр (base register) EBX/BX/BH/BL применяется для хранения базового адреса некоторого объекта в памяти;

регистр-счетчик (count register) ECX/CX/CH/CL применяется в командах, производящих некоторые многократные действия;

регистр данных (data register) EDX/DX/DH/DL, так же как и регистр ЕАХ/АХ/AH/AL, позволяет хранить промежуточные данные.

75

Следующие два регистра предназначены для поддержки так называемых цепочечных операций, то есть операций, производящих последовательную обработку цепочек элементов, каждый из которых может иметь длину 32, 16 или 8 бит:

регистр индекса источника (source index register) ESI/SI в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике;

регистр индекса приемника (destination index register) EDI/DI в цепочечных операциях содержит текущий адрес в цепочке-приемнике.

Для работы со стеком в системе команд процессора есть специальные команды, а в программной модели процессора для этого существуют специальные регистры:

регистр указателя стека (stack pointer register) ESP/SP содержит указатель на вершину стека в текущем сегменте стека;

регистр указателя базы кадра стека (base pointer register) ЕВР/ВР предназначен для организации произвольного доступа к данным внутри стека.

Сегментные регистры

Процессоры Intel аппаратно поддерживают сегментную организацию программы. Это означает, что любая программа состоит как минимум из трех сегментов: кода, данных и стека. Логически машинные команды в архитектуре IA-32 построены так, что при выборке каждой команды для доступа к данным программы или к стеку неявно используется информация из вполне определенных сегментных регистров. В зависимости от режима работы процессора по их содержимому определяются адреса памяти, с которых начинаются соответствующие сегменты. В программной модели IA-32 имеется шесть сегментных регистров CS, SS, DS, ES, GS, FS, служащих для доступа к четырем типам сегментов.

Сегмент кода. Содержит команды программы. Для доступа к этому сегменту служит регистр сегмента кода (code sеgmепt register) CS. Он содержит значение, которое по-разному интерпретируется процессором, в зависимости от текущего режима работы. В реальном режиме (см. главу ) – это адрес первого параграфа сегмента, в защищенном - индекс элемента в таблице дескрипторов (глобальной GDT или локальной LDT).

Сегмент данных. Хранит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр сегмента данных (data segment register) DS, в который помещен адрес сегмента данных текущей программы.

Сегмент стека. Представляет собой область памяти, называемую стеком. Работу со стеком процессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Доступ к области стека выполняется через регистр сегмента стека (stack segment register) SS, содержащий адрес сегмента стека.

Дополнительный сегмент данных. Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в регистре сегмента данных DS. Если программе недостаточно одного сегмента данных, то она имеет возможность одновременно задействовать еще три дополнительных сегмента данных, адреса которых должны содержаться в регистрах дополнительного сегмента данных (extension data segment registers) ES, GS, FS. Следует обратить внимание на регистр ES. Он используется для обеспечения цепочечных команд процессора, адресуя собой операнд-источник.

Регистры состояния и управления

В процессор Intel включены два регистра (см. рис. 5.1), постоянно содержащие информацию о состоянии, как самого процессора, так и программы, команды которой он в данный момент обрабатывает:

регистр указателя команды EIP /IP;

регистр флагов EFLAGS/FLAGS.

Регистр указателя команд (instruction pointer register) EIP/IP имеет разрядность 32/16

бит и содержит смещение следующей подлежащей выполнению команды относительно начала сегмента кода. Этот регистр непосредственно недоступен программисту, то есть его нельзя указывать в качестве операнда команд. Но к нему возможен косвенный доступ, так загрузка и изменение его содержимого производятся в результате работы различных команд управления программным потоком, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации содержимого регистра EIP /IP.

76

Разрядность регистра флагов (FLAG register) EFLAGS/FLAGS равна 32/16 бит. Отдельные биты данного регистра имеют функциональное назначение и называются флагами. Младшая часть регистра EFLAGS/FLAGS полностью аналогична регистру FLAGS процессора i8086. На рис. 5.2 показано содержимое регистра EFLAGS.

Рис. 5.2 Содержимое регистра EFLAGS

Исходя из особенностей использования, флаги регистра EFLAGS/FLAGS делятся на три группы:

1.Флаги состояния – отражают особенности результата исполнения арифметических или логических операций и могут изменяться сознательно:

флаг переноса (carry flag) CF – если равен 1, то арифметическая операция произвела перенос из старшего бита результата (или перенос инициирован командой сдвига) или в старший бит результата. Старшим является 7-й, 15-й или 31-й бит в зависимости от размерности операнда; если CF равен 0 - переноса не было. Этот флаг показывает условие переполнения для беззнаковой арифметики;

флаг четности (parity flag) PF – если равен 1 – то 8 младших разрядов (этот флаг действителен только для 8 младших разрядов операнда любого размера) результата содержат четное число единиц; если равен 0 – среди 8 младших разрядов результата количество единиц нечетно;

вспомогательный флаг переноса (auxiliary сапу flag) AF – применяется только для команд, работающих с ВСD-числами. AF – фиксирует факт заема из младшей тетрады результата: если AF равен 1 – в результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде; если равен 0 – переносов и заемов в третий разряд (из третьего разряда) младшей тетрады результата не было;

флаг нуля (zero flag) ZF – когда равен 1 – результат нулевой; при равенстве 0 – результат ненулевой;

флаг знака (sign flag) SF – отражает состояние старшего бита результата (биты 7, 15 или 31 для 8-, 16или 32-разрядных операндов соответственно): если равен 1 – старший бит результата равен 1; если равен 0 – старший бит результата также равен 0;

флаг переполнения (overflow flag) OF – используется для фиксации факта потери значащего бита при арифметических операциях со знаком: если равен 1 – в результате операции происходит перенос в старший знаковый бит результата или заем из старшего знакового бита результата (биты 7, 15 или 31 для 8-, 16или 32-разрядных операндов соответственно); нулевое значение говорит об отсутствии переноса или заема.

2.Флаг направления DF (directory flag) – десятый бит регистра EFLAGS.

77

Флаг DF используется цепочечными командами и определяет направление поэлементной обработки данных этими командами: DF=0 – от начала цепочки к ее концу, то есть от младших адресов к старшим; DF=1 - от конца цепочки к ее началу, то есть, от старших адресов к младшим. Состояние флага DF можно изменить командами CLD (снять флаг DF) и STD (установить флаг DF).

3. Системные флаги и поле IOPL – управляют вводом - выводом, маскируемыми прерываниями, отладкой, переключением между задачами и режимом виртуального процессора

8086:

флаг трассировки (trace flag) TF – предназначен для организации пошговой работы процессора: если он равен 1 – процессор генерирует прерывание с номером 1 после выполнения каждой машинной команды (может использоваться при отладке программ); если равен 0 – обычная работа;

флаг прерывания (interrupt enable flag) IF – предназначен для разрешения или запрещения (маскирования) аппаратных прерываний (прерываний по входу INTR): когда он равен 1 – аппаратные прерывания разрешены; при равенстве 0 – аппаратные прерывания запрещены;

уровень привилегированности ввода-вывода (input/output privilege level) IOPL – используется в защищенном режиме работы процессора для контроля доступа к командам ввода-вывода в зависимости от назначенного задаче приоритета;

флаг вложенности задачи (nested task) NT – используется в защищенном режиме работы процессора для запоминания того факта, что одна задача связана с другой по цепочке вызовов. Работа цепочки связанных задач организуется с помощью команд CALL, IRET, регистра задач TR и сегмента TSS;

флаг возобновления (resume flag) RF – применяется при обработке прерываний от регистров отладки;

флаг режима виртуального процессора 8086 (virtual 8086 mode) VM -признак текущего режима процессора: если он равен 1 – процессор функционирует в режиме виртуального процессора 8086; если он равен 0 – процессор работает в реальном или защищенном режиме;

флаг контроля выравнивания (alignment check) АС – предназначен для разрешения контроля выравнивания при обращениях к памяти. Используется совместно с битом АМ в системном регистре CR0. Процессоры IA-32 (начиная с i80486) разрешают размещать команды

иданные, начиная с любого адреса. Установка данных битов (при уровне привилегий CPL=3), как правило, будет приводить к возникновению исключительной ситуации при попытках обращения к данным и командам по адресам, некратным 2 или 4;

флаг виртуального прерывания (virtual interrupt flag) VIF (только Pentium) – при определенных условиях, одно из которых – работа процессора в V - режиме, является аналогом флага IF. Флаг VIF используется совместно с флагом VIP (при CR4.VME = 1);

флаг отложенного виртуального прерывания (virtual interrupt pending flag) VIP (только Pentium) – устанавливается в 1 для индикации отложенного прерывания;

флаг идентификации (identification flag) ID – используется для того, чтобы показать факт поддержки процессором инструкции CPUID. Если программа может установить или сбросить этот флаг, то это означает, что данная модель процессора поддерживает инструкцию

CPUID.

Системные регистры процессора

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

Системные регистры можно разделить на три группы:

четыре регистра управления;

четыре регистра системных адресов;

восемь регистров отладки.

Всостав системных регистров процессоров ряда Pentium введены следующие изменения:

78

задействован ранее зарезервированный регистр управления СR4;

добавлена группа MSR - регистров (MSR - Model Specific Register,

модельнозависимые регистры процессора), назначение и возможности которых подчиняются архитектуре конкретной модели процессора.

Регистры управления

В группу регистров управления входят пять регистров: CR0, CR1, CR2, СRЗ, CR4. Они предназначены для общего управления системой. Регистры управления доступны только программам с уровнем привилегий 0. Из их общего количества доступными являются только четыре регистра; исключается CR1, функции которого пока не определены (он зарезервирован для будущего применения).

Регистр CR1 содержит системные флаги, управляющие режимами работы процессора и отражающие его состояние глобально, независимо от конкретных выполняющихся задач. Регистр CR1 используется при страничной модели организации памяти. Назначение системных флагов:

РЕ (protect enable), бит 0 – разрешение защищенного режима работы. Состояние этого флага показывает, в каком из двух режимов – реальном (РЕ=0) или защищенном (РЕ=1) – работает процессор в данный момент времени.

МР (math present), бит 1 – наличие сопроцессора. Всегда 1.

TS (task switched), бит 3 – переключение задач. Процессор автоматически устанавливает этот бит при переключении на выполнение другой задачи.

АМ (alignment mask), бит 18 – маска выравнивания. Данный бит разрешает (АМ =1) или запрещает (АМ=0) контроль выравнивания.

СD (cache disable), бит 30 – блокирование кэш-памяти. С помощью этого бита можно запретить (СD=1) или разрешить (СD=0) использование внутренней кэш-памяти (первого уровня).

PG (paging), бит 31 – разрешение (PG=1) или запрет (PG=0) страничного преобразования.

Регистр СR2 используется при страничной организации оперативной памяти для регистрации ситуации, когда текущая команда обратилась по адресу, принадлежащему странице памяти, которая отсутствует в данный момент времени в памяти. В такой ситуации в процессоре возникает исключительная ситуация с номером 14, и линейный 32-битовый адрес команды, вызвавшей исключение, записывается в регистр СR2. Имея эту информацию, обработчик исключения 14 определяет нужную страницу, осуществляет ее подгрузку в память и возобновляет нормальную работу программы.

Регистр СR3 также актуален при страничной организации памяти.

Это так называемый регистр каталога страниц первого уровня. Он содержит 20-битовый физический базовый адрес каталога страниц текущей задачи. Данный каталог содержит 1024 32-битовых дескриптора, каждый из которых хранит адрес таблицы страниц второго уровня. В свою очередь, каждая из таблиц страниц второго уровня содержит 1024 32-битовых дескриптора, адресующих страничные кадры в памяти. Размер страничного кадра – 4 Кбайт.

Регистр СR4 представляет собой совокупность признаков, в основном разрешительного характера, которые характеризуют те или иные архитектурные элементы, впервые появившиеся в различных моделях процессоров Pentium. В качестве примеров таких свойств можно привести следующие: поддержка 36-разрядной адресации, использование отложенных прерываний в режиме виртуального процессора i8086, поддержка страниц размером 4 Мбайт и т. д. Устанавливая в регистре СR4 те или иные биты, можно включать или отключить поддержку этих свойств.

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

Эти регистры еще называют регистрами управления памятью. Они предназначены для защиты программ и данных в мультизадачном режиме работы процессора. При работе в защищенном режиме процессора адресное пространство (АП) делится на:

глобальное АП – общее решение всех задач;

локальное АП – отдельное для каждой задачи.

Именно этим разделением и обьясняется то, что в архитектуре МП присутствуют следующие системные регистры:

79

регистр таблицы глобальных дескрипторов имеет размер 48 бит и содержит 32-битовый базовый адрес глобальной таблицы дескрипторов GDTR (Global Descriptop Table Register) и 16 – битовое значение предельного размера, представляющее собой размер в байтах таблицы GDT;

регистр таблицы локальных дескрипторов (имеет размер 16 бит) и LDTR (Local Descriptop Table Register) и содержит селектор дескриптора локальной таблицы дескрипторов;

регистр таблицы дескрипторов прерываний IDTR (Interrupt Descriptop Table Register)

имеет размер 48 бит и 32 – битовый базовый адрес таблицы дескрипторов прерываний (IDT) и 16 битовое значение предела, т.е. размер в байтах таблицы IDT;

16-битовый регистр задачи ТR (Task Register), подобно регистру LDTR, содержит селектор, то есть указатель на дескриптор в таблице GDT. Этот дескриптор описывает текущий сегмент состояния задачи (TSS – Task Segment Status). Последний создается для каждой задачи в системе, имеет жестко регламентированную структуру и хранит контекст (текущее состояние) задачи. Основное назначение сегментов TSS – запоминать текущее состояние задачи в момент переключения на другую задачу.

Регистры отладки

Ниже рассмотрена группа регистров, предназначенных для аппаратного контроля выполнения программы. Средства аппаратной отладки впервые появились в модели i486. Процессор содержит восемь регистров отладки, но реально из них используются только шесть.

Регистры DR0, DR1, DR2, DR3 имеют разрядность 32 бита и предназначены для задания линейных адресов четырех точек прерывания. При этом действует следующий механизм: любой формируемый текущей программой адрес сравнивается с адресами в регистрах DR0- DR1, и при совпадении генерируется исключение отладки с номером 1.

Регистр DR6 называется регистром состояния отладки. Биты этого регистра устанавливаются в соответствии с причинами, которые вызвали возникновение последнего исключения с номером 1. Перечислим эти биты и их назначение.

В0 – если установлен в 1, то последнее исключение (прерывание) возникло в результате достижения контрольной точки, определенной в регистре DR0;

В1 – аналогично В0, но для контрольной точки в регистре DR1;

В2 – аналогично В0, но для контрольной точки в регистре DR2;

В3 – аналогично В0, но для контрольной точки в регистре DR3; ВD (бит 13) – служит для защиты регистров отладки;

BS (бит 14) – устанавливается в 1, если исключение 1 было вызвано состоянием флага

TF = 1 в регистре EFLAGS;

ВТ (бит 15) – устанавливается в 1, если исключение 1 было вызвано переключением на задачу с установленным битом ловушки (Т = 1) в TSS.

Все остальные биты в этом регистре заполняются нулями. Обработчик исключения 1 по содержимому DR6 должен определить причину, по которой произошло исключение, и выполнить необходимые действия.

Регистр DR7 называется регистром управления отладкой. В нем для каждого из четырех регистров контрольных точек отладки отводятся поля, с помощью которых можно уточнить следующие условия, при которых следует сгенерировать прерывание:

место регистрации контрольной точки – только в текущей задаче или в любой задаче. Соответствующие признаки занимают младшие восемь битов регистра DА7: по два бита на каждую контрольную точку (фактически точку прерывания), задаваемую регистрами DR0, DR1, DR2, DR3. Первый бит из каждой пары – это так называемое локальное разрешение, его установка говорит о том, что точка прерывания действует, если она находится в пределах адресного пространства текущей задачи. Второй бит в каждой паре определяет глобальное разрешение, то есть данная контрольная точка действует в пределах адресных пространств всех задач, запущенных в системе;

тип доступа, по которому инициируется прерывание: только при выборке команды, при записи или при записи/чтении данных. Биты, определяющие природу прерывания, сосредоточены в старшей части данного регистра.

80

Большинство из системных регистров программно доступны. Рассмотренная выше часть программной модели процессора не является полной. Ее достаточно для обсуждения целочисленных команд процессора, см. главу 18.

Формат команды микропроцессоров

Микропроцессор Intel-8086 имеет двухадресную систему команд [1,10]. Ее особенностью является отсутствие команд, использующих оба операнда из оперативной памяти. Исключение составляют лишь команды пересылки и сравнения цепочек байт или слов, которые в данной главе пособия рассматриваться не будут.

Система команд жестко связана с конкретным типом процессора, поскольку определяется аппаратной структурой блока дешифрации команд, и обычно не обладает переносимостью на другие типы процессоров (хотя может иметь место совместимость “снизувверх” в рамках серии процессоров, как, например, в серии i80x86).

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

Слогической точки зрения в двоичном коде команды существуют группы разрядов – поля – с различным функциональным назначением (рис. 5.3).

КОП – код операции – двоичный код, однозначно указывающий процессору на выполнение конкретных действий (пересылка, сложение и т.п.), и определяющий при этом форму задания адресов операндов;

КОП

Область операндов или адресов

(1)

(2)

 

 

1 – поле кода операции (КОП) объемом 1 или 2 байта; 2 – поле адресной части команды (АЧ) объемом от 1 до 4 байт.

Рис. 5.3 Типовая структура формата команды

На рис.5.3 показаны два основных поля в формате команды:

АЧ – адресная часть – двоичное число, которое может представлять собой адрес (адреса) операндов, значение операнда, адрес следующей команды (адрес перехода, передачи управления ). Следовательно, формат команды – это совокупность таких ее характеристик, как количество, размер и назначение полей.

Таким образом, команда делится на две области: область кода операции (КОП) и область адресов. Адресная область может состоять из нескольких частей – это, так называемые многоадресные команды. С точки зрения программиста, наиболее удобны трехадресные.

Адресная область состоит из трех полей: в первых двух находиться адреса операндов, а

втретье будет записан адрес результата действия над операндами.

Вдвухадресных командах адресная область состоит из двух полей: поле адреса (ПА) первого операнда и ПА второго операнда. Адрес результата действия над операндами будет записан в первое поле, см. рис. 5.4.

КОП

Адрес 1

Адрес 2

 

 

 

Рис. 5.4. Схема двухадресной команды

В одноадресных командах адресная область состоит из одного единственного поля, в котором находится адрес операнда, а адрес второго операнда и результата совпадает с сумматором. Существуют так же и безадресные команды, которые применяются при работе со стеками. Чаще всего используются двух-, одно- и безадресные команды.

Задача адресации заключается в указании на текущую ячейку памяти, к которой происходит обращение процессора.

Методы адресации памяти имеют особое значение при программировании на языке низкого уровня (языке ассемблера), см. главу 18.

81

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

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

При относительной адресации исполнительный адрес определяется как сумма адресного кода команды и базового адреса, как правило, хранящегося в специальном регистре – регистре базы.

Относительная адресация позволяет при меньшей длине адресного кода команды обеспечить доступ к любой ячейке памяти. Для этого число разрядов в базовом регистре выбирают таким, чтобы можно было адресовать любую ячейку оперативной памяти, а адресный код команды используют для представления лишь сравнительно короткого «смещения». Смещение определяет положение операнда относительно начала массива, задаваемого базовым адресом.

При укороченной адресации в адресном поле командного слова содержатся только младшие разряды адресуемой ячейки.

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

В случае косвенной адресации адресный код команды в этом случае указывает адрес ячейки памяти, в которой находится адрес операнда или команды. Косвенная адресация широко используется в малых и микроЭВМ, имеющих короткое машинное слово, для преодоления ограничений короткого формата команды (совместно используются регистровая и косвенная адресация), см. рис. 5.5. При косвенной адресации количество ячеек с адресами других ячеек может быть несколько (цепочка), см. рис. 5.6.

КОП

Адрес ячейки

 

 

Адрес ячейки

 

Операнд

 

 

 

Рис. 5.5. Схема косвенной адресации

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

КОП

Адрес ячейки

 

 

Адрес ячейки

 

Адрес ячейки

 

Адрес ячейки

 

Адрес ячейки

Операнд

Рис. 5.6. Схема цепочки при косвенной адресации

82

При автоинкрементной адресации сначала содержимое регистра используется как адрес операнда, а затем получает приращение, равное числу байт в элементе массива. При автодекрементной адресации сначала содержимое указанного в команде регистра уменьшается на число байт в элементе массива, а затем используется как адрес операнда.

Непосредственная адресация предполагает, что операнд занимает одно из полей команды и, следовательно, выбирается из оперативной памяти одновременно с ней. В зависимости от форматов обрабатываемых процессором данных непосредственный операнд может иметь длину 8 или 16 бит.

Механизмы адресации операндов, находящихся в регистровой памяти и в оперативной памяти, существенно различаются. К регистровой памяти допускается лишь прямая регистровая адресация. При этом в команде указывается номер регистра, содержащего операнд. 16-разрядный операнд может находиться в регистрах AX, BX, CX, DX, DI, SI, SP, BP, а 8-

разрядный – в регистрах AL, AH, BL, BH, CL, CH, DL, DH.

Адресация оперативной памяти имеет свои особенности, связанные с ее разбиением на сегменты и использованием сегментной группы регистров для указания начального адреса сегмента. 16-разрядный адрес, получаемый в блоке формирования адреса операнда на основе указанного режима адресации, называется эффективным адресом (ЭА). Иногда эффективный адрес обозначается как ЕА (effective address). 20-разрядный адрес, который получается сложением эффективного адреса и увеличенного в 16 раз значения соответствующего сегментного регистра, называется физическим адресом (ФА).

Именно физический адрес передается из микропроцессора по 20-ти адресным линиям, входящим в состав системной шины, в оперативную память и используется при обращении к ее ячейке на физическом уровне. При получении эффективного адреса могут использоваться все основные режимы адресации, рассмотренные выше, а также некоторые их комбинации.

Прямая адресация предполагает, что эффективный адрес является частью команды. Так как ЭА состоит из 16 разрядов, то и соответствующее поле команды должно иметь такую же длину.

В общем случае инструкция микропроцессора IA-32 может содержать следующие поля,

см. рис. 5.7.

префикс

КОП

Mod R/M

SIB

смещение

непосредственный операнд

0/1 байт

1/2 байта

0/1 байт

0/1 байт

0/1/2/4 байта

0/1/2/4 байта

Рис. 5.7. Схема инструкции микропроцессора IA-32

Префикс – необязательная часть инструкции, которая позволяет изменить некоторые особенности ее выполнения. В команде может быть использовано сразу несколько префиксов разного типа. Типы префиксов:

командные префиксы (префиксы повторения) REP, REPE/REPZ, REPNE/REPNZ;

префикс блокировки шины LOCK; префиксы размера;

префиксы замены сегмента.

КОП – код операции.

Байт "Mod R/M" определяет режим адресации, а также иногда дополнительный код операции. Необходимость байта "Mod R/M" зависит от типа инструкции.

Байт SIB (Scale-Index-Base) определяет способ адресации при обращении к памяти в 32битном режиме. Необходимость байта SIB зависит от режима адресации, задаваемого полем

"Mod R/M".

Кроме того, инструкция может содержать непосредственный операнд и/или смещение операнда в сегменте данных.

На размер инструкции накладывается ограничение в 15 байт. Инструкция большего размера может получиться при некорректном использовании большого количества префиксов. В IA-32 в таком случае генерируют исключение #13.

Если инструкция микропроцессора требует операнды, то они могут задаваться следующими способами: непосредственно в коде инструкции (только операнд-источник); в одном из регистров; через порт ввода-вывода; в памяти.

Для совместимости с 16-битными процессорами архитектура IA-32 использует одинаковые коды для инструкций, оперирующих как с 16-битными, так и 32-битными операндами. Новая архитектура предусматривает также новые возможности при указании

83

адреса для операнда в памяти. Как процессор будет считать операнд или его адрес, зависит от эффективного размера операнда и эффективного размера адреса для данной команды. Эти значения определяются на основе режима работы, бита D дескриптора используемого сегмента и наличия в инструкции определенных префиксов.

Непосредственный режим адресации подразумевает включение операнда-источника в код инструкции. Операнд может быть 8-битовым или 16-битовым, если значение эффективного размера операнда - 16. Операнд может быть 8-битовым или 32-битовым, если значение эффективного размера операнда – 32. Обычно непосредственные операнды используются в арифметических инструкциях.

Регистровый режим адресации определят операнд-источник или операнд-приемник в одном из регистров процессора или сопроцессора.

Внекоторых случаях, (например, в инструкциях DIV и MUL, см. главу 18, могут использоваться пары 32-битных регистров (например, EDX:EAX), образуя 64-битный операнд.

Адресация через порт ввода-вывода подразумевает получение операнда или сохранение операнда через пространство портов ввода-вывода. Адрес порта ввода-вывода либо непосредственно включается в код инструкции, либо берется из регистра DX.

Очень распространенный способ адресации операнда – адресация через память. Таким образом, может быть указан операнд-источник или операнд-приемник. Следует отметить, что процессор не позволяет одновременно задавать оба операнда через память (за исключением некоторых цепочечных команд).

Для получения операнда из памяти процессору необходимо знать селектор сегмента и смещение в сегменте. В некоторых командах селектор может быть указан непосредственно в коде инструкции. В других случаях процессор может явно или неявно использовать значение одного из сегментных регистров. Под неявным использованием сегментных регистров подразумевается то, что в зависимости от предназначения операнда процессор использует определенный сегментный регистр для обращения к памяти: CS – для выборки инструкций; SS

для работы со стеком или обращения к памяти через регистры ESP или EBP; ES – для получения адреса операнда-приемника в цепочечных командах; DS – при всех остальных обращениях к памяти. Явное использование сегментных регистров возможно, если в код инструкции включается префикс смены сегмента. Указание префикса смены сегмента допустимо не для всех команд: нельзя менять сегмент для команд работы со стеком (всегда используется SS); для цепочечных команд можно менять сегмент только операнда-источника (операнд-приемник всегда адресуется через ES).

Втаблице 5.1 показаны основные способы адресации в МП.

Таблица 5.1

 

Реализация основных способов адресации

Тип

Содержание

Содержание

Содержание

адресации

команды

регистра

памяти

Прямая

Адрес

 

Операнд

Непосред-

Операнд

 

 

ственная

 

 

 

Регист-

Адрес

Операнд

 

регистра

 

 

ровая

 

 

 

 

 

Косвенная

Адрес

Адрес

Операнд

Регист-

регистра

 

 

ровая

 

 

 

Басовая

Адрес

Адрес

 

базового

Базовый

 

(индекс-

регистр)

 

регистра

 

ная)

 

Операнд

 

 

 

Смещение

 

 

84

Тип

Содержание

Содержание

Содержание

адресации

команды

регистра

 

памяти

Относи-

 

Текущий

 

 

 

адрес

 

 

тельная

Смещение

 

Код

 

 

 

 

 

 

команды

 

 

Счетчик команд

 

 

 

 

Указатель стека

Стек

Стековая

 

Адрес

 

Операнд

(Чтение

Неявная ссылка

 

Старая

вершины

i

операнда)

на регистр SP

вершина

стека

 

 

 

 

 

 

Новая

 

 

 

 

вершина

 

 

Указатель стека

 

Стек

Стековая

Неявная

Адрес

i

Операнд

(Запись

вершины

 

ссылка на

 

Новая

операнда)

регистр SP

стека

 

 

вершина

 

 

 

 

Старая

 

 

 

 

вершина

Вопросы для самоконтроля

 

 

 

1.Что такое программная модель процессора?

2.Перечислите группы регистров.

3.Назначение регистров отладки?

4.Формат команды микропроцессора.

5.Назначение сегментных регистров?

6.Форматы команд микропроцессора.

7.Типы адресации?

8.Что такое префикс команды?

9.Дайте определение механизма адресации операндов.

Литература для самостоятельной подготовки по теме:

5, 8, 12, 13, 17.

85