Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Стековая архитектура. Данная архитектура основана на базе стека (стековой памяти).



Стековая архитектура. Данная архитектура основана на базе стека (стековой памяти).

Стековое ЗУ состоит из множества логически взаимосвязанных ячеек, взаимодействующих по принципу «последним вошел, первым вышел» (LIFO, Last In First Out). Ячейки образуют одномерный массив, в котором соседние ячейки связаны друг с другом разрядными цепями передачи слов. Слова становятся доступными для чтения и записи только в определенном порядке. Каждое хранящееся слово привязано не к конкретной ячейке, а к своему положению относительно других хранящихся слов. Слова могут перемещаться по ячейкам, но при этом сохраняют свою взаимную упорядоченность. Поэтому достаточно обеспечить средства для чтения только определенной ячейки. Конкретное слово считывается в тот момент, когда в процессе перемещения по памяти оно оказывается в ячейке, из которой может производиться чтение. Аналогично достаточно обеспечить средства для записи только в определенную ячейку ЗУ.

Стек можно представить в виде вертикально расположенного массива ячеек (рис. 52). Доступ осуществляется всегда к верхней ячейке, которая называется вершиной стека.

Для работы со стеком предусмотрены две операции: push (проталкивание данных в стек) и pop (выталкивание данных из стека). Запись возможна только в верхнюю ячейку стека, при этом вся хранящаяся в стеке информация предварительно проталкивается на одну позицию вниз. Чтение допустимо также



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

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



Принцип действия стекового процессора поясним на примере вычисления выражения a = a + b + a x c. Это выражение в польской записи имеет вид: а = ab+acx+. Данная форма записи не содержит скобок и однозначно определяет порядок загрузки операндов в стек и порядок выполнения операций (рис. 53), т. е. может рассматриваться как программа вычисления исходного математического выражения, если под буквами понимать команды загрузки соответствующих операндов в стек (такие команды содержат только адрес операнда в основной памяти), а под знаками операций — безадресные команды, содержащие только коды операций. Эти безадресные команды инициируют извлечение из стека двух (или одного) операндов, выполнение над ними указанной в команде операции и засылку результата в вершину стека.



Информация может быть занесена в вершину стека из памяти или из АЛУ. Для записи в стек содержимого ячейки памяти с адресом x выполняется команда push х, по которой информация считывается из ячейки памяти, заносится в регистр данных, а затем проталкивается в стек. Результат операции из АЛУ заносится в вершину стека автоматически.

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

Для выполнения арифметической или логической операции на вход АЛУ подается информация, считанная из двух верхних ячеек стека (при этом содержимое стека продвигается на две позиции вверх, то есть операнды из стека удаляются). Результат операции заталкивается в вершину стека. Возможен вариант, когда результат сразу же переписывается в память с помощью автоматически выполняемой операции pop x.

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

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


2. Форматы команд 32-разрядных процессоров фирмы Intel Набор команд, реализуемый 32-разрядными процессорами фирмы Intel, обеспечивает выполнение операций над операндами, которые находятся в регистре, памяти или непосредственно в команде. Операнды могут содержать 8, 16 или 32 разряда. В набор входят безадресные, одно- и двухадресные команды. Процессор реализует следующие типы двухадресных команд:

• регистр - регистр;

• память - регистр;

• непосредственные данные - регистр;

• регистр - память;

• непосредственные данные - память.

Общий формат команды содержит следующие поля (рис. 55):

• COP - код операции;

• MDR/M, SIB - байты адресации;

• DISP - байты смещения;

• IMM - непосредственно заданный операнд.

 

COP

(1 или 2 байта)

MDR/M

(0 или 1 байт)

SIB

(0 или 1 байт)

DISP

(0, 1, 2 или 4 байта)

IMM

(0, 1, 2 или 4 байта)

Гис. 55

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

Код операции COP занимает 1 или 2 байта. Во многих командах пересылок, а также в логических и арифметических командах первый байт COP содержит разряд w, значение которого определяет разрядность операндов: w =0- операция с байтами; w = 1 - операция со словами (16 или 32 разряда). Разрядность слов (16 или 32 разряда) определяется режимом работы процессора. В реальном режиме и режиме виртуального 8086 по умолчанию используются 16-разрядные слова. В защищенном режиме разрядность устанавливается значением разряда D в дескрипторе сегмента кодов (при D = 0 - 16 разрядов, при D = 1 - 32 разряда). При выполнении отдельных команд разрядность операндов может меняться соответствующим префиксом.

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

