Форматы данных: Форматы данных FPU |
Программирование - Архитектура и система команд микропроцессоров x86 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
FPU содержит восемь 80-битных регистров общего назначения. Он может оперировать данными, которые могут размещаться в этих регистрах или памяти. Всего поддерживается семь различных форматов. Три формата для целых, три — для вещественных, один — для двоично-десятичных чисел. Каждый из этих форматов характеризуется числом занимаемых бит и диапазонами представимых в этом формате значений.
Таблица 4.1. Форматы данных FPU
Форматы целых чисел, поддерживаемых FPU: целое слово (word integer), короткое целое (short integer), длинное целое (long integer). Они занимают, соответственно, слово, двойное слово или два двойных слова. Самый старший бит слова, двойного слова или старшего двойного слова, занимаемого числом, отводится для индикации знака числа. Нуль соответствует плюсу, 1 — минусу. Таким образом, возможный диапазон представляемых значений для знаковых целых составляет: от –32768 до +32767 для слов, от –231 до 231-1 для коротких целых, от –263 до 263-1 для длинных целых. Специальное значение — целочисленная неопределенность записывается как отрицательный нуль. Если данное значение используется в качестве операнда-источника в командах загрузки целого или в арифметических операциях с целыми, FPU воспринимает его как наибольшее отрицательное значение, представленное в соответствующем формате. FPU может возвращать целочисленную неопределенность в операнд-назначение в следующих двух случаях:
Таблица 4.2. Представление двоичных целых
Двоично-десятичные целые числа Двоично-десятичные целые (decimal integer) — это набор четырехбитовых беззнаковых величин, каждая из которых может принимать значения от 0 до 9 и поле знака. В этом формате каждая цифра десятичного числа представляется четырьмя битами (тетрада), старшие тетрады соответствуют более старшим значащим цифрам десятичного числа. Старший бит старшего байта 80-битного двоично-десятичного значения предназначен для индикации знака числа, остальные же биты этого байта не используются и должны быть нулевыми. Специальное значение — упакованная десятичная неопределенность возвращается командой FBSTP как реакция на замаскированное исключение "недействительная операция". Попытка загрузить это значение командой FBLD приведет к неопределенному результату.
Таблица 4.3. Представление двоично-десятичных
FPU поддерживает три формата для вещественных чисел: короткие вещественные (short-real или single-real), длинные вещественные (long-real или double-real) и временные вещественные (temp-real или extended-real). Все вещественные форматы могут быть использованы для кодирования самых разнообразных значений. В общем случае, эти значения могут быть разделены на следующие классы:
Существуют также некорректные кодировки, которые не интерпретируются FPU и не должны использоваться. В общем случае вещественные числа кодируются с помощью трех полей: знак, порядок и мантисса. Для индикации знака отводится один самый старший бит числа, 1 соответствует отрицательным числам, 0 — положительным. В следующих (более младших) битах располагается поле порядка, оно занимает 8, 11 или 15 бит в зависимости от формата. Для поля порядка не предусмотрено отдельного бита знака, здесь применяется т.н. смещение порядка, оно заключается в прибавлении к реальному значению порядка некоторой константы и последующему кодированию уже этой суммы. Таким образом, все кодируемые значения положительны. С учетом применяемых в различных форматах констант (127 для коротких вещественных, 1023 для длинных вещественных, 16383 для временных вещественных) в поле порядка могут кодироваться следующие значения для порядка: от –126 до 127 для коротких вещественных, от –1022 до 1023 для длинных вещественных, от –16382 до 16383 для временных вещественных. Поле мантиссы занимает самые младшие биты. Его интерпретация зависит от применяемого формата. Для коротких и длинных вещественных самый старший бит мантиссы подразумевается равным единице для нормализованных величин и опускается. Таким образом, в форматах коротких и длинных вещественных поле мантиссы содержит только дробную часть числа. Старший бит считается нулевым при кодировании очень малых денормализованных чисел (когда смещенный порядок равен нулю) и нуля. В формате временных-вещественных старший бит мантиссы соответствует целой части мантиссы и не подразумевается автоматически равным чему-либо, все последующие младшие биты соответствуют дробной части мантиссы. Специальное значение — вещественная неопределенность является частным случаем отрицательных "не чисел" (QNaN). Она кодируется значением 10…00 для коротких и длинных вещественных и 110…00 для временных вещественных в поле мантиссы. Вещественная неопределенность может возвращаться FPU как замаскированная реакция на исключение "недействительная операция".
Таблица 4.4. Представление коротких (short-real) и длинных (long-real) вещественных
Таблица 4.5. Представление временных вещественных (temp-real)
Сопроцессоры 8087 и Intel287 поддерживали ряд специальных форматов данных, которые были удалены из последующих сопроцессоров для полного соответствия стандарту IEEE-754.
Таблица 4.6. Неподдерживаемые форматы Intel387, Intel486, …
|
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru