Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uch-PSb-1.doc
Скачиваний:
52
Добавлен:
04.06.2015
Размер:
598.02 Кб
Скачать

2. Система команд микропроцессоров и способы адресации операндов

Большинство микропроцессоров выполняют обработку следующих типов целочисленных данных:

  • биты,

- байты,

  • слова (16 разрядов),

  • двойные слова (32 разряда).

Некоторые типы микропроцессоров обрабатывают также четверные слова (64 разряда), двоично-десятичные числа BCD (Binary Coded Decimal, представление одного десятичного разряда с помощью тетрады из 4-х битов, которая называется полубайтом или нибблом), строки символов. В состав современных высокопроизводительных микропроцессоров входят также блоки, производящие обработку чисел, представленных в формате с плавающей точкой (блоки FPU – Floating Point Unit), и выполняющие обработку видео- и аудиоданных, для которых используются специальные форматы представления.

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

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

  • начиная с младшего байта (“Little-Endian),

  • начиная со старшего байта (“Big-Endian”).

При использования размещения “Little-Endian” младший байт располагается в ячейке памяти с меньшим адресом (рис. 1.6,а). Данный вариант размещения реализуется в микропроцессорах, выпускаемых компаниями Intel, AMD, Hitachi и рядом других производителей. При размещении “Big-Endian” старший байт располагается в ячейке с меньшим адресом (рис. 1.6,б). Такое расположение байтов обеспечивают микропроцессоры компании Motorola, ряд моделей микропроцессоров, выпускаемых IBM и некоторыми другими компаниями. При обращении к памяти микропроцессор адресует ячейку с меньшим адресом, поэтому при размещении “Little-Endian” команда или операнд выбираются, начиная с младшего байта, а при размещении “Big-Endian” – со старшего байта. По этой причине непосредственный перенос программного обеспечения между системами, использующими микропроцессоры с разными вариантами размещения байтов, оказывается практически невозможным. Чтобы решить эту проблему, некоторые современные микропроцессоры, например, семейства PowerPC, реализуют оба возможных варианта размещения и адресации байтов – “Little-Endian” или “Big-Endian”. Выбор необходимого варианта задается программно.

а)

B0

Младший байт

B1

Старший байт

а)

B0

Младший байт

B1

B2

B3

Старший байт

Адрес

N

N+1

Адрес:

N

N+1

N+2

N+3

б)

B1

Старший байт

B0

Младший байт

б)

B3

Старший байт

B2

B1

B0

Младший байт

Адрес

N

N+1

Адрес:

N

N+1

N+2

N+3

Рис.1.6. Адресация байтов в слове и двойном слове при размещениях

“Little-Endian” (а) и “Big-Endian” (б)

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

Прямая адресация. Операнд выбирается из ячейки памяти, адрес которой содержится в команде.

Регистровая адресация. Операнд выбирается из регистра РЗУ, номер (имя) которого указано в команде.

Косвенно-регистровая адресация. Операнд выбирается из ячейки памяти, адрес которой содержится в регистре РЗУ, указанном в команде.

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

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

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

Непосредственная адресация. В этом случае операнд непосредственно содержится в поступившей команде, размещаясь следом за кодом операции (КОП).

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

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

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

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

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

Непосредственная адресация также вызывает увеличение размера команды на число байт заданного операнда. Из-за этого возрастает объем памяти команд и время выборки команды. Однако при этом операнд поступает непосредственно в процессор, то есть не требуется выполнение дополнительного цикла обращения к ОЗУ. Данный способ адресации широко используется для введения различных констант, используемых при обработке данных.

Различные типы микропроцессоров часто реализуют разнообразные варианты этих способов адресации. В ряде микропроцессоров используется косвенно-регистровая адресация с пост-инкрементом или пре-декрементом. При этом содержимое регистра, хранящего адрес, автоматически увеличивается на n (здесь n = 1, 2 или 4 – число байтов операнда) после его выборки (пост-инкремент) или уменьшается на n перед выборкой операнда (пре-декремент). Такая адресация удобна при обработке массивов данных, расположенных в памяти. В некоторых микропроцессорах реализуется относительная адресация с индексированием (аналогична косвенно-регистровой с индексированием и смещением). В микропроцессорах Pentium выполняется косвенно-регистровая адресация с индексированием и смещением, где возможно масштабирование – умножение содержимого индексного регистра на заданный в команде множитель.

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

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

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

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

