|
| ||
|
|
||
|
| ||
Архитектурные особенности
Операционная система MS-DOS, язык ассемблера МП 86 и методы программирования микропроцессоров
корпорации Intel разрабатывались применительно к 16-разрядному процессору 8086
и тому режиму, который впоследствии получил название реального. Появление процессора
80386 знаменовало собой начато нового этапа в развитии операционных систем и прикладного
программирования - этапа многозадачных графических операционных систем защищенного
режима типа Windows и 32-разрядных прикладных программ. При этом, как уже отмечалось
во введении, все архитектурные средства 86-го процессора входят в состав любого
современного процессора, который, таким образом, можно условно разделить на две
части - МП 86 и дополнительные средства, обеспечивающие защищенный режим, 32-разрядную
адресацию и прочее. Из этих дополнительных средств можно выделить те, которые
обеспечивают защищенный режим, и в реальном режиме не используются (во всяком
случае, явным образом; в действительности, процессор, даже работая в реальном
режиме, использует по крайней мере некоторые из этих средств). Сюда, например,
относятся регистры таблиц дескрипторов, регистры тестирования и отладки, привилегированные
команды защищенного режима, система страничного отображения адресов и др. С другой
стороны, часть новых свойств современных процессоров можно использовать и в реальном
режиме, выполняя программы под управлением MS-DOS. Сюда, прежде всего, относится
использование 32-битовых операндов, некоторых новых команд процессора и расширенных
возможностей старых команд. Настоящая глава будет в основном посвящена именно
этим средствам процессоров 80386, i486 и Pentium, которые в дальнейшем мы будем
обобщенно называть 32-разрядными процессорами. Вопрос о программировании защищенного
режима слишком сложен, чтобы его можно было осветить в рамках этой книги, хотя
основные принципы защищенного режима будут описаны.
32-разрядные процессоры
содержат несколько десятков программно- адресуемых регистров (не считая регистров
сопроцессора), из которых шесть являются 16-разрядными, а остальные - 32-разрядными.
Регистры принято объединять в семь групп: регистры общего назначения (или регистры
данных), регистры-указатели, сегментные регистры, управляющие регистры, регистры
системных адресов, отладочные регистры и регистры тестирования. Кроме того, в
отдельную группу выделяют счетчик команд и регистр флагов. Регистры, используемые
в реальном режиме, показаны на рис. 4.1.

Рис. 4.1. Основные регистры 32-разрядных процессоров.
Как
видно из рис. 4.1, регистры общего назначения и регистры-указатели отличаются
от аналогичных регистров МП 86 тем, что они являются 32-разрядными. Соответственно,
к их мнемоническим обозначениям добавлена буква Е (от extended, расширенный).
Для сохранения совместимости с ранними моделями процессоров допускается обращение
к младшим половинам всех регистров, которые имеют те же мнемонические обозначения,
что и в МП 86 (АХ, ВХ,СХ, DX, SI, DI, ВР и SP). Естественно, сохранена возможность
работы с младшими (AL, BL, CL и DL) и старшими (АН, ВН, СН и DH) половинками регистров
МП 86. Однако старшие половины 32-разрядных регистров не имеют мнемонических обозначений
и непосредственно недоступны. Для того, чтобы прочитать, например, содержимое
старшей половины регистра ЕАХ (биты 31...16) придется сдвинуть все содержимое
ЕАХ на 16 бит вправо (в регистр АХ) и прочитать затем содержимое АХ. Все регистры
общего назначения и указатели программист может использовать по своему усмотрению
для временного хранения адресов и данных размером от байта до двойного слова.
Так, например, возможно использование следующих команд:
mov ЕАХ,0FFFFFFFFh ;Работа с двойным словом (32 бит)
mov AX,0FFFFh ;Работа со словом (16 бит)
mov AL, 0FFh ;Работа с байтом (8 бит)
Все сегментные регистры, как и в МП 86, являются 16-разрядными. В их состав
включено еще два регистра - FS и GS, которые могут использоваться для хранения
сегментных адресов двух дополнительных сегментов данных. Таким образом, при использовании
расширенных возможностей современных процессоров программе одновременно доступны
четыре сегмента данных, а не два, как в МП 86.
Регистр указателя команд также
является 32-разрядным и обычно при описании процессора его называют EIP. Младшие
шестнадцать разрядов этого регистра соответствуют регистру IP процессора МП 86.
Весь регистр EIP используется только в 32-разрядных приложениях; в 16-разрядных
программах адреса могут быть только 16-разрядными и, соответственно, для адресации
в программном сегменте используется младшая половина регистра EIP.
Регистр
флагов принято называть EFLAGS (от extended flags, расширенные флаги). Хотя он
имеет длину 32 бит, только младшие 18 бит (да и то не все) содержат значащую информацию.
Дополнительно к шести флагам состояния (CF, PF, AF, ZF, SF и OF) и трем флагам
управления состоянием процессора (TF, IF и DF), назначение которых было описано
в гл. 1, он включает новые флаги задачи, рестарта и виртуального режима, а также
двухбайтовое поле привилегий ввода-вывода. Все эти биты используются только в
защищенном режиме и здесь рассматриваться не будут.
| Физика лабы | ||||||||
| ||||||||