Режимы работы микропроцессора кратко

Обновлено: 02.07.2024

В 1976 году фирма Intel закончила разработку 16-разрядного микропроцессора i8086. Он имел разрядность регистров 16 бит и системной шины адреса 20 бит, за счет чего мог адресовать до 1 Мбайт оперативной памяти.

В 1982 году был создан i80286. Этот микропроцессор представлял собой улучшенный вариант i8086. Он поддерживал уже несколько режимов работы: реальный, когда формирование адреса производилось по правилам i8086, и защищенный, который аппаратно реализовывал многозадачность и управление виртуальной памятью, i80286 имел также большую разрядность шины адреса — 24 разряда против 20 у i8086, и поэтому он мог адресовать до 16 Мбайт оперативной памяти. Первые компьютеры на базе этого микропроцессора появились в 1984 году.

В 1985 году фирма Intel представила первый 32-разрядный микропроцессор i80386, аппаратно совместимый снизу вверх со всеми предыдущими микропроцессорами этой фирмы. Он был гораздо мощнее своих предшественников, имел 32-разрядную архитектуру и мог прямо адресовать до 4 Гбайт оперативной памяти. Микропроцессор i386 стал поддерживать новый режим работы — режим виртуального i8086, который обеспечил не только большую эффективность работу программ, разработанных для i8086, но и позволил осуществлять параллельную работу нескольких таких программ.

В настоящее время микропроцессор с 32-битной Intel-архитектурой может работать в одном из четырех режимов:

  • реальный режим
  • системный режим
  • защищенный режим
  • режим виртуального i8086
Реальный режим (Real Mode)

После инициализации (системного сброса) центральный процессор находится в реальном режиме. В реальном режиме центральный процессор работает как очень быстрый i8086 с возможностью использования 32-битных расширений. Механизм адресации, размеры памяти и обработка прерываний (с их последовательными ограничениями) микропроцессор 8086 полностью совпадают с аналогичными функциями других микропроцессоров с 32-битной Intel архитектурой в реальном режиме.

Режим системного управления (System Management Mode).
Защищенный режим (Protected Mode)

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

Виртуальный режим i8086 (V86)

В режим V86 процессор может перейти из защищённого режима, если установить в регистре флагов EFLAGS бит виртуального режима (VM-бит, бит 17). Когда процессор находится в виртуальном режиме, его поведение во многом напоминает поведение процессора i8086. В частности, для адресации памяти используется схема , размер сегмента составляет 64 килобайта, а размер адресуемой в этом режиме памяти — 1 мегабайт. Виртуальный режим предназначен для работы программ, ориентированных на процессор i8086 (или i8088). Но виртуальный режим – это не реальный режим процессора i8086, имеются существенные отличия. Процессор фактически продолжает использовать схему преобразования адресов памяти и средства мультизадачности защищённого режима.

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

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

Можно выделить следующие режимы работы микропроцессора.

Реальный режим. При включении питания или после сигнала Reset (Сброс) Все процессоры семейства x86 устанавливаются в реальный режим работы (Real Mode), который соответствует базовому процессору i8086 с добавлением возможности использования 32-разрядных регистров, начиная с процессора i386. При этом механизм адресации, пространство адресов памяти, управление прерываниями осуществляются аналогично реальному режиму процессора i8086.

Особенности реального режима:

1 - в реальном режиме могут использоваться любые команды;

2 - размер операнда по умолчанию такой же, как и у процессора i8086 (16 бит);

3 - для использования 32-разрядных регистров и режимов адресации, в машинном коде применяется префикс перекрытия размера операнда 66h;

4 - размер сегмента в реальном режиме НЕ должен превышать 64К байт, т.е. 32-битовые

адреса должны быть меньше, чем 0000FFFFh;

5 - в реальном режиме есть две зарезервированные области памяти: зона системной инициализации (адреса от FFFFFFF0h до FFFFFFFFh) и таблица векторов прерываний (адреса от 00000h до 003FFh). Многие особые ситуации в реальном режиме НЕ используются. В случае возникновения грубой ошибки может произойти останов процессора.

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