Следует отметить, что в некоторых типах микропроцессоров реализуются также трехадресные команды, где задаются отдельные адреса размещения двух операндов и результата операции. Такие команды используют только регистровую адресацию и выполняются в микропроцессорах с RISC-архитектурой, имеющих значительный объем РЗУ, например, в PowerPC .

Микропроцессоры выполняют набор команд, которые реализуют следующие основные группы операций:

- операции пересылки,

- арифметические операции,

- логические операции,

- операции сдвига,

- операции сравнения и тестирования,

- битовые операции,

- операции управления программой;

  • операции управления процессором.

При описании команд обычно используются их мнемонические обозначения (мнемокоды), которые служат для задания команды при программировании на языке Ассемблера. Для различных версий Ассемблера мнемокоды некоторых команд могут отличаться. Например, для команды вызова подпрограммы используется мнемокод CALL или JSR (“Jump to SubRoutine”). Однако мнемокоды большинства команд для основных типов микропроцессоров совпадают или отличаются незначительно, так как они являются сокращениями соответствующих английских слов, определяющих выполняемую операцию. В данном разделе будут, в основном, использоваться мнемокоды команд, принятые для процессоров Pentium.

Команды пересылки. Основной командой этой группы является команда MOV, которая обеспечивает пересылку данных между двумя регистрами или между регистром и ячейкой памяти. В некоторых микропроцессорах реализуется пересылка между двумя ячейками памяти, а также групповая пересылка содержимого нескольких регистров в память или их загрузка из памяти. Например, микропроцессоры семейства 68xxx компании Motorola выполняют команду MOVE, обеспечивающую пересылку из одной ячейки памяти в другую, и команду MOVEM, которая производит запись в память или загрузку из памяти содержимого заданного набора регистров (до 16 регистров). Команда XCHG производит взаимный обмен содержимым двух регистров процессора или регистра и ячейки памяти.

Команды ввода IN и вывода OUT реализуют пересылку данных из регистра процессора во внешнее устройство или прием данных из внешнего устройства в регистр. В этих командах задается номер интерфейсного устройства (порта ввода-вывода), через которое производится передача данных. Отметим, что многие микропроцессоры не имеют специальных команд для обращения к внешним устройствам. В этом случае ввод и вывод данных в системе выполняется с помощью команды MOV, в которой задается адрес требуемого интерфейсного устройства. Таким образом внешнее устройство адресуется как ячейка памяти, а в адресном пространстве выделяется определенный раздел, в котором располагаются адреса подключенных к системе интерфейсных устройств (портов).

Команды арифметических операций. Основными в этой группе являются команды сложения, вычитания, умножения и деления, которые имеют ряд вариантов. Команды сложения ADD и вычитания SUB выполняют соответствующие операции с cодержимым двух регистров, регистра и ячейки памяти или с использованием непосредственного операнда. Команды ADC, SBB производят сложение и вычитание с учетом значения признака C, устанавливаемого при формировании переноса или заема в процессе выполнения предыдущей операции. С помощью этих команд реализуется последовательное сложение операндов, число разрядов которых превышает разрядность процессора. Команда NEG изменяет знак операнда, переводя его в дополнительный код.

Операции умножения и деления могут выполняться над числами со знаком (команды IMUL, IDIV) или без знака (команды MUL, DIV). Один из операндов всегда размещается в регистре, второй может находиться в регистре, ячейке памяти или быть непосредственным операндом. Результат операции располагается в регистре. При умножении (команды MUL, IMUL) получается результат удвоенной разрядности, для размещения которого используется два регистра. При делении (команды DIV, IDIV) в качестве делимого используется операнд удвоенной разрядности, размещаемый в двух регистрах, а в качестве результата в два регистра записывается частное и остаток.