Байт адресации MDR/M содержит три поля (рис. 56). Поля MD и R/M задают адрес одного из операндов, который может храниться в регистре или ячейке памяти. Кодировка этих полей определяет выбираемый способ адресации.

 

 

 

6 5 3

   

 

 

MD

REG/СОР

R/M

MDR/M

 

SS

INDEX

BASE

SIB

 

 

Гис. 56

 

 

В одноадресных командах поле REG/COP содержит дополнительные разряды кода операции. В двухадресных командах поле REG содержит код регистра, в котором хранится второй из операндов. Тип команды (одно- или двухадресная)


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

• d = 0 - код источника содержится в поле REG/COP, код приемника в поле R/M;

• d = 1 - код источника содержится в поле R/M, код приемника в поле REG/COP. Эффективный адрес операнда ЕА является 16- и 32-разрядным и

формируется в зависимости от значения полей MD и R/M в байте адресации MDR/M. В общем случае ЕА образуется путем арифметического сложения трех компонент:

• содержимого базового регистра;

• содержимого индексного регистра;

• 8-, 16- или 32-разрядного смещения d8, d16 или d32, заданного в одном, двух или четырех байтах поля DISP команды.

В зависимости от значения полей MD и R/M для формирования ЕА используются все или часть этих слагаемых.

Для реализации ряда способов адресации при формировании 32-разрядного адреса используется байт SIB (Scale Index Base). Он содержит 3-разрядные поля INDEX и BASE, определяющие выбор регистров, используемых в качестве индексного и базового регистров, и поле SS, задающее масштабный коэффициент для модификации значения индекса. Правило формирования эффективного адреса при использовании байта SIB определяется следующим выражением:

EA = BR + (IR х F) + disp,

где BR - содержимое базового регистра, который задается полем BASE; (IR х F) -масштабированный индекс; IR - содержимое индексного регистра, который задается полем INDEX; F - масштабный коэффициент, значение которого определяется полем SS (1, 2, 4 или 8; задает размер элемента данных). В качестве базового регистра может использоваться любой из регистров общего назначения, в качестве индексного регистра также может использоваться любой из регистров общего назначения, кроме указателя стека ESP.

При выполнении операций с непосредственной адресацией один из операндов imm задается в последних байтах команды (поле IMM). В этом случае COP ряда команд содержит бит s, определяющий способ использования непосредственно задаваемых данных. Если операция выполняется над байтами (COP команды содержит разряд w = 0), то в качестве операнда используется один байт непосредственных данных im8, содержащихся в формате команды. Если операция выполняется над 16- или 32-разрядными словами (в COP команды разряд w = 1 или отсутствует), то возможны следующие варианты. При s = 0 непосредственные данные содержат два im16 или четыре im32 байта. При s = 1 непосредственные данные содержат один младший байт 16- или 32-разрядного операнда, остальные разряды которого принимают значение старшего (знакового) разряда младшего байта (расширение знаком).

3. Регистровые структуры универсальных микропроцессоров Функциональная неоднородность регистров. Количество и назначение регистров зависит от архитектуры микропроцессора. Часть регистров микропроцессора не используется в качестве средств программирования. Это объясняется не их физическим отсутствием, а тем, что программисту не предоставляются средства изменения содержимого этих регистров. Такие регистры называются программно недоступными. Для другой части регистров микропроцессора программисту предоставляются средства изменения их


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

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

Регистры микропроцессора функционально неоднородны:

• одни служат для хранения данных и/или адресной информации;

• другие - для управления работой микропроцессора.

В соответствии с этим все регистры микропроцессора можно разделить на

• регистры данных;

• указатели или адресные регистры;

• регистры специального назначения или специальные регистры.

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

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

На уровне символической записи (мнемоники) команд для прямой ссылки на конкретные регистры микропроцессора им присваиваются имена, например, A, B, C, D, SP, X или R0, R1, R2 и т.д. Обычно эти имена отражают функциональное назначение регистра и способствуют пониманию мнемоники команд.

Адресные регистры. Адресные регистры применяются для реализации различных методов непрямой (вычисляемой) адресации данных. К ним относятся (рис. 57):

• регистр косвенного адреса DP (Data Pointer). Содержит непосредственно адрес операнда;

• базовый регистр (регистр базы) BP (Base Pointer). Используется для хранения начального адреса массива;

• индексный регистр X. Содержит относительный (по отношению к базе) адрес (индекс) операнда (элемента массива);

