Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
арх_лекция_03.doc
Скачиваний:
3
Добавлен:
17.04.2019
Размер:
189.44 Кб
Скачать

Добавочные регистры

Четыре регистра системного адреса и четыре регистра управления определяют состояние устройства, влияющее на все задачи в системе. Регистры системного ад­реса TR, IDTR, ODTR и LDTR содержат адреса четырех специальных сегментов таблицы дескрипторов:

• регистр адреса состояния задачи (TR) указывает на сегмент состояния задачи;

• регистр адреса таблицы дескрипторов прерываний (IDTR) указывает на таб­лицу дескрипторов прерываний;

• регистр адреса таблицы глобальных дескрипторов (GDTR) указывает на таб­лицу глобальных дескрипторов;

• регистр адреса таблицы локальных дескрипторов (LDTR) указывает на таб­лицу локальных дескрипторов.

Регистры CRO — CR3 дополнительно определяют состояние микропроцессора 80386 (рис.2.7):

» регистр CRO содержит слово состояния устройства MSW (рис.2,7); » регистр CRI зарезервирован;

» регистры CR2 и CR3 служат для поддержки постраничной работы микропро­цессора 80386. Эти два регистра используются вместе; CR2 содержит полный линейный адрес, вызвавший исключительную ситуацию на последней стра­нице, а CR3 — адрес, указывающий детальную директорию страницы.

Слово состояния устройства

Первые пять разрядов 16-разрядного слова состояния устройства содержат: раз­ряд 0 — разрешение защиты (РЕ), разряд 1 — сопроцессор монитора (МР), раз­ряд 2 — эмуляция сопроцессора (ЕМ), разряд 3 — переключенная задача (TS), разряд 4 расширенный тип процессора (ЕТ) (рис. 2.7):

' разрешение защиты (РЕ) используется для активации защищенного режима в микропроцессоре. Если разряд РЕ сброшен, то микропроцессор работает в реальном режиме; если установлен, то активирован защищенный режим;

• сопроцессор монитора (МР) используется вместе с разрядом TS для опреде­ления, была ли вызвана ошибка недоступности сопроцессора по коду WAIT (т.е. TS - 1);

• эмуляция сопроцессора (ЕМ) устанавливается в случае всех кодов команд со­процессора для выработки ошибки недоступности сопроцессора. Если разряд ЕМ равен 0, то все команды сопроцессора будут им (80287 или 80387) вы­полняться;

• переключенная задача (TS) всегда автоматически устанавливается при пере­ключении задач. Если TS-1, то код команды сопроцессора вызывает ошибку недоступности сопроцессора;

« расширенный тип процессора (TS) показывает выбранный тип сопроцессора, 80287 или 80387.

Тестовые и отладочные регистры

Регистры DRO, DRI, DR2, DR3, DR6, DR7 используются для управления при отладке (рис.2.8). Отладочные регистры 0"Ь4 и DR5 зарезервированы. Эти регист­ры могут быть задействованы только командой MOV на нулевом уровне привиле­гии.

Регистры DRO — DR3 содержат адреса, связанные с одним из четырех условий точки останова, определенных значениями разрядов в 'отладочном регистре DR7. Эти четыре регистра содержат линейные адреса, которые или являются физиче­ским адресом, если запрещена постраничная организация, или переводятся микро­процессором 80386 в физический, если постраничная организация разрешена. Ког­да активизирована разбивка на страницы, регистр DR7 содержит разряды глобаль­ного и локального разрешения, определяющие соответствие адресов в 'регистрах DRO — DR3 задачам.

Отладочный регистр DR7 является управляющим: определяющим и по отдель­ности разрешающим или запрещающим условия отладки. Каждый адресный ре­гистр отладки из DRO — DR3 имеет собственные поля: RWn — двухразрядное поле чтения-записи, Ln — двухразрядное поле длины, Ln и Gn — поля разрешения ло­кальной и глобальной точек останова. Поля RWn интерпретируются следующим об­разом:

00 — останов только на выполнении команды,

01 — останов только на записи данных,

10 — пока не используется,

11 — останов на чтении или на записи данных, но не на вызове команды. Каждый регистр адреса DRO — DR3 также имеет соответствующее поле длины, определяющее размер единичной пересылки данных. Поле длины интерпретируется следующим образом:

00 — длина 1 байт,

01 — длина 2 байта,

10 — пока не используется,

11 — длина 4 байта.

Когда поле RWn сброшено в 00, соответствующее поле длины Ln также должно быть сброшено в 00.

Каждый регистр адреса также имеет два еще более взаимосвязанных поля: Gn и Ln. Эти поля показывают разрешения глобальной и локальной точек останова соответственно. Разница между ними заключается в том, что разрешение Ln сбра­сывается микропроцессором при каждом переключении задачи во избежание неже­лательных условий точек останова для новой задачи, в то время как Gn не изме­няется при переключении задач.

Отладочный регистр DR6 содержит несколько флагов условий отладки, которые позволяют отладчику определить, какое из условий отладки удовлетворено. Когда выявлена разрешенная исключительная ситуация отладки, устанавливается соо^ает-с7вующий разряд Вп, Поле ВТ отладочного регистра DR6 работает вместе с отла­дочным разрядом ловушки в TSS. Поле ВТ устанавливается перед вводом программы отладки, если произошло переключение задач и установлен разряд ло­вушки в TSS. Разряд флага BS работает вместе с разрядом ловушки регистра EFLAGS. Флаг BS устанавливается, когда программа отладки вводится в качестве результата пошагового выполнения. Так как пошаговая ловушка имеет наивысший приоритет перед всеми исключительными ситуациями отладки, то любые другие разряды состояния отладки могут быть установлены, когда установлен разряд BS. Флаг разряда BD предназначен для индикации того, что следующая команда будет производить чтение или запись в один из восьми отладочных регистров. Микропро­цессор никогда не сбрасывает разряды флагов в DR6. Нули записываются в DR6 перед попыткой идентифицировать следующую исключительную ситуацию отлад­ки.

Техника адресации

Команда микропроцессора 80386 не только содержит информацию о необходи­мой операции, но и определяет тип операндов и их местонахождение. Существует девять основных режимов адресации:

• непосредственная; ' регистровая;

• прямая адресация к памяти; ' косвенная регистровая;

• относительная;

• прямая индексная; « относительная индексная с перемещением или без него;

• масштабирование; ' поразрядная.

Непосредственная адресация

По синтаксису команды микропроцессор определяет, какой адресный режим выбран. Например, в командах MOV АН.ОО MOV AL.04

значение операнда находится в самой команде. Здесь ^регистр АН обнуляется (0000), а в регистр AL загружается двоичный код 0100. Микропроцессор 80386 также допускает 32-разрядные операнды. Следующий пример иллюстрирует перемещение значения 32-разрядного операнда-источника в регистр ЕАХ (нуль должен находиться перед любым шестнадцатеричным числом):

MOV ЕАХ, OABCDFFFFH

При непосредственной адресации значения всех операндов при необходимости подвергаются знаковому расширению: значение старшего разряда операнда переме­щают в ту же позицию, что и у операнда-приемника. Например, команда

MOV АХ.302

5ерет 10-разрядный двоичный эквивалент числа 302,0100101110, и расширяет его По 16-разрядной величины операнда-приемника, записывая нулевой разряд знака » старший разряд регистра АХ:0000000100101110.

Знаковое расширение применяется также для 8-разрядного операнда-источника и операнда-приемника. Например:

MOV AL,-40 Эта команда расширяет 7 разрядов числа 40, 1101000, до 8 разрядов -40, 11101000.

Непосредственный операнд может быть выражением, преобразуемым в число:

MOV EDX, OFFSET mydata + 50Н

Регистровая адресация

В режиме регистровой адресации значение операнда-источника предварительно запоминается в одном из внутренних регистров микропроцессора 80386. Это зна­чение может составлять 8, 16 или 32 разряда. Микропроцессор определяет размер операнда по имени регистра. Например:

MOV ЕВХ, ЕАХ

означает, что микропроцессор берет 32-разрядное значение операнда-источника (регистр ЕАХ) и перемещает его в 32-разрядный регистр ЕВХ. В этом режиме используются также 8- и 16-разрядные регистры: MOV DS, АХ MOV DL, AL

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

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

Прямая или косвенная адресация

Сравним режимы прямой и косвенной адресации. В случае прямой адресации значение регистра, переменной, метки, константы или выражения, преобразуемого в константу, могут использоваться для получения исполнительного адреса (смеще­ние относительно базы сегмента). Косвенная адресация включает в себя четыре следующих режима адресации:

косвенная регистровая, относительная, индексная, относительная индексная.

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

Прямая адресация к памяти

При прямой адресации' к памяти операндом является переменное имя или мет- : ка. Микропроцессор использует значение ячейки памяти, указанной с помощью этого имени или метки, как показано на следующем примере: ; MOV ЕВХ, myans 1 При прямой адресации к памяти сегментное смещение операнда содержится в 1 команде в виде 16-разрядного параметра. Это смещение прибавляется к сдвинутому значению регистра сегмента данных (DS), что дает 20-разрядный исполнительный -(ЕА) или физический адрес. Обычно в качестве операнда при прямой адресации i к памяти выступает метка (рис. 2.9). <

Согласно рисунку команда заставляет микропроцессор загрузить регистр АХ значением ячейки памяти, по адресу связанным с меткой mydata. Заметьте, что микропроцессор запоминает младший и старший байты данных по младшему и старшему адресам памяти соответственно.

