Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
123
Добавлен:
10.05.2015
Размер:
513.54 Кб
Скачать

Размещение числовых данных в памяти

В современных ВМ разрядность одной ячейки памяти, как правило, равна одному байту (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 Transfor­mation 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 дальнейшие перспективы новой разработки представля­ются неопределенными.

Соседние файлы в папке Lection