Типы данных

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

Слова хранятся в порядке «старший байт, младший байт». Таким образом, значение, которое в регистре АХ было бы 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 Гбайт.