Лекция
доцента кафедры ИВТ Гродненского госуниверситета
канд. техн. наук Ливак Елены Николаевны
Способы представления и форматы данных.
Типы данных
В лекции:
Основные типы данных с точки зрения размерности
Представление данных
Представление целых чисел
Вещественные числа
Представление символьных данных
Логическая интерпретация основных типов данных
С точки зрения размерности микропроцессор аппаратно поддерживает следующие основные типы данных:
- байт;
- слово;
- двойное слово;
- учетверенное слово.
Байт — восемь последовательно расположенных битов.
Биты нумеруются от 0 до 7, при этом бит 0 является самым младшим значащим битом.
Обратим внимание, байт – наименьшая адресуемая ячейка памяти.
Байт
7 6 5 4 3 2 1 0
Рис. 1. Основные типы данных: байт
Слово — два последовательно расположенных байта, 16 бит.
Биты нумеруются от 0 до 15.
Байт, содержащий нулевой бит, называется младшим байтом, а второй байт - старшим байтом.
Напомним, что в микропроцессорах Intel младший байт всегда хранится по меньшему адресу. Поэтому адресом слова считается адрес его младшего байта.
Слово
Старший байт | Младший байт |
15 7 0
Рис. 2. Основные типы данных: слово
Двойное слово — два последовательно расположенных слова (четыре байта), 32 бита.
Биты нумеруются от 0 до 31. Слово, содержащее нулевой бит, называется младшим словом, второе слово называется старшим словом. Младшее слово хранится по меньшему адресу. Адресом двойного слова считается адрес его младшего слова.
Двойное слово
Старшее слово | Младшее слово |
31 15 0
Рис. 3. Основные типы данных: двойное слово
Учетверенное слово — четыре последовательно расположенных слова (восемь байт), 64 бита.
Биты нумеруются от 0 до 63. Двойное слово, содержащее нулевой бит, называется младшим двойным словом, а второе двойное слово — старшим двойным словом. Младшее двойное слово хранится по меньшему адресу. Адресом учетверенного слова считается адрес его младшего двойного слова.
Учетверенное слово
Старшее двойное слово | Младшее двойное слово |
63 31 0
Рис. 4. Основные типы данных: учетверенное слово
Обычно на практике программными средствами обрабатываются данные, представленные целыми и вещественными числами, а также символами.
Из этих простых типов данных строятся так называемые структурированные типы: массивы, множества, строки символов, записи (структуры) и другие.
Поэтому важно понимать, прежде всего, как именно с точки зрения микропроцессора представляются и обрабатываются простые типы данных.
Для представления числа в памяти отводится необходимое количество байт.
Известно, что в ячейке из k разрядов можно записать 2k различных комбинаций из 0 и 1.
Для хранения (записи) беззнакового числа используются все биты отведенных для его представления ячеек.
Следовательно, с помощью 8 разрядов одного байта можно представить 28 = 256 целых беззнаковых чисел, то есть числа в диапазоне от 0 до 255.
С помощью 16 разрядов слова можно представить 216 = 65536 целых беззнаковых чисел, то есть числа в диапазоне от 0 до 65535.
Четырьмя байтами двойного слова (32 бита) можно представить числа в диапазоне от 0 до 232 . А учетверенное слово позволяет представить 264 различных целых беззнаковых чисел.
Диапазон представления знаковых чисел отличается от диапазона представления беззнаковых чисел, потому что один бит используется для обозначения знака числа. Для этого в так называемый знаковый разряд числа записывается 0 для положительного числа и 1 для отрицательного числа. Такое представление знаковых чисел называется прямым кодом.
Поэтому, с помощью одного байта могут быть представлены только 27 = 128 отрицательных чисел и 128 положительных чисел. То есть с помощью 8 разрядов одного байта могут быть записаны числа в диапазоне от –128 до +127 (включая 0).
Два байта слова при одном отведенном бите на знак числа, соответственно, позволяют представить 215 = 32768 отрицательных чисел и 32768 положительных чисел, то есть числа в диапазоне от –32 768 до +32 767 (включая 0).
Для представления в памяти компьютера отрицательных чисел используются специальные коды:
- обратный код;
- дополнительный код.
Специальные коды для представления отрицательных чисел необходимы в силу того, что алгоритм вычитания чисел является достаточно сложным для выполнения с помощью устройств компьютера, и потому операция вычитания заменяется операцией сложения, но для этого отрицательные числа должны быть представлены особым образом.
При записи отрицательного числа в обратном коде в знаковый разряд записывается 1, все остальные разряды числа инвертируются (то есть вместо единиц записываются нули, вместо нулей – единицы). Например, отрицательное двоичное число 1110010 в обратном коде будет иметь вид 10001101.
При записи отрицательного числа в дополнительном коде в знаковый разряд также помещается 1, все разряды инвертируются, а затем к младшему разряду прибавляется 1. Например, двоичное число из предыдущего примера 1110010 в дополнительном коде будет иметь вид 10001110, так как
10001101
+
1
---------------
10001110
Таким образом, использование дополнительного или обратного кода позволяет операцию вычитания свести к операции сложения: X – Y = X + (-Y).
Микропроцессор не содержит средства для работы с вещественными числами. В системе команд микропроцессора отсутствуют команды для арифметических операций с вещественными числами.
Такие средства (команды) содержатся в математическом (арифметическом) сопроцессоре - специальном устройстве, предназначенном для обработки вещественных чисел. В реальности микропроцессор взаимодействует с сопроцессором, посылая ему запросы на выполнение операций с вещественными числами и принимая ответы.
Однако программирование сопроцессора - достаточно сложная задача, требующая специальных знаний, и в курсе «Основы программирования» нами не рассматривается.
Поэтому ограничимся знаниями и практическими навыками работы с целыми числами.
Символьные данные также хранятся в памяти в двоичном виде.
Каждому символу ставится в соответствие двоичный код, который и записывается в качестве значения символа.
В системе кодировки ASCII для каждого символа выделяется один байт. (Системы кодировки обсуждались в разделе «Программирование на языке Pascal».)
Строка представляется как последовательность соседних байтов памяти, в которых записаны коды символов, образующих строку. Адрес первого байта является адресом строки.
Логическая интерпретация основных типов данных
Целый тип без знака — двоичное значение числа без знака (8, 16 или 32 бита).
Числовые диапазоны:
байт — от 0 до 255;
слово — от 0 до 65 535;
двойное слово — от 0 до 232–1.
Целый тип со знаком — двоичное значение числа со знаком (8, 16 или 32 бита).
Знак содержится в 7, 15 или 31-м бите соответственно.
Отрицательные числа представляются в дополнительном коде.
Числовые диапазоны:
8-разрядное целое — от –128 до +127;
16-разрядное целое — от –32 768 до +32 767;
32-разрядное целое — от –231 до +231–1.
Указатель на память
Указатель на память ближнего типа — 32-разрядный логический адрес, представляющий собой относительное смещение в байтах от начала сегмента.
Указатель на память дальнего типа — 48-разрядный логический адрес, состоящий из двух частей:
1) 16-разрядная сегментная часть (селектор);
2) 32-разрядное смещение относительно начала сегмента.
Цепочка — непрерывный набор байтов, слов или двойных слов максимальной длины 4 Гбайт.
Битовое поле - непрерывная последовательность бит, в которой каждый бит является независимым.
Битовое поле может начинаться с любого бита любого байта и содержать до 32 бит.
Неупакованный двоично-десятичный тип — байтовое представление десятичной цифры от 0 до 9.
Неупакованные десятичные числа хранятся как байтовые значения без знака по одной цифре в каждом байте. Значение цифры определяется младшим полубайтом.
Упакованный двоично-десятичный тип представляет собой упакованное представление двух десятичных цифр от 0 до 9 в одном байте. Каждая цифра хранится в своем полубайте. Цифра в старшем полубайте (биты 4–7) является старшей.
Итак,
в одном байте могут быть представлены (записаны):
- целое число без знака в диапазоне от 0 до 255;
- целое число со знаком в диапазоне от –128 до +127;
- упакованное представление двух десятичных цифр от 0 до 9, причем каждая цифра хранится в своем полубайте (цифра в старшем полубайте является старшей).
Одним словом могут быть представлены (записаны):
- целое число без знака в диапазоне от 0 до 65 535;
- целое число со знаком в диапазоне от –32 768 до +32 767;
- неупакованные десятичные числа как значения без знака по одной цифре в каждом байте (значение цифры определяется младшим полубайтом).