- •8. Типы и форматы операндов
- •Числовая информация
- •Числа в форме с фиксированной запятой
- •Упакованные целые числа
- •Десятичные числа
- •Числа в форме с плавающей запятой
- •Стандарт ieee 754
- •Упакованные числа с плавающей запятой
- •Разрядность основных форматов числовых данных
- •Размещение числовых данных в памяти
- •Символьная информация
- •Логические данные
- •Прочие виды информации
- •Видеоинформация
- •Аудиоинформация
Размещение числовых данных в памяти
В современных ВМ разрядность одной ячейки памяти, как правило, равна одному байту (8 бит). В то же время реальная длина кодов чисел составляет 2, 4, 8 или 16 байт. При хранении таких чисел в памяти последовательные байты числа размещают в нескольких ячейках с последовательными адресами, при этом для доступа к числу указывается только наименьший из адресов. При разработке архитектуры системы команд необходимо определить порядок размещения байтов в памяти, то есть какому из байтов (старшему или младшему) будет соответствовать этот наименьший адрес. На рис. 8.14 показаны оба варианта размещения 32-разрядного числа в четырех последовательных ячейках памяти, начиная с адреса х.

Рис. 8.14. Размещение в памяти 32-разрядного числа: а — начиная со старшего байта; б— начиная с младшего байта.
В вычислительном плане оба способа записи равноценны. Так, фирмы DEC и Intel отдают предпочтения размещению в первой ячейке младшего байта, a IBM и Motorola ориентируются на противоположный вариант. Выбор обычно связан с некими иными соображениями разработчиков ВМ. В настоящее время в большинстве машин предусматривается использование обоих вариантов, причем выбор может быть произведен программным путем за счет соответствующей установки регистра конфигурации.
Помимо порядка размещения байтов, существенным бывает и выбор адреса, с которого может начинаться запись числа. Связано это с физической реализацией полупроводниковых запоминающих устройств, где обычно предусматривается возможность считывания (записи) четырех байтов подряд. Причем данная операция выполняется быстрее, если адрес первого байта А отвечает условию А mod 5 = 0 (5 = 2, 4, 8, 16). Числа, размещенные в памяти в соответствии с этим правилом, называются выравненными. Большинство компиляторов генерируют код, в котором предусмотрено выравнивание чисел в памяти.
Символьная информация
В общем объеме вычислительных действий все большая доля приходится на обработку символьной информации, содержащей буквы, цифры, знаки препинания, математические и другие символы. Каждому символу ставится в соответствие определенная двоичная комбинация. Совокупность возможных символов и назначенных им двоичных кодов образует таблицу кодировки. В настоящее время применяется множество различных таблиц кодировки. Объединяет их весовой принцип, при котором веса кодов цифр возрастают по мере увеличения цифры, а веса символов увеличиваются в алфавитном порядке. Так вес буквы «Б» на единицу больше веса буквы «А». Это способствует упрощению обработки в ВМ.
До недавнего времени наиболее распространенными были кодовые таблицы, в которых символы кодируются с помощью восьмиразрядных двоичных комбинаций (байтов), позволяющих представить 256 различных символов:
расширенный двоично-кодированный код EBCDIC (Extended Binary Coded Decimal Interchange Code);
американский стандартный код для обмена информацией ASCII (American Standard Code for Information Interchange).
Код EBCDIC используется в качестве внутреннего кода в универсальных ВМ фирмы IBM. Он же известен под названием ДКОИ (двоичный код для обработки информации).
Стандартный код ASCII—7-разрядный, восьмая позиция отводится для записи бита четности. Это обеспечивает представление 128 символов, включая все латинские буквы, цифры, знаки основных математических операций и знаки пунктуации. Позже появилась европейская модификация ASCII, называемая Latin 1 (стандарт ISO 8859-1). В ней «полезно» используются все 8 разрядов. Дополнительные комбинации (коды 128-255) в новом варианте отводятся для представления специфических букв алфавитов западноевропейских языков, символов псевдографики, некоторых букв греческого алфавита, а также ряда математических и финансовых символов. Именно эта кодовая таблица считается мировым стандартом де-факто, который применяется с различными модификациями во всех странах. В зависимости от использования кодов 128-255 различают несколько вариантов стандарта ISO 8859 (табл. 8.3).
Таблица 8.3. Варианты стандарта ISO 8859.
|
Стандарт |
Характеристика |
|
ISO 8859-1 |
Западно-европейские языки |
|
ISO 8859-2 |
Языки стран центральной и восточной Европы |
|
ISO 8859-3 |
Языки стран южной Европы, мальтийский и эсперанто |
|
ISO 8859-4 |
Языки стран северной Европы |
|
ISO 8859-5 |
Языки славянских стран с символами кириллицы |
|
ISO 8859-6 |
Арабский язык |
|
ISO 8859-7 |
Современный греческий язык |
|
ISO 8859-8 |
Языки иврит и идиш |
|
ISO 8859-9 |
Турецкий язык |
|
ISO 8859-10 |
Языки стран северной Европы (лапландский, исландский) |
|
ISO 8859-11 |
Тайский язык |
|
ISO 8859-13 |
Языки балтийских стран |
|
ISO 8859-14 |
Кельтский язык |
|
ISO 8859-15 |
Комбинированная таблица для европейских языков |
|
ISO 8859-16 |
Содержит специфические символы ряда языков: албанского, хорватского, английского, финского, французского, немецкого, венгерского, ирландского, итальянского, польского, румынского и словенского |
В популярной в свое время операционной системе MS-DOS стандарт ISO 8859 реализован в форме кодовых страниц OEM (Original Equipment Manufacturer). Каждая OEM-страница имеет свой идентификатор (табл. 8.4).
Таблица 8.4. Наиболее распространенные кодовые страницы OEM
|
Идентификатор |
Страны кодовой страницы | |
|
СР437 |
США, страны западной Европы и Латинской Америки | |
|
СР708 |
Арабские страны | |
|
СР737 |
Греция | |
|
СР775 |
Латвия, Литва, Эстония | |
|
СР852 |
Страны восточной Европы | |
|
СР853 |
Турция | |
|
СР855 |
Страны с кириллической письменностью | |
|
СР860 |
Португалия | |
|
СР862 |
Израиль | |
|
СР865 |
Дания, Норвегия | |
|
СР866 |
Россия | |
|
СР932 |
Япония | |
|
СР936 |
Китай | |
Хотя код ASCII достаточно удобен, он все же слишком тесен и не вмещает множества необходимых символов. По этой причине в 1993 году консорциумом компаний Apple Computer, Microsoft, Hewlett-Packard, DEC и IBM был разработан 16-битовый стандарт ISO 10646, определяющий универсальный набор символов (UCS, Universal Character Set). Новый код, известный под названием Unicode, позволяет задать до 65 536 символов, то есть дает возможность одновременно представить символы всех основных «живых» и «мертвых» языков. Для букв русского языка выделены коды 1040-1093.
В «естественном» варианте кодировки Unicode, известном как UCS-2, каждый символ описывается двумя последовательными байтами тип, так что номеру символа соответствует численное значение 256 х т + п. Таким образом, кодовый номер представлен 16-разрядным двоичным числом. Наряду с UCS-2 в рамках Unicode существуют еще несколько вариантов кодировки Unicode (UTF, Unicode Transformation Formats), основные из которых UTF-8 и UTF-7.
В кодировке UTF-8 коды символов меньшие, чем 128, представляются одним байтом. Все остальные коды формируются по более сложным правилам. В зависимости от символа его код может занимать от двух до шести байтов, причем старший бит каждого байта всегда имеет единичное значение. Иными словами, значение байта лежит в диапазоне от 128 до 255. Ноль в старшем бите байта означает, что код занимает один байт и совпадает по кодировке с ASCII. Схема формирования кодов UTF-8 показана в табл. 8.5.
Таблица 8.5. Структура кодов UTF-8.
|
Число байтов |
Двоичное представление |
Число свободных битов | ||
|
1 |
Оххххххх |
7 | ||
|
2 |
110ххххх 10хххххх |
11(5 + 6) | ||
|
3 |
1110хххх 10хххххх 10хххххх |
16(4 + 6 x 2) | ||
|
4 |
11110ххх 10хххххх 10хххххх 10хххххх |
21(3 + 6 x 3) | ||
|
5 |
111110хх 10хххххх Юхххххх 10хххххх 10хххххх |
26 (2 + 6 х 4) | ||
|
6 |
1111110х 10хххххx 10хххххх 10хххххх 10хххххх 10хххххх |
31(1+6 x 5) | ||
В UTF-7 код символа также может занимать один или более байтов, однако в каждом из байтов значение не превышает 127 (старший бит байта содержит ноль). Многие символы кодируются одним байтом, и их кодировка совпадает с ASCII, однако некоторые коды зарезервированы для использования в качестве преамбулы, характеризующей последующие байты многобайтового кода.
Стандарт Unicode обратно совместим с кодировкой ASCII, однако если в ASCII для представления схожих по виду символов (минус, тире, знак переноса) применялся общий код, в Unicode каждый из этих символов имеет уникальную кодировку. Впервые Unicode был использован в операционной системе Windows NT. Распределение кодов в Unicode иллюстрирует табл. 8.6.
Таблица 8.6. Блоки символов в стандарте Unicode.
|
Коды |
Символы |
|
0-8191 |
Алфавиты — английский, европейские, фонетический, кириллица, армянский, иврит, арабский, эфиопский, бенгали, деванагари, гур, гуджарати, ория, телугу, тамильский, каннада, малайский, сингальский, грузинский, тибетский, тайский, лаосский, кхмерский, монгольский |
|
8192-12287 |
Знаки пунктуации, математические операторы, технические символы, орнаменты и т. п. |
|
12288-16383 |
Фонетические символы китайского, корейского и японского языков |
|
16384-59391 |
Китайские, корейские, японские идеографы. Единый набор символов каллиграфии хань |
|
59392-65024 |
Блок для частного использования |
|
65025-65536 |
Блок обеспечения совместимости с программным обеспечением |
Параллельно с развитием Unicode исследовательская группа ISO проводит работы над 32-битовой кодовой таблицей, однако ввиду широкой распространенности кодировки Unicode дальнейшие перспективы новой разработки представляются неопределенными.