Защищенный режим. Используется начиная с i286. Главное достоинство – возможность реализации мультизадачности. Мультизадачность – режим одновременного решения на одном процессоре нескольких задач, при котором аварийное завершение одной из задач НЕ приводит к остановке других задач и всей операционной системы в целом. Все современные операционные системы реализуют многозадачность в защищенном режиме работы процессора.

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

Особенности защищённого режима:

1 - в защищенном режиме (Protected Mode) адресное пространство расширяется до 4Г байт, а область виртуальных адресов – до 64 Тбайт.

2 - используется страничная модель памяти.

Режим виртуального 8086.

Режим V86 позволяет создавать на базе компьютеров с процессором, начиная с i386, и многозадачной операционной системы многопользовательские вычислительные системы. При этом у каждого пользователя создается иллюзия монопольного владения ВСЕМИ ресурсами компьютера.

Особенности режима виртуального 8086:

- переход в этот режим возможен, только из защищенного режима.

- возможность одновременной работы нескольких программ, разработанных для i8086.

Отличия реального режима работы процессора i386, эмулирующий процессор i8086, и режим виртуального 8086 (V86), работающий в защищенном режиме i386:

- Эффективный адрес вычисляется так же, как и в реальном режиме.

- Пространство задачи в 1М байт может быть размещено в любом месте 4 Гбайт пространства линейных адресов процессора i386. Адреса, превышающие 1 Мбайт, приводят к возникновению особой ситуации.

Режим системного управления. Это режим работы микропроцессора, который обеспечивает операционную систему механизмом для выполнения машинно-зависимых функций, таких как перевод компьютера в режим пониженного энергопотребления или выполнения действий по защите системы. Впервые данный режим появился в микропроцессоре Pentium. Для перехода в данный режим микропроцессор должен получить специальный сигнал – SMI – от усовершенствованного программируемого контроллера прерываний APIC (Advanced Programmable Interrupt Controller), при этом сохраняется состояние вычислительной среды микропроцессора. Функционирование микропроцессора в этом режиме подобно его работе в режиме реальных адресов. Возврат из этого режима производится специальной командой микропроцессора.

Можно выделить следующие режимы работы микропроцессора.

Реальный режим. При включении питания или после сигнала Reset (Сброс) Все процессоры семейства x86 устанавливаются в реальный режим работы (Real Mode), который соответствует базовому процессору i8086 с добавлением возможности использования 32-разрядных регистров, начиная с процессора i386. При этом механизм адресации, пространство адресов памяти, управление прерываниями осуществляются аналогично реальному режиму процессора i8086.




Особенности реального режима:

1 - в реальном режиме могут использоваться любые команды;

2 - размер операнда по умолчанию такой же, как и у процессора i8086 (16 бит);

3 - для использования 32-разрядных регистров и режимов адресации, в машинном коде применяется префикс перекрытия размера операнда 66h;

4 - размер сегмента в реальном режиме НЕ должен превышать 64К байт, т.е. 32-битовые

адреса должны быть меньше, чем 0000FFFFh;

5 - в реальном режиме есть две зарезервированные области памяти: зона системной инициализации (адреса от FFFFFFF0h до FFFFFFFFh) и таблица векторов прерываний (адреса от 00000h до 003FFh). Многие особые ситуации в реальном режиме НЕ используются. В случае возникновения грубой ошибки может произойти останов процессора.

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

Защищенный режим. Используется начиная с i286. Главное достоинство – возможность реализации мультизадачности. Мультизадачность – режим одновременного решения на одном процессоре нескольких задач, при котором аварийное завершение одной из задач НЕ приводит к остановке других задач и всей операционной системы в целом. Все современные операционные системы реализуют многозадачность в защищенном режиме работы процессора.

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

Особенности защищённого режима:

1 - в защищенном режиме (Protected Mode) адресное пространство расширяется до 4Г байт, а область виртуальных адресов – до 64 Тбайт.

2 - используется страничная модель памяти.

Режим виртуального 8086.

Режим V86 позволяет создавать на базе компьютеров с процессором, начиная с i386, и многозадачной операционной системы многопользовательские вычислительные системы. При этом у каждого пользователя создается иллюзия монопольного владения ВСЕМИ ресурсами компьютера.

