Адресация многобайтовых объектов в оперативной памяти 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Адресация многобайтовых объектов в оперативной памяти



Все используемые в ЭВМ устройства памяти имеют байтовую ориентацию. Это означает, что для них минимальной адресуемой единицей информации является байт, и размеры всех программных объектов кратны байту. Размеры программных объектов фиксированного формата обычно выбираются кратными степени числа 2 (2 n байтов).

Размер программных объектов формата переменной длины (строки байт) задается отдельным полем команды.

 
  0 1 2 3 4 5 6 7 8 9
  A B C D E F G H I J
                     
                     
 

Слово по адресу 0 содержит байты (AB)

                     
                     
 

Двойное слово по адресу 0 содержит байты (ABCD)

                     
                     
 

Учетверенное слово по адресу 0 содержит байты (ABCDEFGH)

                     
                     
 

*Двойное слово по адресу 5 содержит байты (FGHI)

                     
                     
 

Байт по адресу 9 содержит байтJ

Возможные способы расположения программных объектов в памяти представлены на рис. 3.1.

Рис.3.1. Расположение программных объектов в памяти.

 

Многобайтовые объекты фиксированного формата по расположению в памяти могут разделяться на объекты расположенные:

· по выровненным (целочисленным) границам,

· по не выровненным (нецелочисленным) границам.

Объект расположен в целочисленных границах, если его адрес кратен размеру объекта. Все объекты на рис. 3.1, кроме двойного слова FGHI (отмечен *), расположены по целочисленным границам адресов. Адрес младшего байта F четырехбайтовой строки FGHI равен 5, т.е. не кратен размеру строки.

Расположение объектов без соблюдения правил целочисленных границ создает две проблемы:

· требуется дополнительная операция выравнивания границ при использовании,

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

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

Нумерация полей памяти

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

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

Нумерация бит и байт может производиться или со старших разрядов, или с младших разрядов (рис. 3.2).

 

0

1

2

3 Номера байт

 

0                 7 Номера бит

 

Байт Байт

 

0                 7 8               15 Номера бит

 

Старший байт Младший байт Слово

0                   7

8                15

16             23

24             31 Номера бит

Старший байт

 

 

Младший байт Двойное слово

а) нумерация бит и байт со старших разрядов к младшим

3

2

1

0 Номера байт

7                 0 Номера бит

 

Байт Байт

 

15                     8 7                 0 Номера бит

 

Старший байт Младший байт Слово

31                    24

23                16

15               8

7                 0 Номера бит

Старший байт

 

 

Младший байт Двойное слово

b) нумерация бит и байт с младших разрядов к старшим

                   

Рис.3.2. Структуры данных и нумерации бит и байт.

Нумерация бит и байт со старших разрядов (рис. 3.2 a). В позиционных системах счисления разряд с наибольшим весом располагается слева, и число читается слева направо. Многобайтовые объекты в памяти, как правило, задаются адресом байта с наименьшим номером. Таким образом, при побайтовой выборке из памяти данные поступают в естественном порядке чтения. Но при этом возрастание весов разрядов противоположно возрастанию их номеров.

Нумерация бит и байт с младших разрядов (рис. 3.2 b). При использовании нумерации бит и байт в многобайтном слове с младших разрядов, при последовательном выборе из памяти объекты на обработку поступают с младших байт и младшими разрядами "вперед". Это нумерация с младших разрядов. Распространение такой нумерации началось с появлением мини- и микропроцессоров. При последовательной (бит за битом) обработке цифровых данных для простейших арифметических операций (сложение/вычитание) это обеспечивало выигрыш в аппаратных средствах. Кроме того, при такой нумерации возрастание номеров бит совпадает с возрастанием их разрядных весов.

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

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

Для примера рассмотрим запись двухбайтовых слов (рис. 3.3.). В этом примере в словарной памяти записана строка начальных символов английского алфавита в виде последовательности двухбайтовых объектов – слов (по два символа в слове). При переносе последовательности символов из памяти, с нумерацией начиная с младших разрядов, в регистр с нумерацией со старших раз-рядов происходит перестановка байт в каждом слове.

 

 

Старшие байты в слове

Младшие байты в слове

 
Адреса слов Нечетные адреса байтов

Содержимое

 байтов

Четные адреса  байтов Содержимое  байтов  
0 1

a

0 b Слово ab
2 3

c

2 d Слово cd

Структуры словарной памяти с нумерацией байт со старших разрядов

Адреса байт

0

1 2 3  
 

b

a d c  
 

Многобайтовый регистр

 

 

             

Рис 3.3. Пример передачи могобайтового поля из памяти, с нумерацией начиная с младших разрядов, в регистр с нумерацией со старших разрядов

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

 

 

Старшие байты в слове

Младшие байты в слове

 

Адреса слов Нечетные адреса байтов Содержимое  байтов Четные адреса  байтов Содержимое  байтов

 

0 1 a 0 b

Слово ab

2 3 c 2 d

Слово cd

Структуры словарной памяти с нумерацией байт с младших разрядов

Адреса байт 3 2 1

0

 
  c d a

b

 
 

Многобайтовый регистр

 

 

             

Рис 3.4. Пример передачи могобайтового поля из памяти, с нумерацией начиная с младших разрядов, в регистр с нумерацией с младших разрядов

 

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

Например, в архитектуре PA-RISC корпорации HP (Hewlett Packard) предусмотрен такой программно управляемый обмен данными. Упорядочение байтов (к старшим или к младшим адресам) при записи и чтении определяется битом E в слове состояния процессора (PSW).

При Е = 0 загрузка многобайтного объекта упорядочивается, по терминологии фирмы, "к старшим адресам". При этом младший байт в памяти соответствует старшему байту в регистре (левая нумерация).

При Е = 1 загрузка многобайтного объекта упорядочивается "к младшим адресам". При этом младший байт в памяти соответствует младшему байту в регистре (правая нумерация).

Для этой же цели в МП Intel (начиная с 486) используется команда SWAP перестановки байт в регистре. Команда переставляет байты в четырех байтном регистре (первый байт с четвертым и второй байт с третьим).

Вопросы для самопроверки:

1. Байтовая ориентация памяти.

2. Расположение программного объекта в целочисленных границах.

3. Основные проблемы расположения программных объектов в нецелочисленных границах.

4. Адресация многобайтовых объектов в памяти.

5. Основные преимущества обратной нумерации байт в многобайтных программных объектах.

6. Основные недостатки обратной нумерации байт в многобайтных программных объектах.

 

Структура и типы команд

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

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

В случае двухместной операции команда должна задавать (явно или неявно):

1. операцию,

2. адрес или значение первого операнда,

3. адрес или значение второго операнда,

4. адрес сохранения результата,

5. адрес следующей команды (или двух альтернативных адресов команды для реализации ветвлений).

Задание операции

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

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

Поле адресов

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

 

Код операции Адрес 1 Адрес 2 Адрес 3 Адрес 4 (4,5)

Рис. 3.5 Структура четырехадресной команды

 

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

Трехадресная система команд

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

 

Рис. 3.6. Структура и схема выполнения трехадресной команды

 

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

Например, команда безусловного перехода:

Jmp  <адрес передачи управления>.

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

Например, команда JEZ - переход, если признак результата предыдущей команды равен нулю:

JEZ <адрес передачи управления при выполнении условия перехода>

Команды условной передачи управления позволяют разрабатывать разветвляющиеся и циклические программы.Разновидностью команд передачи управления являются команды передачи управления с возвратом (команды переходов на подпрограммы). При выполнении этих команд перед передачей управления на подпрограмму запоминается адрес возврата (содержимое счетчика команд до передачи управления). Адрес возврата используется другой разновидностью команд передачи управления – командами выхода из подпрограммы. Адрес возвратаобычно запоминается в специальном регистре PSW (слово состояния программы, семейство PDP-11), ячейке оперативной памяти (семейство IBM/370), или в аппаратном стеке (персональные компьютеры, программно совместимые с IBM PC).