Команды логических операций . Практически все микропроцессоры производят логические операции И, ИЛИ, Исключающее ИЛИ, которые выполняются над одноименными разрядами операндов с помощью команд AND, OR, XOR. Операции выполняются над содержимым двух регистров, регистра и ячейки памяти или с использованием непосредственного операнда. Команда NOT инвертирует значение каждого разряда операнда.

Команды сдвига. Микропроцессоры осуществляют арифметические, логические и циклические сдвиги адресуемых операндов на один или несколько разрядов. Сдвигаемый операнд может находиться в регистре или ячейке памяти, а число разрядов сдвига задается с помощью непосредственного операнда, содержащегося в команде, или определяется содержимым заданного регистра. В реализации сдвига обычно участвует признак переноса C в регистре состояний (SR или EFLAGS), в котором располагается последний разряд операнда, выдвигаемый из регистра или ячейки памяти.

Рис.1.7. Реализация команд сдвига

Выполнение основных команд сдвига показано на рис.1.7. При логических сдвигах влево (SHL) и вправо (SHR) производится заполнение освободившихся разрядов операнда нулями. Команда арифметического сдвига влево SAL реализуется аналогично команде логического сдвига SHL. При арифметическом сдвиге влево производится заполнение освободившихся разрядов значением старшего (знакового) разряда. Поэтому при таком сдвиге сохраняется знак операнда. Два варианта циклических сдвигов выполняются с включением признака C в цепь переноса (команды RCL, RCR) или с использованием признака C для хранения последнего выдвигаемого разряда операнда (команды ROL, ROR).

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

Команды сравнения и тестирования. Сравнение операндов обычно производится с помощью команды CMP, которая производит вычитание операндов с установкой значений признаков N, Z, V, C в регистре состояния в соответствии с полученным результатом. При этом результат вычитания не сохраняется, и значения операндов не изменяются. Последующий анализ полученных значений признаков позволяет определить относительное значение ( >, <, = ) операндов со знаком или без знака. Использование различных способов адресации позволяет производить сравнение содержимого двух регистров, регистра и ячейки памяти, непосредственно заданного операнда с содержимым регистра или ячейки памяти.

Некоторые микропроцессоры выполняют команду тестирования TST, которая является однооперандным вариантом команды сравнения. При выполнении этой команды устанавливаются признаки N, Z в соответствии со знаком и значением (равно или не равно нулю) адресуемого операнда.

Команды битовых операций. Эти команды производят установку значения признака C в регистре состояний в соответствии со значением тестируемого бита bn в адресуемом операнде. В некоторых микропроцессорах по результату тестирования бита производится установка признака Z. Номер тестируемого бита n задается либо содержимым указанного в команде регистра, либо непосредственным операндом.

Команды данной группы реализуют разные варианты изменения тестируемого бита. Команда BT сохраняет значение этого бита неизменным. Команда BTS после тестирования устанавливает значение bn=1, а команда BTC - значение bn=0. Команда BTC инвертирует значение бита bn после его тестирования.

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

  • команды безусловной передачи управления;

  • команды условных переходов;

  • команды организации программных циклов;

  • команды прерывания;

  • команды изменения признаков.

Безусловная передача управления производится командой JMP, которая загружает в программный счетчик PC новое содержимое, являющееся адресом следующей выполняемой команды. Этот адрес либо непосредственно указывается в команде JMP (прямая адресация), либо вычисляется как сумма текущего содержимого PC и заданного в команде смещения, которое является числом со знаком (относительная адресация). Так как PC содержит адрес очередной команды программы, то последний способ задает адрес перехода, смещенный относительно очередного адреса на заданное число байтов. При положительном смещении производится переход к последующим командам программы, при отрицательном смещении – к предыдущим.

Вызов подпрограммы также производится путем безусловной передачи управления с помощью команды CALL (или JSR). Однако в этом случае перед загрузкой в PC нового содержимого, задающего адрес первой команды подпрограммы, необходимо сохранить его текущее значение (адрес очередной команды), чтобы после выполнения подпрограммы обеспечить возвращение к основной программе (или к предыдущей подпрограмме при вложении подпрограмм). Как отмечено в разделе 1, текущее содержимое PC обычно сохраняется в стеке, который организуется в ОЗУ. После выполнения подпрограммы выполняется безусловная передача управления исходной программе с помощью команды возврата из подпрограммы RET, которая выбирает из стека и загружает в PC его старое содержимое.

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

Таблица 1.1. Типовые команды условных переходов

Мнемокод

Условие

Мнемокод

Условие

J0

Переполнение

V=1

JNO

Нет переполнения

V=0

JB

Ниже (не выше и не равно)

C=1

JNB

Не ниже (выше или равно)

C=0

E

Равно (нуль)

ZF=1

JNE

Не равно (не нуль)

Z=0

JBE

Ниже или равно (не выше)

C + Z = 1

JNBE

Не ниже и не равно (выше)

C + Z = 0

JS

Отрицательный знак

N=1

JNS

Положительный знак

N=0

JL

Меньше

(не больше и не равно)

N  V = 1

JNL

Не меньше

(больше или равно)

N  V = 0

JLE

Меньше или равно

(не больше)

(N  V) + Z = 1

JNLE

Не меньше и не равно

(больше)

(NV) +Z= 1

Если сравниваются беззнаковые опеpанды, то соотношение их значений «выше - ниже – pавно» опpеделяют следующие условия (табл.1.1):

- ниже/не выше и не pавно  (<), команда JB;

- не ниже/выше или pавно  (>=), команда  JNB;

- ниже или pавно/не выше (<=), команда JBE;

- не ниже и не pавно/выше (>), команда JNBE.

Если сpавниваются опеpанды со знаком, то соотношение между ними «больше - меньше – pавно» опpеделяют условия (табл.1.1):

- меньше/не больше и не pавно (<), команда JL;

- не меньше/больше или pавно (>=), команда JNL;

- меньше или pавно/не больше (<=), команда JLE;

- не меньше и не pавно/больше (>), команда JNLE.

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

Команды оpганизации программных циклов осуществляют условный пеpеход в зависимости от значения содеpжимого заданного pегистpа, котоpый используется как счетчик циклов. Например, в процессорах Pentium для организации циклов используется команда LOOP и регистр ECX. Команда LOOP уменьшает содержимое ECX на 1 (декремент) и пpовеpяет полученное значение. Если содержимое ECX=0, то выполняется пеpеход к команде, адрес которой определяется с помощью относительной адресации (смещение задано в команде LOOP). Если ECX=0, то выполняется следующая команда пpогpаммы. Команда LOOP обычно ставится в конце цикла, обеспечивая его выполнение n раз, где n задается начальным значением ECX. Команды LOOPZ, LOOPNZ аналогичны команде LOOP, но используют дополнительные условия для выхода из цикла. Команда LOOPZ обеспечивает выход из цикла до выполнения заданного числа циклов n пpи получении ненулевого pезультата, то есть пpи установке признака Z=0,. Если в каждом цикле pеализуется нулевой pезультат, то выполняется n циклов, как в команде LOOP. Команда LOOPNZ прекращает выполнение циклов при получении нулевого результата, то есть при установке ZF=1.

Команды прерываний INT обеспечивают переход к одной из программ обслуживания исключений и прерываний (обработчику прерываний 0). При этом текущее содержимое PC и регистра состояния заносится в стек (см. раздел 1.1). Каждая из программ обработки соответствует определенному типу исключения или прерывания. Например, в процессорах Pentium выбор программы обработки определяется 8-pазpядным операндом, задаваемым во втором байте команды INT. Вызов соответствующей программы обслуживания производится с помощью таблицы, в которой содержатся векторы исключений (прерываний) - адреса первых команд программ обслуживания. Каждый вектор задает необходимое содержимое PC, загрузка которого обеспечивает переход к выполнению первой команды программы обслуживания. Команда IRET обеспечивает возврат из подпрограммы обслуживания прерывания путем извлечения из стека и восстановления содержимого программного счетчика и регистра состояния, соответствующих прерванной процедуре.

Команды управления признаками обеспечивают запись-чтение содержимого регистра состояния, в котором хранятся признаки, а также изменение значений отдельных признаков. Например, в процессорах Pentium реализуются команды LAHF и SAHF, которые выполняют загрузку младшего байта, где содержатся признаки, из регистра состояния EFLAG в младший байт регистра EAX и заполнение младшего байта EFLAGS из регистра EAX.. Команды CLC, STC осуществляют установку значений признака переноса CF=0, CF=1, а команда CMC вызывает инвертирование значения этого признака. Так как признаки определяют ход выполнения программы при условных переходах, то команды изменения признаков обычно используются для управления программой.

В данном разделе описывается управление программой с помощью изменения содержимого программного счетчика PC. В процессорах Pentium и ряде других моделей компании Intel (8086, 80186, 80286, 386, 486 и других), реализуется сегментная организация памяти, при которой адрес выбираемой команды определяется содержимым двух регистров – указателя команды EIP и сегментного регистра CS (см. раздел 1.1). При этом различные виды передачи управления в программе реализуются путем изменения содержимого регистров EIP и CS.

Команды управления процессором. К этой группе относятся команды останова, отсутствия операции и ряд команд, определяющих режим работы процессора или его отдельных блоков. Команда HLT прекращает выполнение программы и переводит процессор в состояние останова, выход из которого происходит при поступлении сигналов прерывания или перезапуска (Reset). Команда NOP (“пустая” команда), которая не вызывает выполнения каких-либо операций, служит для реализации программных задержек или заполнения пропусков, образовавшихся в программе.

Специальные команды CLI, STI запрещают и разрешают обслуживание запросов прерывания, устанавливая соответствующее значение бита управления I в регистре состояния процессора (см. раздел 1,1). В процессорах Pentium для этого используется бит управления (флаг) IF в регистре EFLAGS.

Многие современные микропроцессоры выполняют команду идентификации, которая позволяет пользователю или другим устройствам получить информацию о типе процессора, используемого в данной системе. В процессорах Pentuim для этого служит команда CPUID, при выполнении которой необходимые данные о процессоре поступают в регистры EAX, EBX, ECX, EDX и могут затем считываться пользователем или операционной системой.

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

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

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

В ряде современных процессоров реализована групповая обработка нескольких целых чисел или чисел c “плавающей точкой” с помощью одной команды по принципу SIMD (“Single Instruction – Multiple Data”) - «Одна команда – Множество данных». Одновременное выполнение операций над несколькими операндами существенно повышает производительность процессора при работе с видео- и аудиоданными. Такие операции широко используются для обработки изображений, звуковых сигналов и в других приложениях. Для выполнения этих операций в состав процессоров введены специальные блоки, реализующие соответствующие наборы команд, которые в различных типах процессоров (Pentium, Athlon) получили название MMX (“Milti-Media Extension”) – Мультимедийное Расширение, SSE (“Streaming SIMD Extension”) – Потоковое SIMD – расширение, “3DExtension – Трехмерное Расширение.

Характерной особенностью процессоров компании Intel, начиная с модели 80286, является приоритетный контроль при обращении к памяти, который обеспечивается при работе процессора в режиме защищенных виртуальных адресов – “Protected Mode” (защищенный режим). Для реализации этого режима используется группа специальных команд, которые служат для организации защиты памяти в соответствии с принятым алгоритмом приоритетного обращения.

3.Реализация и организация памяти

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

  • регистровые ЗУ,

  • оперативные ЗУ,

  • постоянные (программируемые и репрограммируемые) ЗУ,

  • промежуточная кэш-память,

  • внешние ЗУ.

Содержание информации, хранящейся в различных видах ЗУ, определяется ее назначением и частотой использования в процессе работы микропроцессора.

Регистровое ЗУ

Для хранения операндов и промежуточных результатов используется блок регистров общего назначения (РОН), который вместе со схемами адресации и выборки образует регистровое запоминающее устройство (РЗУ), входящее в состав микропроцессора. Объем РЗУ для различных типов микропроцессоров составляет от нескольких единиц до сотен байт. В большинстве микропроцессоров РЗУ содержит 8, 16 или 32 регистра, обращение к которым осуществляется с помощью регистровой адресации. Регистры работают с тактовой частотой процессора, запись и считывание операндов производится за один такт. Регистры РЗУ (все или часть) служат также для хранения адреса при выполнении косвенно-регистровой адресации.

Оперативное и постоянное ЗУ

Основной массив обрабатываемых данных и выполняемая программа их обработки хранятся в ОЗУ и ПЗУ, подключенных к системной шине (рис.1.1).

Обычно ОЗУ реализуются на базе микросхем памяти с произвольной выборкой RAM (Random Access Memory) статического (SRAM – Static RAM) или динамического (DRAM – Dynamic RAM) типа. При использовании микросхем DRAM в состав микропроцессорной системы включается контроллер динамической памяти, выполняющий периодическую регенерацию (перезапись) содержимого ОЗУ, которое хранится в виде электрического заряда на запоминающих емкостях в элементах памяти. Для восстановления заряда этих емкостей контроллер производит необходимое число тактов перезаписи содержимого ячеек динамического ОЗУ в процессе периодически выполняемых циклов регенерации. В течении цикла регенерации динамическое ОЗУ является недоступным для чтения-записи со стороны процессора и других устройств системы. В ряде современных микропроцессоров контроллер динамического ОЗУ реализуется на одном кристалле с процессором.

При одинаковом уровне технологии изготовления микросхемы DRAM имеют в несколько раз больший объем памяти и более низкую стоимость, чем микросхемы SRAM. Поэтому для реализации ОЗУ большой емкости чаще используются микросхемы DRAM, несмотря на необходимость использования контроллеров для регенерации хранящейся информации и связанных с этим потерь производительности системы.

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

Как отмечалось в разделе 1, максимальный объем адресуемой памяти определяется разрядностью шины адреса и составляет для 32-разрядных микропроцессоров 4 Гбайт и более. В современных микропроцессорных системах ОЗУ имеет емкость до нескольких сотен Мбайт, занимая часть адресного пространства. При этом в ряде типов систем (персональных компьютерах, рабочих станциях, серверах) предусмотрена модульная реализация ОЗУ, которая позволяет увеличивать его объем путем подключения дополнительных модулей статической или динамической памяти. Типичными примерами таких модулей являются стандартные модули динамической памяти - SIMM (Single In-line Memory Module) и DIMM (Double In-line Memory Module), используемые во многих системах для реализации ОЗУ необходимой емкости.

Для чтения и записи данных процессор реализует циклы обращения к ОЗУ по системной шине. Типичный цикл обращения к ОЗУ содержит следующие фазы:

  • установка на шине адреса необходимого адреса и выдача на шину управления адресного строба (AS или ALE) - сигнала, инициализирующего обмен,

  • выдача на шину управления сигналов, определяющих тип цикла обращения: чтение (сигнал RD) или запись (сигнал WR),

  • получение от ОЗУ по шине управления сигнала готовности к обмену (READY или DTACK),

  • прием-передача считываемых или записываемых данных (команд) по шине данных.

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

В зависимости от способа организации обмена реализация цикла обращения занимает от 2 до 4 тактов системной шины. Тактовая частота системной шины может существенно отличаться от тактовой частоты микропроцессора (см. раздел 1.1). При современном уровне микроэлектронной технологии тактовые частоты микропроцессоров могут превышать 1 ГГц, а возможности технологии изготовления печатных плат обеспечивают возможности передачи данных с частотой до 133 Мгц. Поэтому обращение к ОЗУ требует значительно большего времени, чем выборка данных из РЗУ.

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

Контроль четности выявляет все единичные сбои (ошибки в значении одного из битов), а также те многократные сбои, которые вызывают изменение четности. Как показывает практика, использование контроля четности позволяет выявить 80-90% ошибок, возникающих при передаче данных из-за воздействия помех, нарушения контактов в соединениях и других причин.