• регистры автоинкрементной и автодекрементной адресации. Автоматически увеличивают или уменьшают свое содержимое до или после выполнения операции доступа в соответствии с длиной адресуемого ими операнда;

• регистр расширения адресного пространства. Обеспечивает расширение адресного пространства путем переключения между несколькими банками основной памяти. Содержит номер текущего банка основной памяти;

• указатели сегментов и страниц.


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

Частным случаем регистра с автомодификацией является указатель стека SP (Stack Pointer), который указывает на положение вершины стека.

При использовании стека для хранения локальных переменных и обмена параметрами между вызываемой и вызывающей процедурами может оказаться полезным специальный адресный регистр, указывающий на начало области локальных переменных и/или параметров в стеке, - указатель кадра FP (Frame Pointer). Значение указателя стека SP непрерывно меняется, поэтому применять его в качестве точки отсчета при доступе к данным в стеке неудобно. Процедуру доступа можно значительно упростить, если функцию точки отсчета отдать специально


зарезервированному для этой цели регистру - указателю кадра FP. Указатель кадра относится к классу базовых регистров.

Специальные регистры. При выполнении операций АЛУ генерирует ряд признаков, характеризующих их результат. Функцию хранения этих признаков, а также некоторых других выполняет специальный регистр состояния SR (Status Register) или слова состояния программы PSW (Program Status Word). С каждым признаком связывается одноразрядная переменная - флажок. Флажки, связанные с признаками результата операции, группируются в поле кода условия CC (Condition Code). Типовой состав флажков-признаков результата операции:

• CF (Carry Flag) - флажок переноса из старшего разряда АЛУ при выполнении арифметических операций. При сдвигах CF равен выдвинутому значению младшего или старшего разряда;

• ZF (Zero Flag) - флажок признака нуля;

• SF (Sign Flag) - флажок знака результата. SF равен значению старшего разряда результата;

• AF (Auxiliary carry Flag) - флажок дополнительного переноса (переноса из младшей тетрады);

• OF (Overflow Flag) - флажок арифметического переполнения;

• PF (Parity Flag) - флажок четности количества единичных разрядов в результате.

Удобно в поле кода условия CC иметь один или несколько флажков пользователя, функциональное назначение которых определяет он сам. Обычно эти флажки служат для связи между отдельными частями программы.

Состояние поля кода условия CC тестируется командами условного типа.

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

• IF (Interrupt Flag) - маски и приоритеты прерываний, а также условия реакции на прерывания;

• TF (Trace Flag) - флажок пошаговой трассировки, маска специального прерывания.

Регистр PSW включает также различные модификаторы команд, изменяющие реакцию МП на отдельные команды (например, флажок направления

DF).

Для обеспечения особых условий выполнения программ в PSW вводят специальный флажок, определяющий эти условия. Так, например, флажок H/U (Halt/User) служит для разрешения особых условий выполнения программ и реализации директив пультового терминала, а флажок U/S (User/System) используется для перевода микропроцессора из специального системного режима, в котором выполняются программы ОС, в пользовательский.

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

В сложных микропроцессорах состав специальных регистров более широкий. В этих микропроцессорах имеются специальные регистры, используемые преимущественно ОС, - системные регистры. К системным регистрам относятся:

• управляющие регистры (разрешают защищенный режим, страничную организацию памяти, управляют работой с сопроцессором, задают


информацию для управления памятью, например, адреса системных таблиц, и т.п.);

• отладочные регистры;

• тестовые регистры.

Регистры данных. Наиболее типичным представителем регистров данных является аккумулятор A (Accumulator), который используется для временного хранения операндов и промежуточных результатов. С аккумулятором связано большинство команд арифметической и логической обработки. Ссылка на него, как правило, производится неявно с помощью кода операции. В состав микропроцессора может входить один или несколько аккумуляторов.

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

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

Как аккумуляторы, так и РОН могут при необходимости объединяться в регистровые пары.

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

Расширение разрядности указателя WP до полного размера адресного регистра и отображение набора рабочих регистров на основную память данных с базой в WP приводит к типовой архитектуре с рабочими областями (рис. 58). Однако при этом теряется быстрый доступ к данным, хранящимся в рабочих регистрах. Решение этой проблемы связано с реализацией части основной памяти данных на одном кристалле с микропроцессором и размещением рабочей области в этой внутренней части ОЗУ.


Передача функции аккумулятора вершине стека TOS приводит к стековым архитектурам. Стековая организация дает возможность строить безадресные системы, в которых команды имеют наименьшую длину. Безадресные команды стековой архитектуры оперируют операндами, находящимися на вершине стека и непосредственно под ней. При выполнении операций операнды извлекаются из стека, а результат передается на вершину TOS. Стековая архитектура обладает высокой вычислительной эффективностью. Однако в классической форме она практического распространения не нашла. Это объясняется тем, что стек обычно размещается в основной памяти, доступ к которой требует отдельного цикла обращения к системной магистрали. Для уменьшения времени доступа к стеку он должен быть физически приближен к АЛУ за счет реализации на одном кристалле с процессором внутренней памяти данных и размещения в ней стека.

Более эффективным решением является введение в состав микропроцессора специального стека, который размещается в его регистровой области и используется исключительно для промежуточного хранения данных. Такой стек обладает быстрым доступом и называется вычислительным. Глубина вычислительного стека невелика - обычно она составляет 3-8 машинных слова. Прямой доступ к содержимому указателя вершины вычислительного стека, как правило, отсутствует. Манипуляция содержимым указателя выполняется только через запись/чтение данных из стека.

4. Регистры 32-разрядных процессоров фирмы Intel

Регистры 32-разрядных МП фирмы Intel подразделяются на следующие группы:

1. Основные функциональные регистры:

• регистры общего назначения EAX, EDX, ECX, EBX, EBP, ESI, EDI, ESP;

• указатель команд EIP;

• регистр флагов EFLAGS;

• сегментные регистры CS, SS, DS, ES, FS, GS.

 

2. Регистры блока обработки чисел с плавающей точкой (регистры FPU):

• регистры данных R7-R0 (ST7-ST0);

• регистр тегов TW;

• регистр состояния FPSR;

• регистр управления FPCR;

• регистры-указатели команды и операнда FIP, FDP.

3. Регистры блока обработки пакетов чисел с плавающей точкой (регистры

SSE):

• регистры пакетов данных XMM7-XMM0;

• регистр управления-состояния MXCSR.

 

4. Системные регистры:

• системные адресные регистры GDTR, LDTR, IDTR, TR;

• управляющие регистры CR4-CR0;

• регистры отладки DR7-DR0;

• регистры тестирования TR7-TR3.

5. Служебные или модельно-специфические регистры.

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


Основные функциональные регистры. Эти регистры относятся к видимой для прикладных программ части архитектуры процессоров и представляют собой расширение набора регистров 16-разрядных процессоров 8086/8088 и 80286.

Восемь 32-разрядных регистров общего назначения (рис. 59) EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP предназначены для хранения данных и адресов. Младшие 16 разрядов этих регистров доступны под именами AX, BX, CX, DX, SI, DI, BP, SP, т. е. в 32-разрядных процессорах регистры базовой архитектуры расширены до 32 бит и к прежнему обозначению их имен добавилась приставка Е (Extended -расширенный). При операциях с байтами можно отдельно обращаться к младшему (разряды 7-0) или старшему (разряды 15-8) байту регистров AX, BX, CX, DX: младшие байты имеют имена AL, BL, CL, DL, старшие - AH, BH, CH, DH.

Указатель команд (рис. 60) EIP представляет собой 32-разрядный регистр, содержимое которого используется в качестве смещения при определении адреса следующей выполняемой команды. Смещение задается относительно базового адреса сегмента команд, задаваемого регистром CS. Младшие 16 бит EIP (биты 15­0) содержат 16-разрядный указатель команд с именем IP, который используется при 16-разрядной адресации. Содержимое EIP (IP) изменяется при выполнении команд передачи управления и прерываний.

Регистр флагов EFLAGS (рис. 60) содержит ряд битов, которые имеют различное назначение: признаки состояния CF, PF, AF, ZF, SF, OF указывают определенные характеристики результата, полученного при выполнении команды; управляющий признак DF определяет порядок адресации операндов при выполнении последовательности строковых команд; системные признаки TF, IF, IOPL, NT, RF, VM, AC, VIF, VIP, ID задают режим процессора при обслуживании исключений и прерываний, организации ввода-вывода данных и реализации ряда других процедур. Младшие шестнадцать бит регистра EFLAGS (биты 15-0) представляют 16-разрядный регистр флагов FLAGS, который используется при выполнении программ, написанных для микропроцессоров 8086, 80286. Рассмотрим назначение некоторых основных дополнительных разрядов регистра EFLAGS.


• IOPL - уровень привилегий ввода/вывода. Задает максимальную величину уровня привилегий текущей программы, при котором разрешается выполнение команд ввода/вывода.

• VM - признак режима виртуального 8086. Установка значения VM=1 вызывает переключение процессора в V86, при котором эмулируются возможности микропроцессора 8086.

• AC - признак контроля выравнивания. Установка значения AC=1 вводит контроль выравнивания операндов при обращении к памяти. В этом случае при обращении к операнду, который не выровнен по соответствующей границе (2, 4, 8 байт), реализуется исключение типа #AC (ошибка выравнивания).

• ID - признак допустимости идентификации. Возможность программного изменения значения ID указывает, что для данного процессора обеспечивается выполнение команды идентификации CPUID.


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

Селектор в регистре CS обеспечивает обращение к сегменту команд, селектор в SS - к сегменту стека, селекторы в DS, ES,FS,GS — к сегментам данных.

Системные регистры. Кроме регистров общего назначения, предназначенных для использования прикладными программами, процессоры имеют ряд регистров системного назначения. Этих регистров в процессорах 8086 не было, а в процессоре 80286 присутствовала лишь часть из них и не в полном объеме. Эти регистры доступны только в защищенном режиме для программ,


имеющих максимальный уровень привилегий 0. Для доступа к системным регистрам используются специальные команды пересылки данных.

Управляющие регистры (Control Registers) CR0, CR2, CR3, CR4 хранят признаки состояния процессора, общие для всех задач. Регистр CR1 в существующих 32-разрядных процессорах не используется (зарезервирован для последующих моделей).

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

• РЕ (Protection Enable) - разрешение защиты. Установка значения разряда РЕ=1 переводит процессор в защищенный режим. Разряд РЕ совместно с битом PG определяет режим работы процессора (табл. 2).

• PG (Paging Enable) - включение механизма страничной адресации памяти. При установке значения PG=1 обеспечивает страничную адресацию памяти в защищенном режиме.

 

Таблица 2

PG

PE

Режим процессора

   

Реальный режим

   

Защищенный режим без использования страничной адресации

   

Запрещенная комбинация (вызывает исключение типа #GP -нарушение защиты)

   

Защищенный режим с использованием страничной адресации

• ЕМ (Processor Extension Emulated) - эмуляция FPU. Установка значения ЕМ=0 указывает на присутствие в системе блока FPU. Установка значения ЕМ=1 вызывает при выборке команды FPU исключение типа #NM (отсутствие FPU), обеспечивающее обращение к подпрограмме, эмулирующей работу FPU.

• AM (Alignment Mask) - разрешение контроля выравнивания. Контроль выравнивания выполняется только на уровне привилегий 3 при АМ=1 и установленном разряде АС=1 в регистре EFLAGS.

Регистр CR0 для совместимости с защищенным режимом микропроцессора 80286 является расширением 16-разрядного регистра MSW (Machine State Word -слово состояния машины) этого процессора, в котором были определены лишь биты РЕ, МР, ЕМ и TS. Команды загрузки и сохранения LMSW, SMSW для совместимости с микропроцессором 80286 работают только с этими четырьмя разрядами регистра CR0. Для загрузки или сохранения всего содержимого регистра CR0, используются MOV CR0, r/m или MOV r/m, CR0, выполняемые программами, имеющими максимальный уровень привилегии 0.

Регистр CR2 (Page Fault Linear Address) содержит 32-разрядный линейный базовый адрес страницы, при обращении к которой зафиксирована ошибка при страничной адресации.

Регистр CR3 (Page Directory Base Register) содержит 20 старших разрядов физического базового адреса таблицы каталога страниц, а также разряды, управляющие загрузкой страниц в кэш-память данных.

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

• DE (Debugging Extensions) - расширение возможностей отладки (разрешение точек останова на инструкциях обращения к заданным портам ввода/вывода).

• PSE (Page Size Extension) - расширение размера страницы (4 Кбайт и 4 Мбайт).


• РАЕ (Physical Address Extension) - расширение физического адреса (страницы 4 Кбайт и 2 Мбайт, 36-разрядная адресация).

• OSXMMEXCPT - флаг поддержки операционной системой исключений от блока ХММ (SIMD-инструкций с плавающей точкой - расширение набора команд SSE и SSE2 процессоров P6 и Pentium 4).

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

• GDT (Global Descriptor Table) - глобальная дескрипторная таблица (таблица дескрипторов);

• LDT (Local Descriptor Table) - локальная дескрипторная таблица;

• IDT (Interrupt Descriptor Table) - таблица дескрипторов прерываний;

• TSS (Task Status Segment) - сегмент состояния задачи.

Регистр глобальной таблицы дескрипторов GDTR (Global Descriptor Table Register) и регистр таблицы дескрипторов прерываний IDTR (Interrupt Descriptor Table Register) содержат 32-разрядные базовые адреса и 16-разрядные размеры таблиц GDT и IDT. Эти таблицы являются общими для всех задач. В регистр локальной таблицы дескрипторов LDTR (Local Descriptor Table register) и регистр задачи TR (Task Register) заносятся 16-разрядные селекторы дескрипторов, позволяющие обратится к таблице LDT и сегменту TSS, которые определены для каждой отдельной задачи. С каждым из этих регистров связан программно недоступный регистр дескриптора сегмента. Загрузка LDTR и TR вызывает автоматическую загрузку самих дескрипторов, содержащих 32-битные поля линейного базового адреса и размера, а также полей атрибутов соответствующих сегментов в связанные с ними невидимые регистры дескрипторов.

Регистры отладки (Debug Register) предназначены для задания и управления отладочными точками останова.

Регистры DR0-DR3 (Linear Breakpoint Address) хранят 32-разрядные линейные адреса точек останова.

Регистры DR4, DR5 в существующих процессорах не используются, обращение к ним эквивалентно обращению к регистрам DR6, DR7. В процессоре Pentium и выше при включенном расширении отладки обращение к этим регистрам вызывает исключение недопустимого кода операции (#UD).


Регистр DR6 (Breakpoint Status) - регистр состояния, указывающий причину останова в контрольной точке.

Регистр DR7 (Breakpoint Control) - регистр управления, задающий условия останова в контрольных точках.

Состав регистров тестирования (Test Register) варьируется в зависимости от типа процессора. Процессоры 80386 имели только два регистра, предназначенных для тестирования буфера страничной переадресации - TR6 и TR7, для процессора 486 состав регистров расширен за счет добавления возможности тестирования внутренней кэш-памяти - TR3-TR5. В процессорах Pentium и выше тестовые регистры входят в группу модельно-специфических регистров MSR. Для этих процессоров обращение к регистрам TRx вызывает исключение #UD недопустимого кода операции.

Модельно-специфические регистры MSR. Модельно-специфические регистры MSR (Model-Specific Registers) предназначены для управления расширениями отладки, мониторингом производительности, машинным контролем, кэшированием областей физической памяти и другими функциями. Их назначение привязывается к архитектуре конкретного процессора, состав меняется от модели к модели, доступ привилегирован. Команды обмена с этими 64-битными регистрами WRMSR и RDMSR подразумевают, что данные находятся в паре ЕDХ:ЕАХ, а номер указывается в регистре ЕСХ, что позволяет неограниченно (до 4 миллиардов) увеличивать число этих регистров.

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

5. Режимы работы универсальных микропроцессоров

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

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


программным прерыванием, и при ее поступлении выполняется одна и та же последовательность действий:

1) содержимое программного счетчика заносится в системный стек;

2) содержимое регистра состояния заносится в системный стек;

3) в регистре состояния изменяется разряд режима;

4) в программный счетчик помещается адрес подпрограммы ОС.

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

Помимо обработки системного вызова в системном режиме может осуществляться обработка запроса прерывания от периферийного устройства. Кроме того, с помощью ОС удобно осуществлять обработку отказов аппаратуры и обработку ошибок программного обеспечения. Обработка с помощью ОС путем автоматического перехода в системный режим в ходе выполнения прикладной программы в пользовательском режиме называется обработкой специального прерывания или прерывания при возникновении непредусмотренной (исключительной) ситуации. Действия при переходе к такой обработке общие почти для всех ее случаев и аналогичны действиям, производимым по команде системного вызова. Начальный адрес подпрограммы, выполняющей обработку специального прерывания, называется вектором обработки данной ситуации, например, при обработке прерывания он называется вектором прерывания, а при обработке системного вызова - вектором системного вызова. Для выхода из подпрограммы, выполняющейся в системном режиме, используется специальная команда возврата - возврат из программы обработки специального прерывания. При возврате из подпрограммы по обычной команде возврата адрес возврата извлекается из стека пользователя, а по специальной команде - из системного стека.

6. Режимы работы 32-разрядных процессоров фирмы Intel 32-разрядные микропроцессоры фирмы Intel имеют три основных режима функционирования (рис. 63):

• режим реальных адресов Real Address Mode (реальный режим),

• режим защищенных виртуальных адресов Protected Virtual Address Mode (защищенный режим),

• режим системного управления System Management Mode.

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

В защищенном режиме реализуется многозадачное функционирование, когда могут одновременно выполняться несколько отдельных задач (программ), которые защищены одна от другой и от операционной системы процессора Специальный механизм обеспечивает переключение задач. Процессор позволяет адресовать до 4 Гбайт физической памяти, имеет поддержку виртуальной памяти объемом до 64 Тбайт для каждой задачи: встроенный блок управления памятью поддерживает механизмы сегментации и страничной адресации. В этом режиме процессор может также


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

Режим системного управления SMM используется для реализации специальных системных и отладочных функций, например, для перевода системы в режим пониженного энергопотребления. При этом процессор обращается к отдельному адресному пространству, где размещается системное ОЗУ. Переход в режим системного управления осуществляется путем подачи специального внешнего сигнала прерывания SMI# = 0, при этом процессор сохраняет в памяти контекст прерванной программы. В режиме SMM процессор функционирует как в реальном режиме с запрещенной обработкой прерываний. Выход из режима SMM производится с помощью команды RSM, при этом восстанавливается контекст прерванной программы.

После включения питания или повторного запуска (процедура RESET) процессор начинает работу в реальном режиме. Переход процессора в защищенный режим реализуется с помощью команд LMSW или MOV CR0, которые выполняются только ядром операционной системы (программой, имеющей высший уровень привилегии 0). Эти команды устанавливают в регистре управления CR0 значение бита разрешения защиты РЕ = 1. Обратное переключение в реальный режим производится только командой MOV CR0, устанавливающей значение бита РЕ = 1. При работе процессора в защищенном режиме переход в режим виртуального 8086 выполняется путем установки в регистре флагов EFLAGS значения бита VM = 1, выход из режима виртуального 8086 - сбросом этого бита в состояние VM = 0.

 

Тема 4. Адресация данных в универсальных микропроцессорах

 

1. Способы адресации операндов

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


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

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

Адресный код команды - это двоичный код в адресном поле команды, из которого необходимо сформировать исполнительный адрес операнда.

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

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

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

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

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


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

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

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

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

Двумя основными преимуществами регистровой адресации являются: короткое адресное поле в команде и исключение обращений к памяти. Малое число РОН позволяет сократить длину адресного поля команды. К сожалению, возможности по использованию регистровой адресации ограничены малым числом РОН в составе процессора.

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

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

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

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


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

Ниже рассматриваются основные способы адресации со смещением.

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

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

Базовая адресация. В случае базовой адресации регистр, называемый базовым, содержит полноразрядный адрес, а поле АК - смещение относительно этого адреса. Ссылка на базовый регистр может быть явной или неявной. В некоторых МП имеется специальный базовый регистр и его использование является неявным, то есть адресное поле R в команде отсутствует. Более типичен случай, когда в роли базового регистра выступает один из регистров общего назначения (РОН), тогда его номер явно указывается в поле R команды.

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

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

Индексная адресация предоставляет удобный механизм для организации итеративных вычислений и работы с массивами. Пусть, например, имеется массив чисел, расположенных в памяти последовательно, начиная с адреса N, и мы хотим увеличить на единицу все элементы данного массива. Для этого требуется извлечь каждое число из памяти, прибавить к нему 1 и вернуть обратно, а последовательность исполнительных адресов будет следующей: N, N+1, N+2 и т.д., вплоть до последней ячейки, занимаемой рассматриваемым массивом. Значение N берется из поля АК команды, а в выбранный регистр, называемый индексным регистром, сначала заносится 0. После каждой операции содержимое индексного регистра увеличивается на 1.


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

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

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

Интересным и весьма полезным является еще один вариант индексной адресации - индексная адресация с масштабированием и смещением: содержимое индексного регистра умножается на масштабный коэффициент и суммируется с АК. Масштабный коэффициент может принимать значения 1, 2, 4 или 8, для чего в адресной части команды выделяется дополнительное поле. Описанный способ адресации реализован, например, в микропроцессорах фирмы

Intel.

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

2. Способы адресации данных 32-разрядных процессоров фирмы Intel 32-разрядные процессоры реализует ряд способов адресации данных, набор

которых обеспечивает эффективную работу с языками высокого уровня (Си,

Фортран и др.).

