16-разрядный микропроцессор. Регистры флагов процессора. Программная модель 16-разрядных микропроцессоров.
Доброго времени суток уважаемый пользователь. На этой страничке мы поговорим на такие темы, как : 16-разрядный микропроцессор. Регистры флагов процессора, Программная модель 16-разрядных микропроцессоров.
Как известно в любом процессоре формально можно выделить три части: регистры, арифметико-логическое устройство (АЛУ) и систему управления. С позиции пользователя структура регистров представляет основной интерес. Регистры можно рассматривать как самую быструю оперативную память (регистровую память), применение которой обеспечивает максимальную производительность процессора. Регистры используются для промежуточного хранения команд, данных, текущих результатов, адресов, управляющих признаков и их состояние часто может определяться программистом, который на языке Ассемблера может управлять содержимым программно доступных регистров.
Регистры флагов процессора.
МП 8086 имеют следующие группы регистров:
- Регистры общего назначения (РОН) — 8 регистров.
- Сегментные регистры — 4 регистра.
- Указатель команд и флаги — 2 регистра.
Регистры общего назначения (РОН) составляют группу регистров, которые в первую очередь используются для вычислительных целей. Все эти регистры имеют ширину 16 бит, но программа может в индивидуальном порядке использовать старшую или младшую 8-битовые части каждого регистра.
Например, ширина регистра АХ составляет 16 бит; программа может ссылаться на старшие 8 бит регистра АХ, как на регистр АН, а младшие S бит — это регистр AL. То же самое справедливо и для регистров ВХ, СХ и DX.
Основная цель, для которой предназначены регистры общего назначения — хранение операндов. Регистры общего назначения хороши тем, что они могут хранить как слово, так и байт данных. Однако иногда эти регистры имеют специальное назначение, приписываемое им некоторыми командами.
Регистр АХ соответствует аккумулятору разработанных ранее микропроцессоров (8080). Регистр ВХ используется для адресации и для хранения операндов. Когда он используется как 16-битовый регистр, то может быть компонентой при определении адреса операнда.
Регистр СХ используется в качестве счетчика, в котором хранится число повторений одной команды или фрагмента программы. Регистр DX используется при работе с числами повышенной точности, а также при умножении и делении. Регистры АХ и DX вместе участвуют в 32-битовых операциях.
Существуют пять 16-битовых регистров, которые могут принимать участие в адресации операндов. Одни из них одновременно является и регистром общего назначения — это регистр ВХ или регистр базы. Другие четыре регистра — это указатель базы ВР, указатель стека SP, индекс источника S1 и индекс приемника DI. Программа может использовать регистры ВР, SI и DI как 16-битовые операнды, но их отдельные байты ей недоступны. Основное назначение этих регистров — хранение 16-битовых значений, используемых при формировании адресов операндов.
Примечание
В МП 180×86 реализуется сегментированная модель памяти, при которой адресное пространство разделяется на блоки (сегменты) и адрес ячейки памяти складывается из адреса сегмента и адреса смешения внутри сегмента.
Программная модель 16-разрядных микропроцессоров.
16 — разрядные МП реализуют режим реального адреса (R — режим) с 20 — разрядной шиной адреса и доступным адресным пространством до 1 Мбайт. В этом режиме для адресации сегмента и смещения используется по 16 разрядов.. Поэтому размер каждого сегмента составляет 216 =64 Кбайт. Минимальное адресное расстояние между сегментами составляет 16 байт (1 параграф). Относительное расположение сегментов произвольное: сегменты могут совпадать, пересекаться, следовать непосредственно друг за другом.
Сегментные регистры используются для формирования базового адреса. Микропроцессор имеет четыре сегментных регистра: CS, DS, SS и ES для доступа в памяти к сегментам команд, данных, стека и дополнительного сегмента, соответственно. Каждый из них используется по своему назначению, но их использование может изменяться в соответствии с требованиями программы.
При выполнении любой программы выделяются одновременно доступные ей 4 сегмента, адреса которых располагаются в сегментных регистрах: CS — сегмент для расположения кода в программу, DS – сегмент данных и SS — сегмент стека для расположения данных с дисциплиной обслуживания LIFO (Last Input First Output- последний пришел, первый обслужен).
Микропроцессор использует сегментный регистр команд CS для определения сегмента, содержащего выполняемую программу. Выборка команды происходит из памяти по адресу, заданному парой регистров CS:IP, то есть регистр IP содержит смешение следующей выполняемой команды.
Примечание
Микропроцессор использует сегментный регистр данных DS для обычного доступа к данным, аналогично рассмотренному выше.
Сегментный регистр стека SS задает системный стек. Команды PUSH, POP, CALL, RET и IRET обрабатывают данные в стеке, находящиеся в месте, определяемом парой регистров SS:SP. Регистр SP служит указателем в стековом сегменте. Всякий раз, когда при адресации используется регистр SP, по умолчанию используется сегментный регистр стека.
Существуют специальные команды обработки строк для пересылки данных, которые автоматически используют DS и ES как сегменты источника команды происходит из памяти по адресу, заданному парой регистров CS:IP, то есть регистр IP содержит смешение следующей выполняемой команды.
Дополнительный сегментный регистр ES используется для ссылок к данным в случаях, когда требуется более одного сегмента. Обычной операцией в программе является копирование информации из одной области памяти в другую. Если эти области расположены не внутри одного поля размером 64К, то переместить данные, используя единственный сегментный регистр, невозможно. С помощью дополнительного сегментного регистра программа может одновременно определить сегменты источника и результата. Регистр DS локализует область исходных данных, а регистр ES указывает на сегмент результата.
Существуют специальные команды обработки строк для пересылки данных, которые автоматически используют DS и ES как сегменты источника и результата.
Адресуемое пространство памяти R — режима составляет 220 = 1 Мбайт, т.е. длина физического адреса составляет 20 разрядов. При формировании адреса используется следующая терминология :
- Логический адрес — 32 разрядный указатель, содержащий 16 разрядов адрес сегмента и 16 разрядов адрес смешения.
- базовый адрес (БА) — физический 20 — разрядный адрес сегмента, который устанавливается путем сдвига содержания сегментного регистра влево на 4 разряда (т.е. умножения на 24 = 16 содержания сегментного регистра).
- эффективный адрес (ЭА) — адрес смещения относительно адреса сегмента (линейный адрес относительно адреса сегмента, относительный адрес внутри сегмента, смещение). Эффективный адрес вычисляется в соответствии со структурой команды, в которой могут задаваться смешение, база и др. (не пугайте с базовым адресом) (например ЭА = база + смешение) или может непосредственно находиться в регистре ( например IP, BP и др.)
- линейный адрес (ЛА)- адрес, образуемый как сумма базового адреса .
- физический адрес (ФА) — адрес, задаваемый на адресные шины памяти, в МП 8086 линейный адрес является физическим адресом.
Схема формирования физического адреса в R — режиме (вычисление выполняется внутри процессора блоком формирования адреса) определяется как ФА = ЛА = БА * 16 + ЭА представлена ниже.
Регистр флагов содержит информацию, которая используется побитно. Все флаги младшего байта регистра флагов устанавливаются арифметическими или логическими операциями процессора. Например, команда ADD устанавливает все флаги младшего байта в соответствии с результатом операции. За исключением флага переполнения (OF), все флаги старшего байта устанавливаются и сбрасываются специально предназначенными для vi.no командами. Флаги старшего байта отражают состояние МП 8086 и влияют на характер выполнения программы. Флаги младшего байта являются кодами условия, которые могут быть опрошены командами условного перехода для изменения порядка выполнения программы. Флаги можно разделить на флаги состояния ( показывают результат выполнения команды — это все флаги младшего байта CF, PF, AF, ZF, SF и флаг OF старшего байта) и флаги управления. Флаги состояния:
- флаг переноса CF (разряд 0) отмечает наличие переноса из старшего разряда при выполнении операций.
- флаг четности PF (разряд 2) показывает, четно или нечетно число единиц результата. Программа может использовать флаг четности для контроля результата. Флаг четности устанавливается равным 1,если результат операции имеет четное число единиц, и устанавливается равным 0, если число единиц результата нечетно.
- флаг дополнительного переноса AF (разряд 4) позволяет микропроцессору выполнять команды десятичной арифметики, фиксирует перенос из 3-го в 4-й разряд и наоборот.
- флаг нуля ZF (разряд 6) показывает, что результат последней операции был равен 0. Программа может использовать этот флаг для определения, равны ли два числа, вычитая одно из другого.
- флаг знака SF ( разряд 7) показывает положительным или отрицательным был результат последней арифметической или логической операции. Установка бита знака отражает значение старшего бита последнего результата. Если полученный результат отрицателен, бит знака устанавливается равным 1. Если же результат положителен или равен 0, бит знака обнуляется.
- флаг переполнения OF (разряд 11) — единственный флаг в старшем байте регистра флагов, который устанавливается обычными арифметическими операциями, остальные флаги старшего байта непосредственно устанавливаются программистом. OF — флаг переполнения знакового разряда.
Флаги управления:
- флаг трассировки TF( разряд 8) помогает отлаживать программы. Этот флаг не устанавливается в результате работы микропроцессора, а устанавливается программой с помощью специальной команды. Этот флаг называется также флагом пошаговой работы. Когда этот флаг установлен после выполнения каждой команды возникает прерывание.
- флаг прерываний IF ( разряд 9) управляет внешними прерываниями. Во время выполнения тех фрагментов программы пользователя, где внешние прерывания разрешать нежелательно, можно сбросить флаг прерываний. Пока флаг прерываний сброшен в 0, никакие внешние прерывания не обрабатываются.
- флаг направления DF( разряд 10), набор команд Mil 8086 содержит несколько команд обработки строк, которые работают с большими блоками данных. При обработке блоков данных эти команды работают с одним байтом или словом в каждый момент времени. Индексные регистры указывают на блоки данных. После обработки байта или слова процессор изменяет индексный регистр, чтобы ссылаться на следующий элемент блока. Строковые команды используют флаг направления для определения направления продвижения по блоку данных. Если флаг направления сброшен в 0, команды обработки строк увеличивают содержимое индексного регистра, а в противном случае они уменьшают содержимое индексного регистра.
МП 80286 является усовершенствованным вариантом 16 — разрядного МП 8086 с 24 — разрядной шиной адреса, который может работать кроме рассмотренного выше режима реального адреса R в 16- разрядном мультизадачном защищенном режиме Р16 (адресуемая память 224 = 4 Гбaйт), который не нашел широкого применения, однако в нем были заложены основные принципы мультизадачности.
Регистр флагов FLAGS имеет следующие дополнительные флаги. NT- разряд 14, флаг вложенности задач, используется в Р- режиме. Значение NT определяет, что выполняемая задача является вложенной в другую задачу. Значение NT определяет организацию возврата, выполняемую командой IRET: NT=0 — IRET выбирает данные из текущего стека, NT=1 — IRET выбирает данные из сегмента состояния задачи TSS. IOPL — разряды 12, 13, флаг уровня привилегий ввода/вывода (от 0 до 3), предоставляемый командам ввода/вывода в Р — режиме.
Слово состояния машины (MSW) — содержит флаги (дополнительные биты состояний), связанные с расширенными возможностями МП 80286.
Назначение флагов MSW следующее:
- РЕ — флаг «защита разрешена» (0- режим R, 1 — режим Р16). Установка в 1 производится при выполнении последовательности команд перевода в защищенный режим (в частности по команде загрузки MSW — LMSW). Сброс в 0 возможен только при сбросе микропроцессора.
- МР флаг «монитора процессора» работает совместно с флагом TS, разрешает прерывание при исключительной ситуации «Сопроцессор отсутствует» (прерывание имеет место при МР=1 и TS=1).
- ЕМ — флаг режима программной эмуляции команд сопроцессора 80287, при отсутствии сопроцессора (при ЕМ=1).
- TS — флаг «задача переключена» (автоматически устанавливается в 1 при переключении каждой задачи).
Расширения сегментных регистров — вызвано изменением формирования адресов памяти при работе микропроцессора в режиме Р16. При работе в режиме R назначение сегментных регистров и их использование остается такое же как и для микропроцессора 8086/8088. В защищенном режиме (Р16 и Р32) для обращения к памяти используются недоступные программам дополнительные регистры дескрипторов (описаний) сегментов (48 разрядов для Р16 и 64 разряда дляР32).
В ОЗУ организуется таблица дескрипторов сегментов. Содержание сегментного регистра (селектора) интерпретируется как индекс (номер строки) дескрипторной таблицы, а регистр дескрипторов содержит описание сегмента текущей задачи.
Системные регистры служат для организации Р — режима. Структура системных регистров аналогична структуре расширенных сегментных регистров, т.е. 16 — разрядный регистр — селектор и 48 — разрядный регистр дескриптора. Для управления памятью используются четыре системных регистра:
- IDTR — регистр дескриптор ной таблицы прерываний, определяет обращение к таблице точек входа обработки прерываний.
- GDTR — регистр глобальной дескрипторной таблицы, которая содержит описания сегментов памяти, доступных любой выполняемой задаче (общая память задач).
- LDTR — регистр локальной дескрипторной таблицы, указывающей на сегменты, доступные только конкретной задаче.
- TR — регистр задачи, который указывает на сегмент состояния текущей задачи (селектор и соответствующий ему дескриптор сегмента TSS ).
На этом данную статью я заканчиваю, надеюсь, вы полностью разобрались с темами : 16-разрядный микропроцессор. Регистры флагов процессора, Программная модель 16-разрядных микропроцессоров.