ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.12.2021

Просмотров: 12143

Скачиваний: 10

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

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

353

Целые числа без знака в языке Java не присутствуют и не поддерживаются JVM,

как и двоично-десятичные числа.

Таблица 5.4.

 Числовые типы данных для JVM

Тип

8 битов 16 битов 32 бита 64 бита 128 битов

Целые числа со знаком
Целые числа без знака

Двоично-десятичные целые числа

Числа с плавающей точкой

JVM поддерживает символы, но не традиционные 8-битные символы ASCII, a

16-битные символы UNICODE. Указатели поддерживаются главным образом для

внутреннего использования компилятора и системы обслуживания. Пользователь-
ские программы не могут непосредственно обращаться к указателям. Указатели
используются в основном для ссылок на объекты.

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

Команда состоит из кода операции и некоторой дополнительной информации, на-

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

Процесс определения, где находятся операнды (то есть их адреса), называется ад-

ресацией.

На рисунке 5.5 показано несколько возможных форматов для команд второго

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

КОД ОПЕРАЦИИ

КОД

ОПЕРАЦИИ

АДРЕС

КОД

ОПЕРАЦИИ

АДРЕС 1

АДРЕС 2

код

ОПЕРАЦИИ

АДРЕС 1 АДРЕС 2 АДРЕС 3

Рис.

 5.5. Четыре формата команд: безадресная команда (а); одноадресная команда (б);

двухадресная команда (в); трехадресная команда (г)

В одних машинах все команды имеют одинаковую длину; в других команды

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

возможных соотношений между длиной команды и длиной слова.


background image

354

Глава 5. Уровень архитектуры команд

•1 слово

1 слово

Команда

Команда
Команда
Команда

Команда

Команда
Команда

Команда

Команда

Команда
Команда

Команда

1 слово

Команда

Команда Команда Команда

Команда

в б в

Рис. 5.6. Некоторые возможные отношения между длиной команды и длиной слова

Критерии разработки для форматов команд

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

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

статочно долго.

Эффективность конкретной архитектуры команд зависит от технологии, кото-

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

архитектура (как в JVM), но если достун к памяти медленный, тогда желательно
иметь много регистров (как в UltraSPARC II). Тем читателям, которые считают,
что этот выбор сделать просто, мы предлагаем взять лист бумаги и записать следую-

щие предположения: 1) какова будет типичная скорость тактового генератора через

20 лет и 2) каково будет типичное время доступа к ОЗУ через 20 лет. Аккуратно
сложите этот лист бумаги и спрячьте его в надежном месте, а через 20 лет развер-

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

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

И даже если бы они могли его сделать, они бы просуществовали недолго, посколь-

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

Если речь идет об одинаковых машинах, то лучше иметь короткие команды,

чем длинные. Программа, состоящая из п 16-битных команд, занимает в два раза

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

дит снижение цен на память.

Более того, минимизация размера команд может усложнить их декодирование

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


background image

Форматы команд 355

Есть еще одна очень важная причина минимизации длины команд, и она стано-

вится все важнее с увеличением скорости работы процессоров: пропускная спо-
собность памяти (число битов в секунду, которое память может предоставлять).

Значительный рост скорости работы процессора за последнее десятилетие не со-

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

Если пропускная способность кэш-памяти команд составляет t бит/с, а сред-

няя длина команды г битов, то кэш-память способна передавать самое большее

t/r команд в секунду. Отметим, что это

 верхний предел

 скорости, с которой процес-

сор может выполнять команды, хотя в настоящее время предпринимаются попытки

преодолеть этот барьер. Ясно, что скорость, с которой могут выполняться коман-

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

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

Второй критерий разработки — достаточный объем пространства в формате

команды для выражения всех требуемых операндов. Машина с 2" операциями и со
всеми командами менее п битов невозможна. В этом случае в коде операции не
было бы достаточно места для того, чтобы указать, какая нужна команда. И исто-

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

Третий критерий связан с числом битов в адресном поле. Рассмотрим проект

машины с 8-битными символами и основной памятью, которая должна содержать
2

32

 символов. Разработчики вольны были приписать последовательные адреса бло-

кам по 8, 16, 24 или 32 бита.

Представим, что бы случилось, если бы команда разработчиков разбилась на

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

должен быть 8-битный байт, а другая требует, чтобы основной единицей памяти

было 32-битное слово. Первая группа предложила бы память из 2

32

 байтов с но-

мерами О, 1,2,3, ...,4 294 967 295. Вторая группа предложила бы память из 2

30

 слов

с номерами 0,1,2,3, ...,1073 741823.

Первая группа скажет, что для того чтобы сравнить два символа при организа-

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

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

следовательно, дополнительного пространства. 8-битная организация, напротив,
обеспечивает адрес для каждого символа, что значительно упрощает процедуру

