Программная модель процессора это
Программная модель процессора – это базовая совокупность систем и характеристик процессора, видимая программистам, работающим на нижних, "машинных" уровнях программирования, например на языке ассемблера.
Обычно к программной модели процессора относят:
виды используемых структур памяти по принципам размещения и поиска информации,
организацию оперативной памяти,
структуру и типы команд,
состав программно-доступных регистров,
структуру и типы данных,
наборы реализованных операций.
Кроме этого в программную модель включают ряд схемно-программных систем, видимых программистам, работающим на нижних уровнях программирования.
Вопросы для самопроверки:
Понятие "программная модель процессора".
Компоненты "программной модели процессора".
2.2. Виды используемых структур памяти по принципам размещения и поиска информации
В традиционных ЭВМ используется иерархическая система памяти. Непосредственно в процессоре могут быть интегрированы регистры общего назначения (РОНы), первые ступени кэш-памяти, дополнительные устройства памяти, иногда – программно недоступные. Это устройства сохранения адресов возврата, аппаратные таблицы переадресации, буферы предсказаний ветвлений и т.д.
Основной памятью, на работу с которой ориентирован процессор, является оперативная память. Остальные системы памяти для процессора, как правило, являются внешними устройствами.
Особый статус имеют уровни кэш-памяти. Это элементы системы "оперативная память – процессор"
По принципам размещения и поиска информации устройства оперативной памяти разделяются на:
Адресная память
В адресных устройствах памяти массив элементов хранения информации разбивается на отдельные нумерованные последовательности. Номер конкретной последовательности является ее адресом, по которому происходит обращение для записи или чтения информации. Это модель плоской (двухкоординатной) памяти. Иногда используются наборы плоских устройств памяти для получения структурированных систем памяти.
Обычно для хранения информации в ЭВМ используются двоичные элементы (хранимые значения – биты), а минимально адресуемой последовательностью бит является байт.
Байт – это количество бит, необходимое для кодирования символов в используемых стандартных кодах. В настоящее время байт – это 8 бит.
Байты укрупняются в слова. Для РС и мини-ЭВМ слово – это два байта, для полноразрядныхЭВМ корпорации IBM – четыре байта. В качестве программных объектов могут использоваться биты, байты, слова и более крупные объекты, кратные двоичной степени байта.
Ассоциативная память
В ассоциативных системах памяти массив элементов хранения информации, как и в адресных системах, разбивается на отдельные последовательности, но нумерация последовательности необязательна.
Кроме функций записи и хранения, в таких системах памяти аппаратно реализуются функции ассоциативного поиска информации. В простейшем случае – это поиск информации по совпадению входного "эталона" –ключа с частью последовательности хранимой информации. Результаты ассоциативного поиска используются в операциях чтения или записи для поиска искомых строк данных.
Ассоциативный поиск реализуется сравнением входной информации со всеми хранимыми объектами (байтами, словами и т.д.).
Ассоциативный поиск может быть реализован чисто программно последовательным перебором ячеек в обычной адресной памяти с последовательным сравнением ключа с хранимой в памяти информацией.
В ассоциативной памяти поиск реализуется аппаратно путем параллельного сравнения слова-ключа со всеми записанными словами. Для этого каждый набор элементов хранения программных объектов дополняется схемами сравнения.
Части хранимой информации, по которым производится ассоциативный поиск, могут быть выделены в отдельный блок (блок тегов) или задаваться схемами маскирования в блоке хранения информации.
Стековая память
Стековая память –это список со стратегией работы "последний вошел – первый вышел". Стековая память обычно реализуется на основе обычной линейной адресной памяти с использованием специального регистра – указателя стека (SP). Для стековой памяти определены две операции: занесение единицы данных в стек и удаление единицы данных из стека. При занесении в стек объекта, например слова, содержимое указателя стека уменьшают на длину объекта и результат используют в качестве адреса записи. При удалении объекта из стека производят чтение из вершины стека, а затем производят корректировку указателя стека: увеличивают содержимоеSPна длину удаляемого объекта. Это вариант стека с распространением (при заполнении) в сторону уменьшения адресов. Возможен симметричный вариант стека с распространением в сторону увеличения адресов.
Стек может использоваться в аппаратных процедурах, например для сохранения контекста программ в процедурах передачи управления на подпрограммы (включая программы обработки прерываний) и возврата из подпрограмм.
Для программной работы со стеком используются или специальные команды, или режимы адресации.
Использование специальных команд для организации стека
Многие процессоры имеют наборы команд работы со стеком. Наиболее общими из них являются команды:
PUCHА – поместить в стек А, где А – непосредственный операнд, регистр или ячейка памяти;
POPA– восстановить (выбрать) данные из стека в А,где А – регистр или ячейка памяти.
Построение стека на основе обычной адресной памяти позволяет производить чтение и модификацию данных и по произвольному адресу внутри стека.
В МП Intel для обращения по произвольному адресу внутри стека используется регистр EBP – указатель базы (кадра) стека. Перед началом использования стека, для возможности доступа к данным стека по произвольным адресам, в этом регистре должно быть скопировано содержимое указателя стека (ESP – адрес вершины стека).
В МП Intel для работы со стеком предусмотрены: стековый сегмент (определяемый сегментным регистром ЕSS), регистр указателя вершины стека (ЕSP) и регистр базового адреса кадра стека (EBP).
Использование режимов адресации
В процессорах корпорации DECнет специальных команд (кодов операций) для работы со стеком. Для создания стека может использоваться любая область единой адресной памяти. Одна из областей памяти выделена для аппаратного стека. Аппаратный стек предназначен для использования аппаратурой или операционной системой. Аппаратура использует стек для сохранения данных в процедурах передачи управления подпрограммам, включая подпрограммы обработки прерываний. Программы пользователей также могут использовать множество стеков.
Для работы со стеками используются не специальные команды, а режимы адресации: автоинкрементный и автодекрементный. В качестве указателя стека может использоваться любой регистр общего назначения (РОН).
В современных ЭВМ используются все три типа памяти. Как правило, в качестве оперативной памяти используется адресная память.
Вопросы для самопроверки:
Адресная память.
Ассоциативный поиск информации в памяти.
Ассоциативная память.
Стековая память.
Минимальный формат адресуемых данных.
Размер формата данных – "слово".
Процедура поиска информации в ассоциативной памяти.
Понятие "стековая память".
Команды работы со стеком в МП IA.
Использование РОНа EBP при работе со стеком в МП IA.
Использования РОНа ESP при работе со стеком в МП IA.
Важной частью архитектуры микропроцессоров Intel является наличие устройства для обработки числовых данных в формате с плавающей точкой, называемого математическим сопроцессором . Архитектура компьютеров на базе микропроцессоров вначале опиралась исключительно на целочисленную арифметику. С ростом мощи стали появляться устройства для обработки чисел с плавающей точкой. В архитектуре семейства микропроцессоров Intel 8086 устройство для обработки чисел с плавающей точкой появилось в составе компьютера на базе микропроцессора i8086/88 и получило название математический сопроцессор или просто сопроцессор. Выбор такого названия был обусловлен тем, что,
- во-первых, это устройство было предназначено для расширения вычислительных возможностей основного процессора;
- во-вторых, оно было реализовано в виде отдельной микросхемы, то есть его присутствие было необязательным. Микросхема сопроцессора для микропроцессора i8086/88 имела название i8087.
С появлением новых моделей микропроцессоров Intel совершенствовались и сопроцессоры, хотя их программная модель осталась практически неизменной. Как отдельные (а, соответственно, необязательные в конкретной комплектации компьютера) устройства, сопроцессоры сохранялись вплоть до модели микропроцессора i386 и имели название i287 и i387 соответственно. Начиная с модели i486, сопроцессор исполняется в одном корпусе с основным микропроцессором и, таким образом, является неотъемлемой частью компьютера.
Основные возможности математического сопроцессора:
- полная поддержка стандартов IEEE-754 и 854 на арифметику с плавающей точкой. Эти стандарты описывают как форматы данных, с которыми должен работать сопроцессор, так и набор реализуемых им функций;
- поддержка численных алгоритмов для вычисления значений тригонометрических функций, логарифмов и т. п.;
- обработка десятичных чисел с точностью до 18 разрядов, что позволяет сопроцессору выполнять арифметические операции без округления над целыми десятичными числами со значениями до 10 18 ;
- обработка вещественных чисел из диапазона ±3.37х10 -4932 …1.18х10 +4932 .
Форма представления чисел с плавающей точкой описана здесь .
Общая форма представления вещественных чисел предполагает возможность размещения в разрядной сетке следующих типов.
Числа простой и двойной точности ( float ( DD ) и double ( DQ ) соответственно) могут быть представлены только в нормированной форме. При этом бит целой части числа является скрытым и подразумевает логическую 1. Остальные 23 (52) разряда хранят двоичную мантиссу числа.
Числа двойной расширенной точности ( long double ( DT )) могут быть представлены как в нормированной, так и в ненормированной форме, поскольку бит целой части числа не является скрытым и может принимать значения как 0, так и 1.
Основным типом данных, которыми оперирует математический сопроцессор, являются 10-байтные данные ( DT ).
Программная модель сопроцессора
Программная модель сопроцессора представляет собой совокупность регистров, каждый из которых имеет свое функциональное назначение.
В программной модели сопроцессора можно выделить три группы регистров:
- Восемь регистров r0…r7 , составляющих основу программной модели сопроцессора — стек сопроцессора. Размерность каждого регистра 80 битов. Такая организация характерна для устройств, специализирующихся на обработке вычислительных алгоритмов.
- Три служебных регистра:
— регистр состояния сопроцессора swr (Status Word Register — регистр слова состояния) — отражает информацию о текущем состоянии сопроцессора;
— управляющий регистр сопроцессора cwr (Control Word Register — регистр слова управления) — управляет режимами работы сопроцессора;
— регистр тегов twr (Tags Word Register — слово тегов) — используется для контроля за состоянием каждого из регистров стека. - Два регистра указателей — данных dpr (Data Point Register) и команд ipr (Instruction Point Register). Они предназначены для запоминания информации об адресе команды, вызвавшей исключительную ситуацию и адресе ее операнда. Эти указатели используются при обработке исключительных ситуаций (но не для всех команд).
Все указанные регистры являются программно доступными. Однако к одним из них доступ получить достаточно легко, для этого в системе команд сопроцессора существуют специальные команды. К другим регистрам получить доступ сложнее, так как специальных команд для этого нет, поэтому необходимо выполнить дополнительные действия.
Регистр состояния swr – отражает текущее состояние сопроцессора после выполнения последней команды. В регистре swr содержатся поля, позволяющие определить: какой регистр является текущей вершиной стека сопроцессора, какие исключения возникли после выполнения последней команды, каковы особенности выполнения последней команды (некий аналог регистра флагов основного процессора).
Структурно регистр swr состоит из:
-
6 флагов исключительных ситуаций PE, OE, UE, ZE, DE, IE.
Исключения — это разновидность прерываний, с помощью которых процессор информирует программу о некоторых особенностях ее реального исполнения. Сопроцессор также обладает способностью возбуждения подобных прерываний при возникновении определенных ситуаций (не обязательно ошибочных). Все возможные исключения сведены к 6и типам, каждому из которых соответствует 1 бит в регистре swr . Программисту не обязательно писать обработчик для реакции на ситуацию, приведшую к некоторому исключению. Сопроцессор умеет самостоятельно реагировать на многие из них. Это так называемая обработка исключений по умолчанию. Для того чтобы вызвать обработку определенного типа исключения по умолчанию, необходимо это исключение оставить не маскированным. Такое действие выполняется с помощью установки в 1 соответствующего бита в управляющем регистре сопроцессора cwr . Типы исключений, фиксируемые с помощью регистра swr:
- IE (Invalide operation Error) — недействительный код операция;
- DE (Denormalized operand Error) — ненормированный операнд;
- ZE (divide by Zero Error) — ошибка деления на нуль;
- ОЕ (Overflow Error) — ошибка переполнения. Возникает в случае выхода порядка числа за максимально допустимый диапазон;
- UE (Underflow Error) — ошибка антипереполнения. Возникает, когда результат слишком мал (близок к нулю);
- РЕ (Precision Error) — ошибка точности. Устанавливается, когда сопроцессору приходится округлять результат из-за того, что его точное представление невозможно. Так, сопроцессору никогда не удастся точно разделить 10 на 3.
Регистр управления работой сопроцессора cwr – определяет особенности обработки числовых данных. С помощью полей в регистре cwr можно регулировать точность выполнения численных вычислений, управлять округлением, маскировать исключения.
Он состоит из:
- шести масок исключений PM, UM, OM, ZM, DM, IM ;
- поля управления точностью PC (Precision Control);
- поля управления округлением RC (Rounding Control).
2-битовое поле управления точностью PC предназначено для выбора длины мантиссы. Возможные значения в этом поле означают:
- PC =00 — длина мантиссы 24 бита;
- PC =10 — длина мантиссы 53 бита;
- PC =11 — длина мантиссы 64 бита.
По умолчанию устанавливается значение поля PC =11.
Поле управления округлением RC позволяет управлять процессом округления чисел в процессе работы сопроцессора. Необходимость операции округления может появиться в ситуации, когда после выполнения очередной команды сопроцессора получается не представимый результат, например, периодическая дробь. Установив одно из значений в поле RC , можно выполнить округление в необходимую сторону.
Значения поля RC с соответствующим алгоритмом округления:
- 00 — значение округляется к ближайшему числу, которое можно представить в разрядной сетке регистра сопроцессора;
- 01 — значение округляется в меньшую сторону;
- 10 — значение округляется в большую сторону;
- 11 — производится отбрасывание дробной части числа. Используется для приведения значения к форме, которая может использоваться в операциях целочисленной арифметики.
Бит 12 в регистре cwr физически отсутствует и считывается равным 0.
Регистр тегов twr – представляет собой совокупность двухбитовых полей. Каждое поле соответствует определенному физическому регистру стека и характеризует его текущее состояние. Команды сопроцессора используют этот регистр, например, для того, чтобы определить возможность записи значений в эти регистры. Изменение состояния любого регистра стека отражается на содержимом соответствующего этому регистру 2-битового поля регистра тега. Возможны следующие значения в полях регистра тега:
- 00 — регистр стека сопроцессора занят допустимым ненулевым значением;
- 01 — регистр стека сопроцессора содержит нулевое значение;
- 10 — регистр стека сопроцессора содержит одно из специальных численных значений, за исключением нуля;
- 11 — регистр пуст и в него можно производить запись. Это значение в двухбитовом поле регистра тегов не означает, что все биты соответствующего регистра стека должны быть обязательно нулевыми.
Принцип работы сопроцессора
Регистровый стек сопроцессора организован по принципу кольца. Cреди восьми регистров, составляющих стек, нет такого, который является вершиной стека. Все регистры стека с функциональной точки зрения абсолютно одинаковы и равноправны. Вершина в кольцевом стеке сопроцессора является плавающей. Контроль текущей вершины осуществляется аппаратно с помощью 3-битового поля top регистра swr .
В поле top фиксируется номер регистра стека r0…r7 , являющегося в данный момент текущей вершиной стека.
Команды сопроцессора оперируют не физическими номерами регистров стека r0…r7 , а их логическими номерами st(0)…st(7) . C помощью логических номеров реализуется относительная адресация регистров стека сопроцессора. Например, если текущей вершиной до записи в стек является физический регистр стека r3 , то после записи в стек текущей вершиной становится физический регистр стека r2 . То есть, по мере записи в стек, указатель его вершины движется по направлению к младшим номерам физических регистров (уменьшается на единицу). Если текущей вершиной является r0 , то после записи очередного значения в стек сопроцессора его текущей вершиной станет физический регистр r7 . Что касается логических номеров регистров стека st(0)…st(7) , то они перемещаются вместе с изменением текущей вершины стека. Логическая вершина стека всегда имеет имя st(0) .
Поскольку при написании программы разработчик манипулирует не абсолютными, а относительными номерами регистров стека, у него могут возникнуть трудности при попытке интерпретации содержимого регистра тегов twr , с соответствующими физическими регистрами стека. В качестве связующего звена необходимо привлекать информацию из поля top регистра swr . Таким образом реализуется принцип кольца.
Такая организация стека обладает большой гибкостью, в частности при передаче параметров в процедуру. Для повышения гибкости разработки и использования процедур не желательно привязывать их по передаваемым параметрам к аппаратным ресурсам (физическим номерам регистров сопроцессора). Гораздо удобнее задавать порядок следования передаваемых параметров в виде логических номеров регистров. Такой способ передачи был бы однозначным и не требовал от разработчика знания лишних подробностей об аппаратных реализациях сопроцессора. Логическая нумерация регистров сопроцессора, поддерживаемая на уровне системы команд, идеально реализует эту идею. При этом не имеет значения, в какой физический регистр стека сопроцессора были помещены данные перед вызовом подпрограммы, определяющим является только порядок следования параметров в стеке. По этой причине подпрограмме важно знать только порядок размещения передаваемых параметров в стеке.
Принцип работы сопроцессора совместно с центральным процессором
Процессор и сопроцессор имеют свои раздельные системы команд и форматы обрабатываемых данных. Несмотря на то, что сопроцессор архитектурно представляет собой отдельное вычислительное устройство, он не может существовать отдельно от основного процессора. Процессор и сопроцессор, являясь двумя самостоятельными вычислительными устройствами, могут работать параллельно. Но это распараллеливание распространяется только на выполнение команд. Оба процессора подключены к общей системной шине и имеют доступ к одной и той же информации. Инициирует процесс выборки очередной команды всегда основной процессор. После выборки команда попадает одновременно в оба процессора. Любая команда сопроцессора имеет код операции, первые пять бит, которого имеют значение 11011. Когда код операции начинается этими битами, то основной процессор по дальнейшему содержимому кода операции выясняет, требует ли данная команда обращения к памяти. Если это так, то основной процессор формирует физический адрес операнда и обращается к памяти, после чего содержимое ячейки памяти выставляется на шину данных. Если обращение к памяти не требуется, то основной процессор заканчивает работу над данной командой (не делая попытки ее исполнения) и приступает к декодированию следующей команды из текущего входного командного потока. Выбранная команда попадает в сопроцессор одновременно с основным процессором. Сопроцессор, определив по первым пяти битам, что очередная команда принадлежит его системе команд, начинает ее исполнение. Если команда требует операнды из памяти, то сопроцессор обращается к шине данных за чтением содержимого ячейки памяти, которое к этому моменту предоставлено основным процессором.
В определенных случаях необходимо согласовывать работу обоих устройств. К примеру, если во входном потоке сразу за командой сопроцессора следует команда основного процессора, использующая результаты работы предыдущей команды, то сопроцессор не успеет выполнить свою команду за то время, пока основной процессор, пропустив сопроцессорную команду, выполнит свою. При этом что логика работы программы будет нарушена. Возможна и другая ситуация. Если входной поток команд содержит последовательность из нескольких команд сопроцессора, то процессор пропустит их очень быстро, но он должен обеспечить внешний интерфейс для сопроцессора. Эти и другие, более сложные ситуации, приводят к необходимости синхронизации между собой работы двух процессоров. В первых моделях микропроцессоров это делалось путем вставки перед или после каждой команды сопроцессора специальной команды wait или fwait . Работа данной команды заключалась в приостановке работы основного процессора до тех пор, пока сопроцессор не закончит работу над последней командой. В моделях микропроцессора (начиная с i486) подобная синхронизация выполняется автоматически. Но для некоторых команд из группы команд управления сопроцессором оставлена возможность выбора между командами с синхронизацией (ожиданием) и без нее.
Центральный процессор (ЦП) — устройство, непосредственно предназначенное для выполнения вычислительных операций. Процессор работает под управлением программы, выполняя вычисления или принимая логические решения, необходимые для обработки информации.
Большинство современных центральных процессоров строятся на базе 32-битной архитектуры Intel-совместимых процессоров IA-32 (Intel Architecture), которая является третьим поколением базовой архитектуры x86.
Структура центрального процессора
Функционально центральный процессор можно разделить на две части:
- операционную, содержащую арифметико-логическое устройство (АЛУ) и микропроцессорную память (МПП) — регистры общего назначения;
- интерфейсную, содержащую адресные регистры, устройство управления, регистры памяти для хранения кодов команд, выполняемых в ближайшие такты; схемы управления шиной и портами.
Обе части ЦП работают параллельно, причем интерфейсная часть опережает операционную, так что выборка очередной команды из памяти (ее запись в блок регистров команд и предварительный анализ) происходит во время выполнения операционной частью предыдущей команды. Такая организация ЦП позволяет существенно повысить его эффективное быстродействие.
Устройство управления (УУ) вырабатывает управляющие сигналы, поступающие по кодовым шинам инструкций в другие блоки вычислительной машины. УУ формирует управляющие сигналы для выполнения команд центрального процессора.
Арифметико-логическое устройство (АЛУ) предназначено для выполнения арифметических и логических операций преобразования информации.
Системная шина – набор проводников, по которым передаются сигналы, соединяющая процессор с другими компонентами на системной плате. Системная шина состоит из шины данных, шины адреса, шины управления.
- Шина данных – служит для пересылки данных между процессором и оперативным запоминающим устройством (ОЗУ).
- Шина адреса – используется для передачи сигналов, с помощью которых определяется местоположение ячейки памяти для выполняемых процессором операций чтения/записи и ввода-вывода.
- Шина управления – служит для пересылки управляющих сигналов. Каждая линия этой шины имеет своё особое назначение, поэтому они могут быть как однонаправленными, так и двунаправленными.
Микропроцессорная память
Микропроцессорная память представляет собой набор регистров, которые условно можно разделить на 4 группы:
- регистры общего назначения;
- сегментные регистры;
- регистр счетчика команд;
- регистр признаков.
Регистр – устройство сверхбыстродействующей памяти в процессоре, служащее для временного хранения управляющей информации, операндов и/или результатов выполняемых операций. Совокупность регистров процессора называется набором регистров .
Набор регистров общего назначения 32-битной архитектуры центрального процессора включает в себя
- 4 универсальных регистра: EAX, EBX, ECX, EDX ;
- 2 индексных регистра: ESI, EDI ;
- 2 регистра для работы со стеком: ESP, EBP .
Регистр EAX (аккумулятор) – автоматически применяется при операциях умножения, деления и при работе с портами ввода-вывода. Его использование в арифметических, логических и некоторых других операциях позволяет увеличить скорость их выполнения. Используется для записи возвращаемого значения из функции.
Регистр EBX (регистр базы) – может содержать адреса элементов оперативной памяти. По умолчанию эти адреса будут представлять собой смещение в сегменте данных.
Регистр ECX (счетчик) – используется в операциях повторения, например в циклах, в строковых командах и т.д.
Регистр EDX (регистр данных) – является единственным элементом, который может хранить адреса портов ввода-вывода в командах типа IN (получить из порта) и OUT (вывести в порт). Без его помощи невозможно обратиться к портам с адресами в адресном пространстве больше 1 байта. Автоматически применяется также в операциях умножения и деления.
Индексные регистры используются для выполнения косвенной адресации, а также автоматически используются в строковых командах. Каждый 32-разрядный индексный регистр представляет собой логическое объединение, позволяющее отдельно обратиться к своей младшей 16-разрядной части.
Регистр ESI (регистр индекса источника) может содержать адреса элементов в оперативной памяти. По умолчанию эти адреса будут представлять собой смещение в сегменте данных. При выполнении операций со строками в этом регистре содержится смещение строки источника в сегменте данных.
Регистр EDI (регистр индекса приемника) может содержать адреса элементов в оперативной памяти. По умолчанию эти адреса будут представлять собой смещение в сегменте данных. При выполнении операций со строками в этом регистре содержится смещение строки приемника в сегменте данных.
Регистры для работы со стеком используются для хранения вершины стека ( ESP ) и текущего элемента (базы) — EBP . Каждый 32-разрядный регистр для работы со стеком представляет собой логическое объединение, позволяющее отдельно обратиться к своей младшей 16-разрядной части.
Регистр EBP (указатель базы) может содержать адреса элементов в оперативной памяти. Эти адреса будут представлять собой смещение в сегменте стека.
Регистр ESP (указатель стека) используется для записи данных в стек и чтения их из стека. Фактически он содержит смещение в сегменте стека, которое определяет нужное слово памяти. Значения этого регистра автоматически меняются командами для работы со стеком типов push, pop, pushf, popf, call, ret .
Сегментные регистры представляют собой набор 16-разрядных регистров (для 32-битной архитектуры центрального процессора).
Сегмент — это логический элемент программы, который представляет собой независимый, поддерживаемый на аппаратном уровне блок памяти.
Регистр CS (регистр сегмента кода) определяет стартовый адрес сегмента, в который помещается код выполняемой программы. Это единственный сегментный регистр, который нельзя загрузить непосредственно. Косвенно загрузить в регистр CS новое значение могут команды вида jxx, call, int, ret, iret .
Регистр DS (регистр сегмента данных) определяет стартовый адрес сегмента, в который помещаются данные для программы. По умолчанию смещения в сегменте данных задаются в регистрах EBX , ESI и EDI .
Регистр SS (регистр сегмента стека) определяет стартовый адрес сегмента, в который помещается стек для программы. По умолчанию смещения для сегмента стека задаются в регистрах ESP и EBP .
Регистры ES, FS, GS (регистры сегментов дополнительных данных) опредляют стартовый адрес сегмента, в который помещаются дополнительные данные для программы. Например, в случае строковых команд, DS определяет сегмент для строки-источника, а ES – сегмент для строки-приемника. За исключением строковых команд, доступ к данным в сегменте ES обычно менее эффективен, чем в сегменте DS .
Регистр счетчика команд
Регистр EIP (указатель команд) содержит смещение в сегменте кода следующей выполняемой команды. Как только некоторая команда начинает выполняться, значение регистра EIP увеличивается на ее длину так, что будет адресовать следующую команду. Физический адрес команды в памяти выполняемой программы определяет пара регистров CS:EIP , то есть к физическому адресу начала сегмента кода добавляется смещение следующей команды в сегменте кода, хранящееся в регистре EIP .
Обычно команды выполняются в той последовательности, в которой они расположены в программе. Нарушают эту последовательность только команды переходов (они начинаются с буквы j: jxx ), команды вызова подпрограммы ( call ), обработчиков прерываний ( int ) и возврата ( ret, iret ). Непосредственно содержимое EIP нельзя изменить или прочитать. Косвенно загрузить в регистр EIP новое значение могут только команды jxx, call, int, ret, iret . Регистр EIP является 32-битным. Младшая 16-битная часть регистра счетчика команд имеет имя IP .
Регистр признаков
Регистр признаков EFLAGS включает биты, каждый из которых устанавливается в единичное или в нулевое состояние при определенных условиях. Регистр EFLAGS 32-битный. Младшая 16-битная часть регистра признаков имеет имя FLAGS .
Все биты регистра признаков подразделяются на
- s — биты состояния ( STATUS );
- c — биты управления ( CONTROL );
- x — системные биты ( SYSTEM ).
CF – бит переноса: устанавливается в 1, когда арифметическая операция генерирует перенос или выход за разрядную сетку результата. сбрасывается в 0 в противном случае. Этот флаг показывает состояние переполнения для беззнаковых целочисленных арифметических действий. Он также используется в арифметических действиях с повышенной точностью. Может быть установлен командой STC или сброшен командой CLC .
PF – бит четности: устанавливается в 1, если результат последней операции имеет четное число единиц.
AF – бит вспомогательного переноса: устанавливается в 1, если арифметическая операция генерирует перенос из младшей тетрады битов (из 3 бита в 4), сбрасывается в 0 в противном случае. Этот флаг используется в двоично-десятичной арифметике.
ZF – бит нулевого значения: устанавливается в 1, если результат нулевой, сбрасывается в 0 в противном случае.
SF – знаковый бит: устанавливается равным старшему биту результата, который определяет знак в знаковых целочисленных операциях (0 – положительное число, 1 – отрицательное число).
TF – бит пошаговой отладки: устанавливается в 1 для включения режима пошаговой отладки программы, сбрасывается в 0 в противном случае.
IF – бит прерываний: при значении 1 микропроцессор реагирует на внешние аппаратные прерывания по входу INTR. При значении 0 микропроцессор игнорирует внешние прерывания.
DF – бит направления: управляет строковыми командами ( MOVS, CMPS, SCAS, LODS, STOS ). Если DF = 1 (команда STD ), то содержимое индексных регистров ESI, EDI увеличивается, если DF = 0 (команда CLD ), то содержимое индексных регистров ESI, EDI уменьшается.
OF – бит переполнения: устанавливается в 1, если целочисленный результат выходит за пределы разрядной сетки. Тем самым данный бит указывает на потерю старшего бита результата.
IOPL – уровень приоритета: 2-битовое поле, которое отображает уровень приоритета ввода-вывода для выполняемой в данное время программы или задачи. Действительный приоритет задачи может быть меньше или равен IOPL.
NT – флаг вложенной задачи: управляет последовательностью вызванных и прерванных задач. Установлен в 1, если текущая задача связана с предыдущей, сброшен в 0, если текущая задача не связана с другими задачами.
RF — флаг возобновления: используется при обработке прерываний от регистров отладки.
VM — флаг виртуального 8086: признак работы процессора в режиме виртуального 8086: 1 – процессор работает в режиме виртуального 8086, 0 – процессор работает в реальном или защищенном режиме.
AC — флаг контроля выравнивания: предназначен для разрешения контроля выравнивания при обращениях к памяти. Если требуется контролировать выравнивание данных и команд по адресам, кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по некратным адресам будут вызывать исключительную ситуацию.
VIF — флаг виртуального прерывания: при определенных условиях (одно из которых – работа микропроцессора в V-режиме) является аналогом флага IF . Флаг VIF используется совместно с флагом VIP .
VIP — флаг отложенного виртуального прерывания: устанавливается в 1 для индикации отложенного прерывания. Используется совместно с VIF в виртуальном режиме.
ID — флаг поддержки идентификации процессора: используется для отображения поддержки микропроцессором инструкции CPUID .
Программная модель – это часть компьютера, оставленная видимой и доступной для программирования на Ассемблере, содержит 32 регистра, доступных в той или иной мере программисту. Регистры делятся на 2 большие группы, в каждой из которых по 16 регистров:
1.Пользовательские: программист использует их при написании своих программ. Они делятся на 3 группы: а) 8 32-битных регистров – РОНы. Туда входят ЕАХ, ЕВХ, ЕСХ, EDX, EBP, ESI, EDI, ESP. Первый регистр – аккумулятор, применяется для хранения промежуточных данных, его использование обязательно. Второй – базовый, применяется для хранения базового адреса некоторого объекта в памяти. Третий – счетчик, применяется в командах, производящих некоторые повторяющиеся действия, часто используется неявно и скрыто. Четвертый – регистр данных, хранит промежуточные данные, в некоторых командах используется обязательно и неявно. Шестой и седьмой – регистры для поддержки цепочечных операций, шестой – индекс источника, седьмой – индекс приемника. Пятый и восьмой – регистры для работы со стеком, восьмой – регистр указателя стека, содержит указатель вершины стека в текущем сегменте, пятый – регистр-указатель базы стека, предназначен для произвольного доступа к данным в стеке.
б) 6 регистров сегментов – CS, DS, SS, ES, FS, GS. Первый – сегмент кода, содержит адрес сегмента программы, к которому имеет доступ микропроцессор. Второй – сегмент данных, содержит обрабатываемые данные. Третий – сегмент стека. Четвертый, пятый, шестой – дополнительные сегменты данных.
в) 2 регистра флагов – Eflags, EIP. Первый – отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Второй – содержит смещение относительно регистра входа. Их делят на 3 группы: 1)Восемь флагов состояния – флаги определяют состояние по результатам арифметических и логических операций (CF – флаг переноса, ZF – флаг нуля, SF – флаг знака); 2) Флаг управления – DF определяет направление обработки цепочечной операции. 3) Пять системных флагов, управляющих вводом/выводом и отладкой.
Системы команд.
Системы команд являются одной из важнейших архитектурных характеристик, определяет совокупность операций, реализуемых процессором. В понятие система команд входят форматы команд и обрабатываемых данных, список команд и их функциональное назначение, способы адресации к данным. процессоры с RISC-архитектурой – процессоры с сокращенным набором команд и процессоры с CISC-архитектурой – процессоры со сложным набором команд.
10 наиболее часто используемых команд.
1) загрузка (22%), 2) условные переходы (20%), 3) сравнение (16%), 4) запись данных (12%), 5) сложение (8%), 6) логическое И (6%), 7) вычитание (5%), 8) пересылка регистр в регистр (4%),
9) вызов подпрограмм (1%), 10) возврат в подпрограммы (1%).
CISC и RISC-процессоры характеризуются различными показателями производительности. Оба типа обеспечивают достижение максимальных показателей, используя свою систему команд. Для повышения производительности необходимо уменьшить либо число команд в программе (CISC) либо среднее время выполнения (RISC).
CISC характеризуется следующим набором свойств: нефиксированное значение длины команды; арифметические действия выполняются одной инструкцией; небольшое число регистров.
Примерное количество команд – 100-200.
RISC характеризуется следующим набором свойств: архитектура позволяет удешевить процессор, поднять тактовую частоту и распараллелить исполнение команд; одинаковая длина команд облегчает их выборку из памяти, чтение идет за один такт; сокращенный набор действий над операндами, размещенными в памяти, используются простые способы адресации, что обеспечить доступ к памяти. Используется большое число РОНов, что уменьшает число обращений к памяти; все вычислительные операции выполняются над данными, находящимися в регистрах; относительно простые схемы управления, отсутствие микропрограмм внутри процессора.
Типичными представителями CISC является процессор на основе Х86 до Pentium 4. Однако процессоры, начиная с 486, являются CISC с ядром RISC.
Расширения стандартного набора команд.
Для организации групповой обработки данных в процессорах используется SIMD-расширения инструкций. Под этим расширением понимается программно-аппаратное решение, представляющее собой совокупность дополнительных регистров и наборов инструкций процессора, предназначенных для групповой обработки данных. Для использования этих расширений необходимо наличие соответствующего компилятора.
Технология MMX – предназначена для поддержки приложений, ориентированных на обработку больших массивов данных целого типа, над которыми выполняются одинаковые операции (для обработки мультимедиа, потоков сетевых данных). Система команд ММХ содержит 57 инструкций и 4 новых типа данных и 8 ММХ-регистров по 64 бита каждый. Позволяет обрабатывать данные по 1, 2, 4 и 8 пакета.
SSE, SSE-2, SSE-3 – обновление технологии ММХ, оперирующие данными вещественного типа для геометрических расчетов в трехмерных приложениях. Инструкции содержат 70 новых команд (144 – для SSE-2). SSE-3 признано облегчить оптимизацию программ под SSE и SSE-2.
3DNow – аналогично предыдущим, предназначена для ускорения обработки мультимедиа и трехмерной графики. Представляет собой набор из 21 инструкции, используется в AMD.
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой.
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.
© cyberpedia.su 2017-2020 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!
Любая выполняющаяся программа получает в свое распоряжение определенный набор ресурсов процессора. Эти ресурсы необходимы для обработки и хранения в памяти команд и данных программы, а также информации о текущем состоянии программы и процессора. Программную модель процессора в архитектуре IA-32 процессоров Intel составляет следующий набор ресурсов (рис.5):
Рис. 1. Программная модель процессора
пространство адресуемой памяти до 2 32 - 1 байт (4 Гбайт), для Pentium III/IV – до 2 36 - 1 байт (64 Гбайт);
набор регистров для хранения данных общего назначения;
набор сегментных регистров;
набор регистров состояния и управления;
набор регистров устройства вычислений с плавающей точкой (сопроцессора);
набор регистров целочисленного MMX-расширения, отображенных на регистры сопроцессора (впервые появились в архитектуре процессора Pentium MMX);
набор регистров MMX-расширения с плавающей точкой (впервые появились в архитектуре процессора Pentium III);
программный стек – специальная информационная структура, работа с которой предусмотрена на уровне машинных команд (более подробно она будет обсуждена позже).
Это основной набор ресурсов. Кроме того, к ресурсам, поддерживаемым архитектурой IA-32, необходимо отнести порты ввода-вывода, счетчики мониторинга производительности.
Режимы работы процессора архитектуры IA-32
Режим работы процессора определяет поведение, номенклатуру и свойства доступных ресурсов процессора. Перевод процессора из одного режима в другой осуществляется специальными программными и аппаратными методами.
В рамках архитектуры IA-32 доступны следующие режимы работы процессора. Режим реальных адресов, или просто реальный режим (real mode) – это режим, в котором работал i8086. Наличие его в i486 и Pentium обусловлено тем, что фирма Intel старается обеспечить в новых моделях процессоров возможность функционирования программ, разработанных для ранних моделей.
Защищенный режим (protected mode) позволяет максимально реализовать все идеи, заложенные в процессорах архитектуры IA-32, начиная с i80286. Программы, разработанные для i8086 (реального режима), не могут функционировать в защищенном режиме. Одна из причин этого связана с особенностями формирования физического адреса в защищенном режиме.
Режим виртуального процессора 8086 предназначен для организации многозадачной работы программ, разработанных для реального режима (процессора i8086), совместно с программами защищенного режима. Переход в этот режим (virtual 8086 mode) возможен, если процессор уже находится в защищенном режиме. Работа программ реального режима в режиме виртуального i8086 возможна благодаря тому, что процесс формирования физического адреса для них производится по правилам реального режима.
Режим системного управления (System Management Mode, SMM) – это режим работы процессора, обеспечивающий операционную систему механизмом для выполнения машинно-зависимых функций. Для перехода в данный режим процессор должен получить специальный сигнал SMI от усовершенствованного программируемого контроллера прерывании (Advanced Programmable Interrupt Controller, APIC), при этом сохраняется состояние вычислительной среды процессора. Функционирование процессора в этом режиме подобно его работе в режиме реальных адресов. Возврат из этого режима производится специальной командой процессора.
Процессор всегда начинает работу в реальном режиме.
Регистрами называются области высокоскоростной памяти, расположенные внутри процессора в непосредственной близости от его исполнительного ядра. Доступ к ним осуществляется несравнимо быстрее, чем к ячейкам оперативной памяти. Соответственно, машинные команды с операндами в регистрах выполняются максимально быстро, поэтому в программах на языке ассемблера регистры используются очень интенсивно.
Большинство регистров имеют определенное функциональное назначение. С точки зрения программиста, их можно разделить на две большие группы.
Первую группу образуют пользовательские регистры, к которым относятся:
регистры общего назначения EAX/AX/AH/AL, EBX/BX/BH/BL, EDX/DX/DH/DL, ЕСХ/ CX/CH/CL, ЕВР/ВР, ESI/SI, EDI/DI, ESP/SP предназначены для хранения данных и адресов, программист может их использовать (с определенными ограничениями) для реализации своих алгоритмов;
сегментные регистры CS, DS, SS, ES, FS, GS используются для хранения адресов сегментов в памяти;
регистры сопроцессора ST(0), ST(1). ST(2), ST(3), ST(4), ST(5), ST(6), ST(7) предназначены для написания программ, использующих тип данных с плавающей точкой;
целочисленные регистры MMX-расширения ММХ0, ММХ1, ММХ2, ММХЗ, ММХ4, ММХ5, ММХ6, ММХ7;
регистры MMX-расширения с плавающей точкой XMM0, XMM1, ХММ2, ХММЗ, ХММ4,ХММ5,ХММ6,ХММ7;
регистры состояния и управления (регистр флагов EFLAGS/FLAGS и регистр-указатель команды EIP/IP) содержат информацию о состоянии процессора, исполняемой программы и позволяют изменить это состояние.
Во вторую группу входят системные регистры, то есть регистры, предназначенные для поддержания различных режимов работы, сервисных функций, а также регистры, специфичные для определенной модели процессора. Перечислим системные регистры, поддерживаемые IA-32:
управляющие регистры CR0.. .CR4 определяют режим работы процессора и характеристики текущей исполняемой задачи;
регистры управления памятью GDTR, IDTR, LDTR и TR используются в защищенном режиме работы процессора для локализации управляющих структур этого режима;
отладочные регистры DR0.. .DR7 предназначены для мониторинга и управления различными аспектами отладки;
регистры типов областей памяти MTRR используются для аппаратного управления кэшированием в целях назначения соответствующих свойств областям памяти;
машинно-зависимые регистры MSR используются для управления процессором, контроля за его производительностью, получения информации об ошибках.
Многие из приведенных регистров предназначены для работы с определенными вычислительными подсистемами процессора; сопроцессором, MMX-расширениями. Поэтому их целесообразно рассматривать в соответствующем контексте.
Регистры общего назначения
Регистры общего назначения используются в программах для хранения:
операндов логических и арифметических операций;
указателей на ячейки памяти.
В принципе, все эти регистры доступны для хранения операндов без особых ограничений, хотя в определенных условиях некоторые из них имеют жесткое функциональное назначение, закрепленное на уровне логики работы машинных команд. Среди всех этих регистров особо следует выделить регистр ESP. Его не следует использовать явно для хранения каких-либо операндов программы, так как в нем хранится указатель на вершину стека программы.
регистр-аккумулятор (Accumulator register) EAX/AX/AH/AL применяется для хранения промежуточных данных, в некоторых командах его использование обязательно;
базовый регистр (Base register) EBX/BX/BH/BL применяется для хранения базового адреса некоторого объекта в памяти;
регистр-счетчик (Count register) ECX/CX/CH/CL применяется в командах, производящих некоторые повторяющиеся действия. Использование регистра-счетчика зачастую скрыто в алгоритме работы той или иной команды. Например, команда организации цикла LOOP помимо передачи управления анализирует и уменьшает на единицу значение регистра ЕСХ/СХ;
регистр данных (Data register) EDX/DX/DH/DL, так же как и регистр ЕАХ/АХ/АН/ AL, хранит промежуточные данные (в некоторых командах его явное использование обязательно, в других он используется неявно).
Следующие два регистра предназначены для поддержки так называемых цепочечных операций, то есть операций, производящих последовательную обработку цепочек элементов, каждый из которых может иметь длину 32, 16 или 8 бит:
регистр индекса источника (Source Index register) ESI/SI в цепочечных операциях содержит текущий адрес элемента в цепочке-источнике;
регистр индекса приемника (Destination Index register) EDI/DI в цепочечных операциях содержит текущий адрес в цепочке-приемнике. В архитектуре процессора на программно-аппаратном уровне поддерживается такая структура данных, как стек. Для работы со стеком в системе команд процессора есть специальные команды, а в программной модели процессора для этого существуют специальные регистры:
регистр указателя стека (Stack Pointer register) ESP/SP содержит указатель на вершину стека в текущем сегменте стека;
регистр указателя базы кадра стека (Base Pointer register) EBP/BP предназначен для организации произвольного доступа к данным внутри стека.
Жесткое функциональное назначения регистров АЛУ обуславливается тем, что при программировании хранить операнды команд можно в большинстве регистров, причем практически в любых сочетаниях. Однако всегда следует помнить, что некоторые команды требуют строго определенных регистров. Цель подобного жесткого закрепления регистров для этих команд – более компактная кодировка их машинного представления.
Процессоры Intel аппаратно поддерживают сегментную организацию программы.
Это означает, что любая программа состоит из трех сегментов: кода, данных и стека. Логически машинные команды в архитектуре IA-32 построены так, что при выборке каждой команды для доступа к данным программы или к стеку неявно используется информация из вполне определенных сегментных регистров. В зависимости от режима работы процессора по их содержимому определяются адреса памяти, с которых начинаются соответствующие сегменты. В программной модели IA-32 имеется шесть сегментных регистров CS, SS, DS, ES, GS, FS, служащих для доступа к четырем типам сегментов.
Сегмент кода содержит команды программы. Для доступа к этому сегменту служит регистр сегмента кода (Code Segment register) CS. Он содержит адрес сегмента с машинными командами, к которому имеет доступ процессор (эти команды загружаются в конвейер процессора).
Сегмент данных содержит обрабатываемые программой данные. Для доступа к этому сегменту служит регистр сегмента данных (Data Segment register) DS, который хранит адрес сегмента данных текущей программы.
Сегмент стека представляет собой область памяти, называемую стеком. Работу со стеком процессор организует по следующему принципу: последний записанный в эту область элемент выбирается первым. Для доступа к этой области служит регистр сегмента стека (Stack Segment register) SS, содержащий адрес сегмента стека.
Дополнительный сегмент данных. Неявно алгоритмы выполнения большинства машинных команд предполагают, что обрабатываемые ими данные расположены в сегменте данных, адрес которого находится в регистре сегмента данных DS. Если программе недостаточно одного сегмента данных, то она имеет возможность задействовать еще три дополнительных сегмента данных. Но в отличие от основного сегмента данных, адрес которого содержится в регистре DS, при использовании дополнительных сегментов данных их адреса требуется указывать явно с помощью специальных префиксов переопределения сегментов в команде. Адреса дополнительных сегментов данных должны содержаться в регистрах дополнительного сегмента данных (Extension Data Segment registers) ES, GS, FS.
Регистры состояния и управления
В процессор включены два регистра, постоянно содержащие информацию о состоянии как самого процессора, так и программы, команды которой он в данный момент обрабатывает:
регистр-указатель команд EIP/IP;
регистр флагов EFLAGS/FLAGS.
С помощью этих регистров можно также ограниченным образом управлять состоянием процессора.
Регистр-указатель команд (Instruction Pointer register) EIP/IP имеет разрядность 32(16) бита и содержит смещение следующей подлежащей выполнению команды относительно содержимого регистра сегмента кода CS в текущем сегменте команд. Этот регистр непосредственно недоступен программисту, но загрузка и изменение его значения производятся различными командами управления, к которым относятся команды условных и безусловных переходов, вызова процедур и возврата из процедур. Возникновение прерываний также приводит к модификации регистра EIP/IP.
Разрядность регистра флагов (flag register) EFLAGS/FLAGS равна 32(16) битам (рис. 2). Отдельные биты данного регистра имеют определенное функциональное назначение и называются флагами. Младшая часть регистра EFLAGS/FLAGS полностью аналогична регистру FLAGS процессора i8086. На рис. 6 показано содержимое регистра EFLAGS.
Рис. 2. Структура регистра флагов
Исходя из особенностей использования, флаги регистра EFLAGS/FLAGS можно разделить на три группы.
В первую группу флагов регистра EFLAGS/FLAGS входят 8 флагов состояния. Эти флаги могут изменяться после выполнения машинных команд. Флаги состояния регистра EFLAGS отражают особенности результата исполнения арифметических или логических операций. Это дает возможность анализировать состояние вычислительного процесса и реагировать на него с помощью команд условных переходов и вызовов подпрограмм.
Флаг переноса (carry flag) CF:
1 – арифметическая операция произвела перенос из старшего бита результата, старшим является 7-й, 15-й или 31-й бит в зависимости от размерности операнда;
0 – переноса не было.
Флаг четности (parity flag) PF:
1 – 8 младших разрядов (этот флаг только для 8 младших разрядов операнда любого размера) результата содержат четное число единиц;
0 – 8 младших разрядов результата содержат нечетное число единиц.
Вспомогательный флаг переноса (auxiliary carry flag) AF применяется только для команд, работающих с BCD-числами. Фиксирует факт заёма из младшей тетрады результата:
1 – в результате операции сложения был произведен перенос из разряда 3 в старший разряд или при вычитании был заем в разряд 3 младшей тетрады из значения в старшей тетраде;
0 – переносов и заемов в третий разряд (из третьего разряда) младшей тетрады результата не было.
Флаг нуля (zero flag) ZF;
1 - результат нулевой;
0 – результат ненулевой.
1 – старший бит результата равен 1;
0 – старший бит результата равен 0.
Флаг переполнения (overflow flag) OF используется для фиксации факта потери значащего бита при арифметических операциях:
0 – в результате операции не происходит переноса в старший знаковый бит результата или заема из старшего знакового бита результата.
Уровень привилегированности, ввода-вывода (Input/Output privilege level) IOPL используется в защищенном режиме работы процессора для контроля доступа к командам ввода-вывода в зависимости от привилегированности задачи.
Флаг вложенности задачи (nested task) NT используется в защищенном режиме работы процессора для фиксации того факта, что одна задача вложена в другую.
Во вторую группу флагов (группа флагов управления) регистра EFLAGS/FLAGS входит всего один флаг направления (directory flag) DF. Он находится в десятом бите регистра EFLAGS и используется цепочечными командами. Значение флага DF определяет направление поэлементной обработки в этих операциях: от начала строки к концу (DF = 0) либо, наоборот, от конца строки к ее началу (DF =1). Для работы с флагом DF существуют специальные команды CLD (снять флаг DF) и STD (установить флаг DF), Применение этих команд позволяет привести флаг DF в соответствие с алгоритмом и обеспечить автоматическое увеличение или уменьшение счетчиков при выполнении операций со строками.
В третью группу флагов регистра EFLAGS/FLAGS входит 8 системных флагов, управляющих вводом-выводом, маскируемыми прерываниями, отладкой, переключением между задачами и режимом виртуального процессора 8086. Прикладным программам не рекомендуется модифицировать без необходимости эти флаги, так как в большинстве случаев это ведет к прерыванию работы программы. Далее перечислены системные флаги и их назначение.
Флаг трассировки (trace flag) TF предназначен для организации пошаговой работы процессора:
1 – процессор генерирует прерывание с номером 1 после выполнения каждой машинной команды (может использоваться при отладке программ, в частности отладчиками);
0 – обычная работа.
Флаг прерывания (interrupt enable flag) IF предназначен для разрешения или запрещения (маскирования) аппаратных прерываний (прерываний по входу INTR):
1 – аппаратные прерывания разрешены;
0 – аппаратные прерывания запрещены.
Флаг возобновления (resume flag) RF используется при обработке прерываний от регистров отладки.
Флаг режима виртуального процессора 8086 (virtual 8086 mode) VM является признаком работы процессора в режиме виртуального 8086:
1 – процессор работает в режиме виртуального процессора 8086;
0 – процессор работает в реальном или защищенном режиме.
Флаг контроля выравнивания (alignment check) AC предназначен для разрешения контроля выравнивания при обращениях к памяти. Используется совместно с битом AM в системном регистре CRO. К примеру, Pentium разрешает размещать команды и данные начиная с любого адреса. Если требуется контролировать выравнивание данных и команд по адресам, кратным 2 или 4, то установка данных битов приведет к тому, что все обращения по некратным адресам будут возбуждать исключительную ситуацию.
Флаг виртуального прерывания (virtual interrupt flag) VIF, появившийся в процессоре Pentium, при определенных условиях (одно из которых – работа процессора в v-режиме) является аналогом флага IF. Флаг VIF используется совместно с флагом VIP.
Флаг отложенного виртуального прерывания (virtual interrupt pending flag) VIP, появившийся в процессоре Pentium, устанавливается в 1 для индикации отложенного прерывания. Используется при работе в v-режиме совместно с флагом VIF.
Флаг идентификации (identification flag) ID используется для того, чтобы показать факт поддержки процессором инструкции CPUID. Если программа может установить или сбросить этот флаг, это означает, что данная модель процессора поддерживает инструкцию CPUID.
Читайте также: