7.4.1.3. Типы данных
Микропроцессор 80386 подразделяет память на 8-разрядные
байты, 16-разрядные слова
и 32-разрядные двойные слова. Байт образуют восемь соседних битов, начинающихся с любого логического
адреса, и эти биты нумеруются с 0 до 7, причем бит 0 является самым младшим значащим битом. На
рис. 1.5 показано сравнение
основных типов данных.
Слова хранятся в порядке «старший байт, младший байт».
Таким образом,

Рис. 1.5.
Основные типы данных.
значение, которое в регистре АХ было бы 0201, в
памяти было бы представлено как 0102-числа в шестнадцатеричной системе счисления.
(Кажется, что байт-ориентированные
передачи и обращение байтов при обмене с регистрами останутся с нами навсегда.) То есть слова содержат 16 бит и
младший байт хранится по меньшему
адресу, а старший байт - по большему адресу. Каждый байт внутри слова имеет
свой собственный адрес. Адресом слова или двойного слова является адрес соответствующего
младшего байта.
Для достижения максимальной гибкости в структурах данных
и эффективного использования
памяти слова необязательно выравнивать по четным адресам. Двойные слова также
необязательно выравнивать по адресам, кратным четырем. Однако при использовании в
системной конфигурации с 32-разрядной магистралью обмен данными между процессором
и памятью производится двойными словами, начинающимися с адресов, кратных четырем. Процессор
преобразует запросы не
выровненных слов или двойных слов в последовательность запросов, приемлемых для интерфейса с памятью. Таким
образом, отсутствие выравнивания данных снижает производительность из-за увеличения количества
обращений к памяти. Для повышения производительности структуры данных и стеки следует
выравнивать по четным
адресам и по адресам, кратным четырем.
Поскольку предварительная выборка с образованием очереди
команд осуществляется
внутри МП, то команды не обязаны быть выровнены по границам слов или двойных слов. Однако при таком
выравнивании скорость обработки несколько увеличивается.
В
дополнение к байтам, словам и двойным словам МП 80386 поддерживает также следующие дополнительные типы данных.
Неупакованный двоично-десятичный тип - распакованное байтовое
представление десятичной цифры от 0 до 9. Распакованные десятичные числа
хранятся как беззнаковые
байтовые значения по одной цифре в каждом байте. Значение цифры определяется младшим полубайтом.
Старший полубайт должен быть равным нулю
при делении и умножении, но может иметь любое значение
при вычитании или сложении.
Упакованный двоично-десятичный тип - упакованное байтовое
представление двух
десятичных цифр от 0 до 9. Каждая цифра хранится в своем полубайте. Цифра в старшем полубайте является
более значимой. Диапазон упакованного десятичного байта составляет от 0 до 99.
Битовое поле - непрерывная последовательность битов, в которой
каждый бит рассматривается
как независимая переменная. Битовое поле может начинаться с любого бита любого байта и может
быть длиной до 32 бит.
Битовая строка - подобно битовому полю, битовая строка
является непрерывной
последовательностью битов. Битовая строка может начинаться с любого бита любого байта и иметь длину до (232 —1)
бит.
Ближний указатель - 32-разрядный логический адрес, который представляет
собой относительный
адрес внутри сегмента. Ближние указатели используются как в сплошной, так и в
сегментированной модели памяти.
Дальний указатель - 48-разрядный логический адрес из двух
компонентов: 16-разрядного сегмента и
32-разрядного относительного адреса. Дальние указатели используются программистами только в том случае, когда конструкторы
системы выбирают сегментированную организацию памяти.
Целый тип - знаковое двоичное значение, содержащееся в
32-разрядном двойном
слове, 16-разрядном слове или 8-разрядном байте. Все операции предполагают представление чисел в
дополнительном коде. Знаковый бит расположен в бите 7 в байте, в бите 15 в слове и в
бите 31 в двойном слове. Он равен нулю для положительных чисел и единице для отрицательных.
Поскольку этот старший бит используется как знаковый, то 8-разрядное (байт) целое число может
изменяться в диапазоне
от —128 до +127, 16-разрядное (слово) целое число в диапазоне от — 32768 до +32767, а
32-разрядное (двойное слово) целое число в диапазоне от — 231 до +231 — 1. Нулевое значение имеет
положительный знак.
Обычный тип - беззнаковое двоичное значение, содержащееся в
32-разрядном двойном
слове, 16-разрядном слове или 8-разрядном байте. Все биты определяют величину числа. Значение числа
для байта составляет от 0 до 255, для слова от 0 до 65535 и для двойного слова от 0 до 232 —
1.
Строка - непрерывная последовательность байтов, слов или двойных
слов. Строка может
содержать от 0 до 232 — 1 байтов или 4 Гбайт.