Особенности режима виртуального 8086:

- переход в этот режим возможен, только из защищенного режима.

- возможность одновременной работы нескольких программ, разработанных для i8086.

Отличия реального режима работы процессора i386, эмулирующий процессор i8086, и режим виртуального 8086 (V86), работающий в защищенном режиме i386:

- Эффективный адрес вычисляется так же, как и в реальном режиме.

- Пространство задачи в 1М байт может быть размещено в любом месте 4 Гбайт пространства линейных адресов процессора i386. Адреса, превышающие 1 Мбайт, приводят к возникновению особой ситуации.

Режим системного управления. Это режим работы микропроцессора, который обеспечивает операционную систему механизмом для выполнения машинно-зависимых функций, таких как перевод компьютера в режим пониженного энергопотребления или выполнения действий по защите системы. Впервые данный режим появился в микропроцессоре Pentium. Для перехода в данный режим микропроцессор должен получить специальный сигнал – SMI – от усовершенствованного программируемого контроллера прерываний APIC (Advanced Programmable Interrupt Controller), при этом сохраняется состояние вычислительной среды микропроцессора. Функционирование микропроцессора в этом режиме подобно его работе в режиме реальных адресов. Возврат из этого режима производится специальной командой микропроцессора.

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

Выделяют два уровня организации:

● физическую организацию в виде принципиальной схемы;

● логическую организацию в виде структурно–функциональной схемы.

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

Микроархитектура процессора - это аппаратная организация и логическая структура микропроцессора, регистры, управляющие схемы, арифметико-логические устройства, запоминающие устройства и связывающие их информационные магистрали.

Макроархитектура процессора - это система команд, типы обрабатываемых данных, режимы адресации и принципы работы микропроцессора.

По форматам используемых команд существуют несколько видов архитектур процессоров:

● CISC–архитектура относится к процессорам (компьютерам) с полным набором команд. Она реализова­на во многих типах микропроцессоров (напримерPentium), выполняющих большой набор разноформатных команд с использованием многочисленных способов адресации.

Система команд процессоров с CISC–архитектурой может содержать не­сколько сотен команд разного формата (от 1 до 15 байт), или степени слож­ности, и использовать более 10 различных способов адресации, что позволя­ет программисту реализовать наиболее эффективные алгоритмы решения различных задач.

Развитие традиционных CISC–архитектур микропроцессоров по пути рас­ширения функциональных возможностей и снижения затрат на программиро­вание привело к увеличению числа команд в наборе и числа микрокоманд в команде. Следствием этого явилось усложнение интегральных схем и сни­жение быстродействия выполнения программ. Один из возможных путей уст­ранения указанных недостатков состоит в использовании сокращенного набо­ра команд, организация которого подчинена увеличению скоростей их выпол­нения;

● RISC–архитектура относится к процессорам (компьютерам) с сокра­щенным набором команд (ReducedinstructionSetComputer — RISC). Появле­ние RISC–архитектуры продиктовано тем, что многие CISC–команды и спо­собы адресации используются достаточно редко. Основная особенность RISC–архитектуры проявляется в том, что система команд состоит из неболь­шого количества часто используемых команд одинакового формата, которые могут быть выполнены за один командный цикл (такт) центрального процес­сора. Более сложные, редко используемые команды реализуются на про­граммном уровне. Однако за счет значительного повышения скорости испол­нения команд средняя производительность RISC–процессоров может оказать­ся выше, чем у процессоров с CISC–архитектурой.

Большинство команд RISC–процессоров связано с операцией регистр–регистр. Для обращения к памяти оставлены наиболее простые с точки зре­ния временных затрат операции загрузки в регистры и записи в память.

Современные RISC–процессоры реализуют около 100 команд, имеющих фиксированный формат длиной 4 байта, и используют небольшое число наи­более простых способов адресации (регистровую, индексную и некоторые другие).