Косвенная регистровая адресация

При косвенной регистровой адресации вместо метки, указывающей адрес опе­ранда-источника, используется значение операнда по адресу смещения, запомнен­ного в специальном регистре. В качестве этого регистра обычно служит регистр индекса источника (SI), регистр индекса приемника (DI), регистр базы (ВХ), а иногда регистр указателя базы (ВР).

Микропроцессор распознает косвенную регистровую адресацию по синтаксису команды. Синтаксис определяется окружающими операнд-источник значками, на­пример квадратными скобками, как показано на рис. 2.10.

В этом примере регистр ВХ должен содержать адрес смещения MYDATA. Адрес смещения может быть загружен оператором OFFSET:

MOV ВХ, OFFSET mydata или командой LEA (загрузить исполнительный адрес): LEA ВХ, mydata.

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

Относительная адресация

Исполнительный адрес операнда в случае относительной адресации получается суммированием смещения и значения регистра базы 1(Е)ВХ или (Е)ВР] относи­тельно выбранного сегмента. Смещение может быть 8- или 16-разрядным числом

для 16-разрядных команд и 8- или 32-разрядным числом для 32-разрядных команд. В режиме относительной адресации обычно выполняется доступ к комплексным структурам данных, таких как списки. Регистр базы указывает на базу структуры и на частичное поле, выбранное смещением: LEA ЁВХ, mydata; загрузка адреса базы mydata

Изменяя смещение, можно осуществить доступ к различным полям в списке, как показано следующей командой:

MOV ЕВХ, [ЕВХ+4]

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

Прямая индексная адресация

В режиме прямой индексной адресации адрес смещения операнда вычисляется суммированием смещения и значения индексного регистра [(E)SI или (E)DI] внут­ри выбранного сегмента. Этот режим часто используется для доступа к элементам статического вектора. Значение смещения определяет начало вектора, а величина, записанная в индексном регистре, определяет конкретный элемент внутри структу­ры. В отличие от списков, где каждое поле может иметь различные размер и тип данных, элементы вектора имеют одинаковые размер и тип данных. Таким образом, перемещение по вектору происходит с помощью систематического увеличения или уменьшения смещения. Например: MOV ES1.4 MOV AX, ARAYI [ESI]

Необходима аккуратность при выборе значения смещения, соответствующего типу данных элементов вектора. В предыдущем примере в регистр АХ загружались данные из элемента 4 вектора ARAYI: MOV ЕАХ, ARAYI (SI]

В данном примере в 32-разрядный регистр АХ загружаются данные в зависимости от типа данных вектора. Для. 16-разрядных команд индексными могут служить только регистры SI и DI, Команды с 32-разрядными данными могут использовать любой из 32-разрядных регистров общего назначения, кроме ESP^

При работе микропроцессора 80386 по командам с 32-разрядными данными предполагается, что:

• когда для двух 32-разрядных регистров используется косвенный адрес, пер­вый регистр предполагается регистром базы, второй — индексным регистром, если он не был масштабирован (см. масштабирование).,

• когда в косвенном адресе только один регистр определен как 32-разрядный, этот регистр предполагается регистром базы, если он не был масштабирован (cjm. масштабирование),

• когда в косвенном адресе используется масштабированный 32-разрядный ре­гистр, то он предполагается индексным регистром, даже если это единствен­ный заданный 32-разрядный регистр.

Относительная индексная адресация

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

Для доступа к отдельным элементам, регистр базы указывает на базу структуры списка, а смещение (хранящееся в регистре DI) содержит расстояние между нача­лом записи и началом поля вектора. Смещение элемента содержится в переменной элемента при условии, что элемент содержит 02 (рис. 2.11).

В этом примере адрес базы структуры списка 0020 находится в регистре ВХ. Поле вектора для третьей записи имеет смещение 0002 в регистре DI. Третий эле­мент поля вектора доступен с помощью смещения, содержащегося в инициализи­руемом значении элемента. Для команд над 16-разрядными операндами в качестве регистров базы могут быть использованы только регистры ВХ и ВР, а в качестве индексных — только SI и DI. Для команд над 32-разрядными операндами любой 32-разрядный регистр общего назначения может служить регистром базы, а любой 32-разрядный регистр общего назначения, за исключением ESP, — индексным ре­гистром. В следующем разделе объясняется, как можно масштабирующий множи­тель использовать для индексного регистра.

Масштабирование

Масштабирование пригодно только для косвенной адресации 32-разрядных опе­рандов из памяти. Масштабирование производится с помощью умножения величи­ны, указанной индексным регистром, следующим образом: СИНТАКСИС: 32-разрядный регистр ' масштабирующий множитель