1.4. Представление данных

При рассмотрении организации памяти ЭВМ данные трактовались с точки зрения их разрядности. Здесь мы рассмотрим логическую интерпретацию типов данных.

Целые числа

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

Целые числа без знака представляются в двоичном виде. Каждое такое число состоит из k бит, где k=8,16 или 32.

Например, байт    представляет число 27+25+23+22=172, а слово

 представляет число 7*163+7*162+9=30473.

Самое большое число, которое можно представить байтом, равно 255, словом — 216-1=65535.

Целые числа со знаком представляются в виде байта, слова и двоичного слова. Диапазоны значений равны:

· байт                        -128 £ x £ 127

· слово          -32768 £ x £ 32767

· двойное слово       -2147483648 £ x £ 2147483647

Числа со знаком записываются в дополнительном коде: положительное число записывается как беззнаковое, а отрицательное число – x, при x > 0, представляется как 2k-x, где k – количество разрядов в ячейке памяти, отведенной под число (k=8,16 или 32). Ясно, что если в этой ячейке записано некоторое беззнаковое число z, старший бит которого равен 1, то это число представляет знаковое число –(2k-z).

Например, в байте  будет записано беззнаковое число z = 172, которое превращается в число –(256-172)=-84, если рассматривать его как число со знаком.

Таким образом, представление отрицательного числа –x будет равно 2k-x. Это представление можно получить с помощью следующих действий:

1) выписать двоичное представление числа x,

2) равные единицам разряды заменить нулями, а нули – единицами,

3) к полученному числу прибавить 1.

Например, для числа –84, производятся действия:

1) 84=26+24+22z                      

2) инвертируем биты:           

3) прибавляем 1:                    

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

Иногда затраты на перевод чисел из десятичной формы записи в двоичную, и наоборот, велики. С учетом этого предусмотрено специальное представление целых чисел, при котором эти числа представляются в виде десятичных чисел. Оно строится по следующему принципу: берется десятичная запись числа и каждая его цифра заменяется на четыре двоичные цифры. Например, число 326 заменяется на последовательность бит 001100. Этот формат называется BCD-форматом. Различают неупакованный и упакованный BCD-форматы.

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

ачения знака применяются неиспользованные тетрады. Если использовать ASCII-коды для представления цифр и знаков, то число будет состоять из символов:

            00110000=’0’,                       00110110=’6’,

            00110001=’1’,                       00110111=’7’,

            00110010=’2’,                       00111000=’8’,

            00110011=’3’,                       00111001=’9’,

            00110100=’4’,                       01=’+’,

            00110101=’5’,                       01=’-‘.

Например, число -326 будет представляться как последовательность байт ‘6’,’2’,’3’,’-‘. Это записывается как  db    ‘623-‘

Неупакованный BCD-формат может состоять из произвольного фиксированного числа байт. При выполнении арифметических операций отрицательные числа могут быть представлены в дополнительном коде:- если число байт формата равно n, то отрицательное число 10n-x. Например, при n=4, число –326 будет представляться символьной строкой ‘4769’.

Упакованный BCD-формат. В каждом байте записаны две десятичные цифры. Число состоит из 20 цифр и занимает 10 байт. Число определяется с помощью директивы DT. Например, число x=12345 будет определено как

x    dt   12345

и состоять из двадцати цифр 00000000000000012345, каждая из которых записана в виде четырех бит. В этом случае цифры располагаются в памяти как последовательность байт 01, 01, 00000001, 00000000, 00000000, …

Первый байт будет иметь смещение (относительный адрес) x, второй – x+1, третий – x+2, и т.д.

Самый старший бит десятого байта используется для хранения знака числа.

Например,

x    dt   -12345

будет транслироваться как строка, старший байт которой равен 80, затем идут шесть нулевых байтов, а затем – байты 01,23 и 45.

Замечание. Для форматов BCD применяется также противоположный порядок хранения байтов в памяти.

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

Число задает значения знака, порядка и мантиссы. В частности, если под число отводится 4 байта, то эти значения записываются в поля, размеры которых равны:

· знак S – 1 бит,

· порядок E – 8 бит,

· мантисса M – 23 бита.

В этом случае 32 бита

представляют число с плавающей точкой, значение которого равно

(-1)n×2E-127×1.M.

Следовательно, наибольшее и наименьшее значения этого числа равно

±2255-127×(2-2-23). Наименьшее положительное число равно 2-127.

Например, число 1 будет представлено битами:

1=(-1)0*2127-127*1.0

Напомним, что дробное число переводится в двоичную форму записи следующим образом: сначала целая часть переводится в двоичную форму, затем ставится точка и вычисляются разряды дробной части. С этой целью дробная часть сравнивается с ½, ¼, ⅛, … Если она больше или равна, то ставится 1 и из дробной части вычитается это число, а если меньше – ставится 0. Затем сравнивается со следующим числом.

Например, пусть x=. Сравниваем x с ½. Ставим 0. Сравниваем с ¼. Ставим 1 и производим действие x=-=. Сравниваем с . Ставим 0. Сравниваем с . Ставим 1 и производим действие x=-, и т.д. Получим =0.0101…

Символьные данные

Обычно в ЭВМ используются восьмиразрядные коды символов ASCII. Отметим следующие особенности:

1) Коды латинских букв упорядочены согласно алфавиту и идут без пропусков. В частности, если к коду буквы a’ прибавить 1, то получится код буквы b’, а a’+2 будет равно c’ и т.д.

2) Коды цифр упорядочены по возрастанию и идут без пропусков, значит все х, лежащие в пределах ‘0’ £ x £ ‘9’ будут цифрами.

Представление данных сопроцессора

Сопроцессор может обрабатывать 7 типов:

1) Целое число со знаком, 16 бит.

2) Короткое целое со знаком, 32 бита.

3) Длинное целое со знаком, 64 бита.

4) Целое число в упакованном BCD-формате, 10 байт.

5) Короткое вещественное число, 32 бита.

6) Длинное вещественное число, 64 бита.

7) Временное (или расширенное) вещественное число, 10 байт.

Диапазоны изменения чисел типов 1,2,3 равны соответственно

–215 £ x £ 215-1, -231 £ x £ 231-1, -263 £ x £ 263-1.

Поскольку в формате BCD старший байт отводится под знак, то в этом формате число состоит из 18 десятичных цифр и, значит, изменяется в пределах –1018 £ x £ 1018.

Короткое вещественное число занимает 32 бита, и было описано выше. Для длинного формата порядок E состоит из 11 бит, мантисса M из 53 бит. Его значение равно  (-1)S*2E-1023*1.M. Для расширенного формата порядок состоит из 15 бит, мантисса M — из 64 бит, x = (-1)S*2E-16383.