Непосредственная адресация. В качестве операнда imm используется один, два или четыре последних байта команды. Такой способ адресации реализуется при выполнении ряда команд пересылки (MOV, PUSH), арифметических операциях (ADD, ADC, SUB, SBB, CMP, IMUL) и логических операциях (AND, OR, XOR, TEST). Непосредственная адресация задается определенным значением кода OPC, содержащегося в первом байте этих команд, или поля REG/OPC байта MODR/M. Разрядность используемых непосредственных данных (8, 16 или 32 разряда) зависит от режима работы процессора и может изменяться соответствующим префиксом.

Регистровая адресация. Операнд выбирается из регистра, определяемого полем R/M в байте MODR/M. Данный способ реализуется при задании в байте MODR/M значения поля MOD = 11.

Косвенная регистровая адресация. Эффективный адрес ЕА содержится в индексном (SI, DI, ESI, EDI) или базовом (BX, EBX) регистрах, или регистрах общего назначения EAX, ECX, EDX. Данный способ реализуется при значении поля MOD = 00.


Прямая адресация. Эффективный адрес операнда ЕА содержится в команде в виде смещения d16 или d32.

Базовая адресация. Эффективный адрес ЕА определяется:

• при формировании 16-разрядных адресов путем сложения содержимого базового регистра (BX, BP) и смещения d8 или d16;

• при формировании 32-разрядных адресов путем сложения содержимого базового регистра и смещения d8 или d32.

Индексная адресация. Эффективный адрес ЕА определяется:

• при формировании 16-разрядных адресов путем сложения содержимого индексного регистра (SI, DI) и смещения d8 или d16;

• при формировании 32-разрядных адресов путем сложения содержимого индексного регистра и смещения d8 или d32.

При формировании 32-разрядных адресов в качестве базового или индексного регистра может использоваться любой из регистров EAX, ECX, EDX, EBX, EBP, ESI,

EDI.

Базовая индексная адресация. Эффективный адрес ЕА образуется путем сложения содержимого базового (BX, BP) и индексного регистров (SI, DI).

Базовая индексная адресация со смещением или базовая индексная относительная адресация. Это вариант базово-индексной адресации, при котором к эффективному адресу ЕА дополнительно прибавляется смещение d8 или d16.

Дополнительные способы адресации реализуются при использовании 32-разрядных адресов, если задано значение R/M=100 и команда содержит байт SIB. В этом случае реализуются три дополнительных варианта индексной и базово-индексной адресации.

Индексная адресация с масштабированием. Эффективный адрес образуется сложением масштабированного индекса (содержимого индексного регистра, умноженного на коэффициент F) и смещения d32.

Базовая индексная адресация с масштабированием. Эффективный адрес образуется сложением масштабированного индекса и базы, в качестве которой используется содержимое одного из регистров: EAX, EBX, ECX, EDX, ESP, ESI или

EDI.

Базовая индексная адресация со смещением и масштабированием.

Эффективный адрес формируется сложением масштабированного индекса, базы и смещения d8 или d32.

 

Тема 5. Средства управления памятью в универсальных микропроцессорах

1. Управление памятью в универсальных микропроцессорах Линейная и сегментная адресации. Если число разрядов адреса превышает длину информационного слова, возникают задачи, в какой форме поместить такой адрес в регистр и каким образом осуществлять вычисление адреса? Для решения этих задач используют два способа адресации: линейную и сегментную адресации.

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


множество сегментов. Пространство, разбитое на такие сегменты, называется сегментированным пространством адресов. Начальный адрес сегмента называется базовым. За каждым сегментом закреплен соответствующий номер. Порядок разбиения пространства может быть произвольным, но, после того как он установлен, адрес можно представить с помощью номера сегмента и некоторого смещения внутри сегмента. При сегментной адресации такое разбиение позволяет представить адрес в виде двух целочисленных величин - номера сегмента и смещения, т.е. можно использовать два регистра меньшей разрядности, хранящих номера сегментов и значения смещений. Таким образом, вычисление адреса в принципе сводится только к вычислению смещения, т.е. для вычисления адреса можно воспользоваться тем же АЛУ, что и для обработки данных, не прибегая к помощи специальных регистров и сумматоров повышенной разрядности, что значительно упрощает структуру процессора.

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


Дата добавления: 2015-10-21; просмотров: 29 | Нарушение авторских прав




<== предыдущая лекция | следующая лекция ==>
 | ; кафедра нормальной физиологии 1 страница

mybiblioteka.su - 2015-2024 год. (0.081 сек.)