В системах, оперирующих с 8-, 16- и 32-разрядными данными, часто организуются отдельные разделы ОЗУ (банки) для хранения младших, старших или промежуточных байтов. Поэтому в ряде микропроцессоров формируются отдельные сигналы разрешения выдачи данных BE (Byte Enable) для выборки в ОЗУ тех или иных байтов. При адресации 16-разрядных данных используется два сигнала BE1-0 (выборка младшего или старшего байта), при адресации 32-разрядных данных – четыре сигнала BE3-0, при 64-разрядной системной шине – восемь сигналов BE7-0. Фактически, сигналы BE заменяют младшие 1, 2 или 3 разряда адреса, обеспечивая их дешифрацию в отдельные сигналы разрешения выборки для каждого байтового банка. Сигналы BE выдаются на шину адреса вместе с остальными (старшими) разрядами адреса.

Наряду с ОЗУ память микропроцессорных систем обычно включает ПЗУ, которое занимает определенные разделы адресуемого пространства. Содержимое ПЗУ сохраняется при отключении напряжения питания и поэтому может быть использовано сразу при включении системы. В зависимости от назначения системы включенное в нее ПЗУ может выполнять различные функции и, соответственно, иметь разную емкость памяти и варианты реализации. В большинстве систем ПЗУ служит для хранения программы начальной инициализации (загрузки) систем (Bootstrap ROM), программ тестирования и диагностики, а также некоторых других служебных программ. В ряде специализированных систем ПЗУ используется для хранения таблиц постоянных коэффициентов и констант, используемых при обработке данных, или для хранения подпрограмм, обеспечивающих стандартные процедуры обработки. Имеется также большой класс специализированных микропроцессоров - микроконтроллеров, ориентированных на реализацию определенных алгоритмов управления различными объектами. Программа, обеспечивающая реализацию этих алгоритмов, обычно записывается в ПЗУ, и в процессе работы микроконтроллера производится только ее считывание. В зависимости от назначения в микропроцессорных системах используются различные типы ПЗУ.

Масочно-программируемые ПЗУ (ROM – Read-Only Memory) содержат информацию, которая записывается в них в процессе изготовления микросхем и в дальнейшем не может изменяться. При производстве этих микросхем используется специально разрабатываемый комплект фотошаблонов (масок), определяющих содержание хранящейся в них информации. Поэтому выпуск микросхем с памятью ROM возможен только по соответствующему заказу, который производитель получает от пользователя. Производство и применение таких микросхем экономически эффективно только при значительном объеме их выпуска.

Программируемые пользователем ПЗУ содержат информацию, которую заносит в них пользователь с помощью специального программатора. При использовании однократно-программируемых ПЗУ (OTPROM – One-Time Programmable ROM) запись в них возможна только один раз. Репрограммируемые ПЗУ (EPROM –Electrically Programmable ROM) позволяют производить стирание ранее записанной информации путем облучения микросхемы ультрафиолетовым светом и затем записывать в них новую информацию с помощью программатора. Такие микросхемы помещаются в специальный корпус с окном из кварцевого стекла, пропускающего ультрафиолетовое излучение. В электрически репрограммируемых ПЗУ (EEPROM –Electrically Erased Programmable ROM) стирание и запись новой информации осуществляется с помощью электрических сигналов. Разновидностью EEPROM является флеш-память (Flash-memory), в которой электрическое стирание реализуется не в каждой отдельной ячейке памяти последовательно, а одновременно для всех ячеек или их блоков. Современные модификации флэш-памяти обеспечивают возможность ее репрограммирования без удаления из системы, а непосредственно на плате или на кристалле микроконтроллера (ISP – In-System Programming). При использовании программируемого ПЗУ пользователь может самостоятельно ввести в них необходимую информацию (программы или массивы постоянных данных). При включении в систему репрограммируемого ПЗУ можно, в случае необходимости, изменять хранящуюся в них информацию, поместив микросхему памяти в программатор или выполнив перепрограммирование в составе системы (в режиме ISP).

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]