Для сокращения количества обращений к внешней оперативной памяти RISC–процессоры содержат десятки–сотни регистров общего назначения (РОН), тогда как в CISC –процессорах всего 8–16 регистров. Обращение к внешней памяти в RISC–процессорах используется только в операциях за­грузки данных в РОН или пересылки результатов из РОН в память. За счет со­кращения аппаратных средств, необходимых для декодирования и выполне­ния сложных команд, достигается существенное упрощение интегральных схем RISC–процессоров и снижение их стоимости. Кроме того, значительно повышается производительность. Благодаря указанным достоинствам во многих современных CISC–процессорах (последние модели Pentium и К7) ис­пользуется RISC–ядро. При этом сложные CISC–команды предварительно преобразуются в последовательность простых RISC–операций и быстро вы­полняются RISC–ядром;

По способу организации выборки команд и данных различа­ют два вида архитектур:

● принстонская архитектура, или архитектура фон–Неймана, особенностью которой является (рис. 2.1.1) использование:

• общей основной (оперативной) памяти для хранения программ и данных, что позволяет оперативно и эффективно перераспределять ее объем в за­висимости от решаемых задач в каждом конкретном случае применении микропроцессора;

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


Недостаток принстонской архитектуры — использование общей шины для пе­редачи команд и данных ограничивает производительность цифровой системы;

● гарвардская архитектура (создатель ГовардАйкен), особенностью которой является физическое разделение памяти команд (программ) и памяти данных. Это обстоятельство вызвано постоянно возрастающими требова­ниями к производительности микропроцессорных систем. Память команд и память данных соединяются с процессором отдельными шинами. Благодаря разделению потоков команд и данных, а также совмещению операций их вы­борки (и записи результатов обработки) обеспечивается более высокая про­изводительность, чем при использовании принстонской архитектуры.

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

Процессор выполняет каждую команду за несколько шагов:

1. Вызывает очередную команду из памяти и заносит ее в регистр команд.

2. Меняет содержимое счетчика команд, который после этого указывает на следующую команду.

3. Определяет тип вызванной команды.

4. Если команда использует данные из памяти, определяет, где находятся эти данные.

5. При необходимости переносит данные в регистр процессора.

6. Выполняет команду.

7. Переходит к шагу 1, чтобы начать выполнение следующей команды.

Такая последовательность является основой работы всех компьютеров.

Физическая память, к которой процессор имеет доступ по шине адреса, называется оперативной памятью (или оперативным запоминающим устройством — ОЗУ). ОЗУ организовано как последовательность байтов. Каждому байту соответствует свой уникальный физический адрес (его номер).

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

Страничную модель можно рассматривать как надстройку над сегментированной моделью. В случае ее использования оперативная память рассматривается как совокупность блоков фиксированного размера.

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

· Сегмент кодов– содержит машинные команды для выполнения. Обычно первая выполняемая команда находится в начале этого сегмента, и операционная система передает управление по адресу данного сегмента для начала выполнения программы. Регистр сегмента кода CS и указатель IP определяют адрес памяти, откуда надо прочитать следующую команду.

· Сегмент данных– содержит определенные данные, константы и рабочие области, необходимые программе. Сегментные регистры DS, ES, GS и FS используются для адресации данных в памяти, индексный регистр SI служит для указания смещения.

· Сегмент стека. Стек содержит адреса возврата для программы для возврата в операционную систему и для вызовов подпрограмм для возврата в главную программу. Регистр сегмента стека SS и указатель SP указывают на вершину стека.

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

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

Формирование физического адреса в реальном режиме


Для хранения адресов памяти используются не отдельные регистры, а пары регистров:

· сегментный регистр определяет адрес начала сегмента (то есть положение сегмента в памяти);

· регистр указателя (регистр смещения) определяет положение рабочего адреса внутри сегмента.

При этом физический 20-разрядный адрес памяти образуется путем сложения смещения и адреса сегмента со сдвигом на 4 бита. Положение этого адреса в памяти показано на рисунке.


Например, сегмент в шестнадцатеричном виде равен 1200, а смещение — 3CDЕ.


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

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

Формирование физического адреса в защищенном режиме


Любой сегмент памяти в защищенном режиме имеет следующие атрибуты:
-расположение сегмента в памяти;
-размер сегмента;

-уровень привилегий (определяет права данного сегмента относительно других сегментов);
-тип доступа (определяет назначение сегмента).


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

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

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

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

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