сравнения.

Сторонники 32-битной организации скажут, что их проект требует всего лишь

2

30

 отдельных адресов, что дает длину адреса всего 30 битов, тогда как при 8-бит-

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


background image

3 5 6 Глава 5. Уровень архитектуры команд

Если адрес короткий, то и команда будет более короткой. Она будет занимать мень-
ше пространства в памяти, и к тому же для ее вызова потребуется меньше времени.

В качестве альтернативы они могут сохранить 32-битный адрес для обращения

к памяти в 16 Гбайт вместо каких-то там 4 Гбайт.

Этот пример демонстрирует, что для получения оптимальной дискретности

памяти требуются более длинные адреса и, следовательно, более длинные коман-

ды. Одна крайность — это организация памяти, при которой адресуется каждый

бит (например, Burroughs B1700). Другая крайность — это память, состоящая из

очень длинных слов (например, серия CDC Cyber содержала 60-битные слова).

Современные компьютерные системы пришли к компромиссу, который, в ка-

ком-то смысле, объединил в себе худшие качества обоих вариантов. Они требуют,

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

вается одно, два, а иногда даже четыре слова сразу. В результате считывания одно-

го байта из памяти на машине UltraSPARC II вызывается сразу минимум 16 бай-
тов (см. рис. 3.44), а иногда и вся строка кэш-памяти в 64 байта.

Расширение кода операций

В предыдущем разделе мы увидели, что короткие адреса противостоят удачной

дискретности памяти. В этом разделе мы рассмотрим компромиссы, связанные

с кодами операций и адресами. Рассмотрим команду размером (n+k) битов с кодом

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

к

 раз-

личных операций и 2" адресуемых ячеек памяти. В качестве альтернативы те же

(n+k) битов можно разбить на код операции в (к-1) битов и адрес в (п+1) битов.
При этом будет либо в два раза меньше команд, но в два раза больше памяти, либо

то же количество памяти, но дискретность вдвое выше. Код операции на (к+1)
битов и адрес в (п-1) битов дает большее количество операций, но ценой этого
преимущества является либо меньшее количество ячеек памяти, либо не очень удач-
ная дискретность при том же объеме памяти. Наряду с простыми компромиссами
между битами кода операции и битами адреса, которые были только что описаны,

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

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

Понятие расширения кода операций можно пояснить на примере. Рассмотрим

машину, в которой длина команд составляет 16 битов, а длина адресов — 4 бита,
как показано на рис. 5.7. Эта ситуация вполне разумна для машины, содержащей

16 регистров (а следовательно, 4-битный адрес регистра), над которыми совер-

шаются все арифметические операции. Один из возможных вариантов — наличие
в каждой команде 4-битного кода операции и трех адресов, что дает 16 трехадрес-
ных команд.

14

i v

12

1

10

У

ti

I

6

5

4

3

г

1

Код операции Адрес 1 Адрес 2 Адрес 3

Рис. 5.7. Команда с 4-битным кодом операции и тремя 4-битными адресными полями


background image

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

357

Если разработчикам нужно 15 трехадресных команд, 14 двухадресных команд,

31 одноадресная команда и 16 безадресных команд, они могут использовать коды
операций от 0 до 14 в качестве трехадресных команд, а код операции 15 уже интер-
претировать по-другому (рис. 5.8).

16 битов

4-битный

код операции

8-битный __

код операции

12-битный

код операции

16-битный

код операции

-(5ооо)

0001

0010

1100

1101

1110

• ( 1 1 1 1

1111

1111

1111

1111

1111

<1111

1111

1111

1111

1111

1111

1111

1111

-{1111

1111

1111

1111

1111

1111

хххх

хххх

хххх

хххх

хххх

хххх

0000)

0001

0010

1011

1100

1101

1110

1110

1110

1110

1111

1111

1111

1111

1111

1111

1111

1111

1111

1111

УУУУ

УУУУ

УУУУ

УУУУ

УУУУ

УУУУ

УУУУ

УУУУ

УУУУ

УУУУ

УУУУ

УУУУ

0000)

0001

1110
1111

0000

0001

1101

1110

1111

1111

1111

1111

1111

1111

7771.

7222.

7222.

2222.

7222.

7222

7777

7222

2222.

ZZZZ

7222

2222

Z777

7222.

ZZ22

7222.

ZZZZ

2222.

7222

7222.

0000)

0001

0010

1101

1110
1111

15 трехадресных команд

14 двухадресных команд

31 одноадресная команда

16 безадресных команд

15 12 11 8 7 4 3 0

Номер бита

Рис.

 5.8. Расширение кода операции допускает 15 трехадресных команд, 14 двухадресных

команд, 31 одноадресную команду и 16 безадресных команд. Поля хххх,

 уууу

и

 zzz2

 — это 4-битные адресные поля