Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Баула.doc
Скачиваний:
112
Добавлен:
28.05.2015
Размер:
1.82 Mб
Скачать

4.6. Форматы команд

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

  • регистр – регистр (RR);

  • регистр – память, память – регистр (RX);

  • регистр – непосредственный операнд в команде (RI);

  • память – непосредственный операнд в команде (SI);

  • память – память, т.е. оба операнда в основной памяти (SS).

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

4.7. Базирование адресов

Для дальнейшего уменьшения объёма программы современные ЭВМ используют базирование адресов. Изучение этого понятия проведём на следующем примере. Пусть в программе на одноадресной машине необходимо реализовать арифметический оператор присваиванияX:=(A+B)2. Ниже приведена эта часть программы с соответствующими комментариями (напомним, чтоS– это регистр сумматора одноадресной ЭВМ):

...

СЧ A; S:=A

СЛ B; S:=A+B

ЗП R; R:=A+B – запись в рабочую переменную

УМ R; S:=(A+B)2

ЗПX; X:=(A+B)2

...

Так как в нашем примере одноадресная ЭВМ имеет 224(примерно 16 миллионов) ячеек памяти, то будем считать, что наш фрагмент программы располагается где-то примерно в средине памяти. Пусть, например, наши переменные располагаются соответственно в следующих ячейках памяти:

A – в ячейке с адресом 10 000 000

B – в ячейке с адресом 10 000 001

X – в ячейке с адресом 10 000 002

R – в ячейке с адресом 10 000 003

Тогда приведённый выше фрагмент программы будут выглядеть следующим образом:

...

СЧ 10 000 000; S:=A

СЛ 10 000 001; S:=A+B

ЗП 10 000 003; R:=A+B

УМ10 000 003; S:=(A+B)2

ЗП10 000 002; X:=(A+B)2

...

Из этого примера видно, что большинство адресов в нашей программе имеют вид B+, где числоBназовёмбазовым адресомпрограммы или простобазой(в нашем случаеB=10 000 000), а–смещениемадреса относительно этой базы. Здесь налицо существеннаяизбыточность информации. Очевидно, что в каждой команде можно указывать только короткоесмещение, а базу хранить отдельно (обычно на каком-то специальномбазовомрегистре центрального процессора). Исходя из этих соображений, предусмотрим в машинном языке командузагрузки базы (длина этой команды 4 байта):

ЗГБ

A1

8 бит

24 бита

Тогда наш фрагмент программы будет иметь такой вид:

...

ЗГБ 10 000 000

...

СЧ 000; S:=A

СЛ 001; S:=A+B

ЗП 003; R:=A+B

УМ003; S:=(A+B)2

ЗП002; X:=(A+B)2

...

Теперь, однако, при выполнении каждогообращения за операндом в основную память, центральный процессор долженвычислятьзначение адреса этого операнда адреса по формулеA=B+. Это вычисление производится в устройстве управления и, естественно, усложняет его. Например, адрес переменнойA=10000001=B+=107+1.

Осталось выбрать длину смещения . Вернёмся к рассмотрению дробноадресной ЭВМ, для которой реализовано базирование адресов. Например, пусть под запись смещения выделим в команде поле длиной в 12 бит. Будем, как и раньше, обозначать операнд в памятиA1илиA2, но помним, что теперь это толькосмешениеотносительно базы. Тогда все команды, которые обращаются за операндом в основную память, будут в нашей дробноадресной ЭВМ более короткими:

КОП

R1

A2

8 бит

4 бита

12 бит

Схема выполнения такой команды для формата регистр-память:

<R1> := <R1>  <B+A2>

или для формата память-регистр:

<B+A2> := <B+A2>  <R1>

Область, в которой находятся вычисляемые относительно базы ячейки основной памяти, обычно называется сегментомпамяти – это сплошной участок памяти, начало которого задаётся в некотором регистре, называемомбазовым, илисегментным. Будем далее для определённости называть такие регистры сегментными, а сам приём –сегментированиемпамяти.

Сегментирование позволяет уменьшить объём памяти для хранения программ, но оно имеет и один существенный недостаток: теперь каждая команда может обращаться не к любой ячейки оперативной памяти, а только к тем из них, до которых "дотягивается" смещение. В нашем примере каждая команда может обращаться к диапазону адресов от значения сегментного регистра BдоB+212-1. Для доступа к другим ячейкам памяти необходимо записать в сегментный регистр новое значение (как говорят,перезагрузитьсегментный регистр). Несмотря на указанный недостаток,практическивсе современные ЭВМ производят сегментирование памяти. Заметим также, что этот недостаток в большинстве архитектур современных ЭВМ исправляется путём реализациипеременнойдлины смещения (например, разрешается смешение в 1, 2 или 4 байта), что, однако ещё более увеличивает набор команд и усложняет центральный процессор.

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

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