
- •Глава 2 Архитектура системы команд
- •Классификация по месту хранения операндов
- •Стековая архитектура
- •Аккумуляторная архитектура
- •Типы и форматы операндов
- •Упакованные целые числа
- •Разрядность основных форматов числовых данных
- •Размещение числовых данных в памяти
- •Символьная информация
- •Логические данные
- •Прочие виды информации
- •Видеоинформация
- •Аудиоинформация
- •Типы команд
- •Команды пересылки данных
- •Команды арифметической и логической обработки
- •Операции с целыми числами
- •Операции с числами в форме с плавающей запятой
- •Логические операции
- •Операции сдвигов
- •Операции с десятичными числами
- •Simd-команды
- •Адресность и эффективность использования памяти
- •Способы адресации операндов
- •Непосредственная адресация
- •Выбор системы операций на основе структурирования алгоритмов
Размещение числовых данных в памяти
В современных ВМ разрядность одной ячейки памяти, как правило, равна одному байту (8 бит). В то же время реальная длина кодов чисел составляет 2, 4, 8 или 16 байт. При хранении таких чисел в памяти последовательные байты числа раз-
79
мещают в нескольких ячейках с последовательными адресами, при этом для доступа к числу указывается только наименьший из адресов. При разработке архитектуры системы команд необходимо определить порядок размещения байтов в памяти, то есть какому из байтов (старшему или младшему) будет соответствовать этот наименьший адрес1. На рис. 2.28 показаны оба варианта размещения 32-разрядного числа в четырех последовательных ячейках памяти, начиная с адреса х
Рис. 2.28. Размещение в памяти 32-разрядного числа: а — начиная со старшего байта;
б — начиная с младшего байта
В вычислительном плане оба способа записи равноценны. Так, фирмы DEC и Intel отдают предпочтения размещению в первой ячейке младшего байта, a IBM и Motorola ориентируются на противоположный вариант. Выбор обычно связан с некими иными соображениями разработчиков ВМ. В настоящее время в большинстве машин предусматривается использование обоих вариантов, причем выбор может быть произведен программным путем за счет соответствующей установки регистра конфигурации.
Рис. 2.29. Размещение чисел в памяти с выравниванием
___________
' В англоязычной литературе систему записи числа, начиная со старшего байта, обозначают термином «big endian», а с младшего байта — термином «little endian». Оба названия происходят от названия племен («тупоконечники» и «остроконечники»), упоминаемых в книге Джонатана Свифта «Путешествия Гулливера». Там описывается религиозная война между этими племенами, по причине разногласий в вопросе, с какого конца следует разбивать яйцо — тупого или острого.
80
Помимо порядка размещения байтов, существенным бывает и выбор адреса, с которого может начинаться запись числа. Связано это с физической реализацией полупроводниковых запоминающих устройств, где обычно предусматривается возможность считывания (записи) четырех байтов подряд. Причем данная операция выполняется быстрее, если адрес первого байта А отвечает условию A mod 5=0 (5= 2, 4, 8, 16). Числа, размещенные в памяти в соответствии с этим правилом, называются выравненными (рис. 2.29).
На рис. 2.30 показаны варианты размещения 32-разрядного слова без выравнивания. Их использование может приводить к снижению производительности.
Адрес
-
0
4
8
12
16
20
Рис. 2.30. Размещение 32-разрядного слова без соблюдения правила выравнивания
Большинство компиляторов генерируют код, в котором предусмотрено выравнивание чисел в памяти.