Коэффициент мультипрограммирования (КМ) - это количество программ, обрабатываемых одновременно в мультипрограммном режиме.

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

Начиная с модели 80386 процессоры Intel предоставляют 16 основных регистров для пользовательских программ и ещё 11 регистров для работы с мультимедийными приложениями (MMX) и числами с плавающей точкой (FPU/NPX). Все команды так или иначе изменяют содержимое регистров. Как уже говорилось, обращаться к регистрам быстрее и удобнее, чем к памяти. Поэтому при программировании на языке Ассемблера регистры используются очень широко.

В этом разделе мы рассмотрим основные регистры процессоров Intel. Названия и состав/количество регистров для других процессоров могут отличаться.

Название Разрядность Основное назначение
EAX 32 Аккумулятор
EBX 32 База
ECX 32 Счётчик
EDX 32 Регистр данных
EBP 32 Указатель базы
ESP 32 Указатель стека
ESI 32 Индекс источника
EDI 32 Индекс приёмника
EFLAGS 32 Регистр флагов
EIP 32 Указатель инструкции (команды)
CS 16 Сегментный регистр
DS 16 Сегментный регистр
ES 16 Сегментный регистр
FS 16 Сегментный регистр
GS 16 Сегментный регистр
SS 16 Сегментный регистр

Регистры EAX, EBX, ECX, EDX – это регистры общего назначения. Они имеют определённое назначение (так уж сложилось исторически), однако в них можно хранить любую информацию.

Регистр флагов и сегментные регистры требуют отдельного описания и будут более подробно рассмотрены далее.

Вот пример такого регистра.


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

Обе команды поместят в регистр AX число 1. Разница будет заключаться только в том, что вторая команда обнулит старшие разряды регистра EAX, то есть после выполнения второй команды в регистре EAX будет число 1. А первая команда оставит в старших разрядах регистра EAX старые данные. И если там были данные, отличные от нуля, то после выполнения первой команды в регистре EAX будет какое-то число, но не 1. А вот в регистре AX будет число 1.

Нулевой разряд (бит) – это младший бит. Он крайний справа. Старший бит – крайний слева. Номер старшего бита зависит от разрядности числа/регистра. Например, в 32-разрядном регистре старшим битом является 31-й бит (потому что отсчёт начинается с 0, а не с 1).

2.1. Процессор.

Самый основной элемент компьютера, это, конечно, процессор. Давайте подробней его рассмотрим. Упрощённая структура процессора (рис. 4):


Рис. 4. Упрощённая структура процессора

Основные элементы процессора:

· Регистры – это специальные ячейки памяти, физически расположенные внутри процессора. В отличие от ОЗУ, где для обращения к данным требуется использовать шину адреса, к регистрам процессор может обращаться напрямую. Это существенно ускорят работу с данными.

· Арифметико-логическое устройство выполняет арифметические операции, такие как сложение, вычитание, а также логические операции.

· Блок управления определяет последовательность микрокоманд, выполняемых при обработке машинных кодов (команд).

· Тактовый генератор , или генератор тактовых импульсов, задаёт рабочую частоту процессора.

2.2. Режимы работы процессора.

Процессор архитектуры x86 может работать в одном из пяти режимов и переключаться между ними очень быстро:

1. Реальный (незащищенный) режим (real address mode) — режим, в котором работал процессор 8086. В современных процессорах этот режим поддерживается в основном для совместимости с древним программным обеспечением (DOS-программами).

2. Защищенный режим (protected mode) — режим, который впервые был реализован в 80286 процессоре. Все современные операционные системы (Windows, Linux и пр.) работают в защищенном режиме. Программы реального режима не могут функционировать в защищенном режиме.

3. Режим виртуального процессора 8086 (virtual-8086 mode, V86) — в этот режим можно перейти только из защищенного режима. Служит для обеспечения функционирования программ реального режима, причем дает возможность одновременной работы нескольких таких программ, что в реальном режиме невозможно. Режим V86 предоставляет аппаратные средства для формирования виртуальной машины, эмулирующей процессор8086. Виртуальная машина формируется программными средствами операционной системы. В Windows такая виртуальная машина называется VDM (Virtual DOS Machine — виртуальная машина DOS). VDM перехватывает и обрабатывает системные вызовы от работающих DOS-приложений.