Таким образом, переход к трехадресной системе команд сопровождается:

· отказом от независимости в расположении отдельных команд в программе,

· введением в состав процессора специального устройства (счетчика

команд), вычисляющего адрес следующей команды,

· введением в состав команд процессора специальных команд для задания точек нарушения выполнения команд в естественном порядке и указания адресов переходов. Это команды задания условного и безусловного переходов (с возвратом или без возврата).

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

Двухадресная система команд

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

 

Рис. 3.7. Структура и схема выполнения двухадресной команды

 

Это двухадресные команды. В двухадресных командах один адрес рассматривается как адрес-источник, а другой – как адрес-приемник.

Естественно, что в этих командах только операнд-источник можно зада-

вать непосредственным значением.

Неизбежная потеря значения одного из операндов при использовании двухадресных команд потребовала введения в состав команд процессора команды пересылки (копирования) объекта-источника в ячейку приемника. Примером такой команды может служить команда пересылки MOV:

MOV А1, А2.

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

Одноадресная система команд

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

 

Рис. 3.8. Структура и схема выполнения одноадресной команды

 

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

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

Возможно и дальнейшее упрощение команды. Это безадресная система

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

Сравним эффективность программирования в одноадресной и трехадресной системе команд.

Вычисление оператора С = А+В в трехадресной системе команд можно задать одной командой

ADD < A >, < B >, < C >;

а в одноадресной – тремя командами:

MOVAC  < A >; загрузить в регистр-аккумулятор число А.

ADD       < B >; содержимое аккумулятора увеличить на значение числа В.

MOVM  < C >; сохранить содержимое аккумулятора в ячейке памяти С.

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

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

Например, для оператораA=B´C+D–Eпрограмма в трехадресной системе команд будет содержать 3 команды:

MULT <B>, <C>, <A>

ADD <A>, <D>, <A>

SUB <A>, <E>, <A>,

а в одноадресной системе – 5 коротких команд:

MOVAC  <B>

MULT  <C>

ADD  <D>

SUB   <E>

MOVM <A>.

Как видно из примера, код программы значительно сокращается. По этой причине одноадресные ЭВМ получили широкое распространение.

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

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

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

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

Многие фирмы (Intel, DEC) для гибкости системы программирования ста-

ли использовать множество формул (режимов адресации) для вычисления адресов.

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

В случае использования РОНовкоманды, в зависимости от расположения исходных операндов, разделяются на типы: регистр-регистр, регистр-память.

Команды типа регистр-регистр являются наиболее компактными по размерам и быстрыми по выполнению. Они используют короткие адреса и независимы от задержек при обращении к памяти. Как исключение, некоторые ЭВМ (например, IBM/370) сохранили команды и типа память-память.

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

Вопросы для самопроверки:

1. Двухместные операции.

2. Назначение четвертого адреса в четырехадресной команде.

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

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

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

6. Основные преимущества одноадресной системы команд.

7. Причины введения в состав процессора РОНов.

8. Адресация РОНов в командах.

9. Понятие типов команд: регистр-регистр и регистр-память.

Режимы адресации

С появлением РОНов появилось два типа команд:

· команды структуры регистр/регистр (r/r): Коп R1, R2,

· команды структуры регистр/память (r/m): Коп R1, М2,

где:

R1, R2 – номера (адреса) РОНов.

M2 – полноразрядный адрес оперативной памяти.

Первый тип команд по отношению к данным является двухадресным (задаются адреса двух РОНов), но по отношению к памяти – безадресным.

Второй тип команд по отношению к данным тоже двухадресный, но по отношению к памяти – одноадресный (первый адрес является адресом РОНа).

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

Адреса операндов в командах задаются через компоненты по двум причинам:

1. для уменьшения разрядности поля адреса в команде,

2. для упрощения процедур обработки массивов.



Поделиться:


Последнее изменение этой страницы: 2021-04-04; просмотров: 179; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.0.25 (0.122 с.)