4. Нереальный режим (unreal mode, он же big real mode) — аналогичен реальному режиму, только позволяет получать доступ ко всей физической памяти, что невозможно в реальном режиме.

5. Режим системного управления System Management Mode (SMM) используется в служебных и отладочных целях.

При загрузке компьютера процессор всегда находится в реальном режиме, в этом режиме работали первые операционные системы, например MS-DOS, однако современные операционные системы, такие как Windows и Linux переводят процессор в защищенный режим. Вам, наверное, интересно, что защищает процессор в защищенном режиме? В защищенном режиме процессор защищает выполняемые программы в памяти от взаимного влияния (умышленно или по ошибке) друг на друга, что легко может произойти в реальном режиме. Поэтому защищенный режим и назвали защищенным.

2.3. Регистры процессора (программная модель процессора).

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

· 8 регистров общего назначения, служащих для хранения данных и указателей;

· регистры сегментов — они хранят 6 селекторов сегментов;

· регистр управления и контроля EFLAGS, который позволяет управлять состоянием выполнения программы и состоянием (на уровне приложения) процессора;

· регистр-указатель EIP выполняемой следующей инструкции процессора;

· система команд (инструкций) процессора;

· режимы адресации данных в командах процессора.

Начнем с описания базовых регистров процессора Intel 80386.

Базовые регистры процессора Intel 80386 являются основой для разработки программ и позволяют решать основные задачи по обработке данных. Все они показаны на рис. 5.


Рис. 5. Базовые регистры процессора Intel 80386

Среди базового набора регистров выделим отдельные группы и рассмотрим их назначение.

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

Остальные четыре регистра – ESI (индекс источника), EDI (индекс приемника), ЕВР (указатель базы), ESP (указатель стека) – имеют более конкретное назначение и применяются для хранения всевозможных временных переменных. Регистры ESI и EDI необходимы в строковых операциях, ЕВР и ESP – при работе со стеком. Так же как и в случае с регистрами ЕАХ - EDX, младшие половины этих четырех регистров называются SI, DI, BP и SP соответственно, и в процессорах до 80386 только они и присутствовали.

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

При использовании сегментированных моделей памяти для формирования любого адреса нужны два числа – адрес начала сегмента и смещение искомого байта относительно этого начала (в бессегментной модели памяти flat адреса начал всех сегментов равны). Операционные системы (кроме DOS) могут размещать сегменты, с которыми работает программа пользователя, в разных местах памяти и даже временно записывать их на диск, если памяти не хватает. Так как сегменты способны оказаться где угодно, программа обращается к ним, применяя вместо настоящего адреса начала сегмента 16-битное число, называемое селектором. В процессорах Intel предусмотрено шесть 16-битных регистров - CS, DS, ES, FS, GS, SS , где хранятся селекторы. (Регистры FS и GS отсутствовали в 8086, но появились уже в 80286.) Это означает, что в любой момент можно изменить параметры, записанные в этих регистрах.

В отличие от DS, ES, GS, FS, которые называются регистрами сегментов данных, CS и SS отвечают за сегменты двух особенных типов – сегмент кода и сегмент стека. Первый содержит программу, исполняющуюся в данный момент, следовательно, запись нового селектора в этот регистр приводит к тому, что далее будет исполнена не следующая по тексту программы команда, а команда из кода, находящегося в другом сегменте, с тем же смещением. Смещение очередной выполняемой команды всегда хранится в специальном регистре EIP (указатель инструкции, 16-битная форма IP), запись в который так же приведет к тому, что далее будет исполнена какая-нибудь другая команда. На самом деле все команды передачи управления – перехода, условного перехода, цикла, вызова подпрограммы и т.п. – и осуществляют эту самую запись в CS и EIP.

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

Еще один важный регистр, использующийся при выполнении большинства команд, - регистр флагов. Как и раньше, его младшие 16 бит, представлявшие собой весь этот регистр до процессора 80386, называются FLAGS. В EFLAGS каждый бит является флагом, то есть устанавливается в 1 при определенных условиях или установка его в 1 изменяет поведение процессора. Все флаги, расположенные в старшем слове регистра, имеют отношение к управлению защищенным режимом, поэтому здесь рассмотрен только регистр FLAGS (см. рис. 6):


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

CF – флаг переноса. Устанавливается в 1, если результат предыдущей операции не уместился в приемнике и произошел перенос из старшего бита или если требуется заем (при вычитании), в противном случае – в 0. Например, после сложения слова 0 FFFFh и 1, если регистр, в который надо поместить результат, – слово, в него будет записано 0000 h и флаг CF = 1.

PF – флаг четности. Устанавливается в 1, если младший байт результата предыдущей команды содержит четное число битов, равных 1, и в 0, если нечетное. Это не то же самое, что делимость на два. Число делится на два без остатка, если его самый младший бит равен нулю, и не делится, когда он равен 1.

AF – флаг полупереноса или вспомогательного переноса. Устанавливается в 1, если в результате предыдущей операции произошел перенос (или заем) из третьего бита в четвертый. Этот флаг используется автоматически командами двоично-десятичной коррекции.

ZF – флаг нуля. Устанавливается в 1, если результат предыдущей команды – ноль.

SF – флаг знака. Он всегда равен старшему биту результата.

TF – флаг ловушки. Он был предусмотрен для работы отладчиков, не использующих защищенный режим. Установка его в 1 приводит к тому, что после выполнения каждой программной команды управление временно передается отладчику.

IF – флаг прерываний. Сброс этого флага в 0 приводит к тому, что процессор перестает обрабатывать прерывания от внешних устройств. Обычно его сбрасывают на короткое время для выполнения критических участков кода.

DF – флаг направления. Он контролирует поведение команд обработки строк: когда он установлен в 1, строки обрабатываются в сторону уменьшения адресов, когда DF =0 – наоборот.

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

Флаги IOPL (уровень привилегий ввода-вывода) и NT (вложенная задача) применяются в защищенном режиме.

2.7. Цикл выполнения команды

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

Для того чтобы процессор знал, какую команду нужно выполнять в определённый момент, существует счётчик команд – специальный регистр, в котором хранится адрес команды, которая должна быть выполнена после выполнения текущей команды. То есть при запуске программы в этом регистре хранится адрес первой команды. В процессорах Intel в качестве счётчика команд (его ещё называют указатель команды) используется регистр EIP (или IP в 16-разрядных программах).

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

Цикл выполнения команды – это последовательность действий, которая совершается процессором при выполнении одной машинной команды. При выполнении каждой машинной команды процессор должен выполнить как минимум три действия: выборку, декодирование и выполнение. Если в команде используется операнд, расположенный в оперативной памяти, то процессору придётся выполнить ещё две операции: выборку операнда из памяти и запись результата в память. Ниже описаны эти пять операций.

  • Выборка команды . Блок управления извлекает команду из памяти (из очереди команд), копирует её во внутреннюю память процессора и увеличивает значение счётчика команд на длину этой команды (разные команды могут иметь разный размер).
  • Декодирование команды . Блок управления определяет тип выполняемой команды, пересылает указанные в ней операнды в АЛУ и генерирует электрические сигналы управления АЛУ, которые соответствуют типу выполняемой операции.
  • Выборка операндов . Если в команде используется операнд, расположенный в оперативной памяти, то блок управления начинает операцию по его выборке из памяти.
  • Выполнение команды . АЛУ выполняет указанную в команде операцию, сохраняет полученный результат в заданном месте и обновляет состояние флагов, по значению которых программа может судить о результате выполнения команды.
  • Запись результата в память . Если результат выполнения команды должен быть сохранён в памяти, блок управления начинает операцию сохранения данных в памяти.

Суммируем полученные знания и составим цикл выполнения команды:

  1. Выбрать из очереди команд команду, на которую указывает счётчик команд.
  2. Определить адрес следующей команды в очереди команд и записать адрес следующей команды в счётчик команд.
  3. Декодировать команду.
  4. Если в команде есть операнды, находящиеся в памяти, то выбрать операнды.
  5. Выполнить команду и установить флаги.
  6. Записать результат в память (по необходимости).
  7. Начать выполнение следующей команды с п.1.

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

Читайте также: