Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Форматы данныхСтр 1 из 2Следующая ⇒
Процессоры непосредственно используют в качестве операндов знаковые и беззнаковые целые числа, строки байт, цифр и символов, битовые строки, указатели и числа с плавающей запятой. Адресом слова является адрес младшего байта (такой порядок называется Little-Endian Memory Format). Применим также и обратный порядок адресации – Big-Endian Memory Format. Целочисленный блок ALU микропроцессоров выполняет операции над следующими типами данных (рис.2). 1). Целые двоичные числа без знака (рис.2а) могут быть 8/16/32/64-разрядными (Unsigned Byte/Word/Double Word/Quade Word). Например, байт D2 задает целое число без знака, равное 21010, слово D2: FC задает целое число без знака, равное FCD216=6472210 (двоеточие разделяет байты в последовательности кодов). К целым числам без знака относится и специфический тип данных - указатель, который содержит: адрес начала сегмента (база или селектор) и смещение (32бит(16+16), 48бит(16+32)). Значение указателя рассчитывается по правилу вычисления физического адреса. Например, Указатель D2: FC: 3A: 02 - база 023A16, смещение FCD216 и имеет значение 023A16*1016=23A016+FCD216=1207216=7384210. 2). Целые двоичные числа со знаком (рис.2б) обрабатываются как числа в дополнительном коде. Выполняются операции только над 8/16/32/64-разрядными числами (Integer Byte/Word/Double Word / Quade Word). Единичное значение старшего бита старшего байта является признаком отрицательного числа. Например, - байт D2 задает целое число со знаком, равное -4610, - слово D2: FC задает целое число со знаком, равное FCD216= -32E16= -81410. Целые двоичные записываются в памяти, начиная с младших байтов. Во всех форматах целого отрицательные числа представляются в дополнительном коде. Примеры целых чисел представлены в табл.1.
Таблица 1
3). Двоично-десятичные числа (рис.2в) могут задаваться как в неупакованном формате, в котором каждая десятичная цифра занимает один байт, так и в упакованном формате, в котором каждая цифра занимает одну тетраду, т.е. байт содержит две цифры. Знак для обоих форматов кодируется в старшем бите отдельного старшего знакового байта последовательности (значение остальных бит при сложении и вычитании несущественно, а при умножении и делении они должны быть нулевыми). Десятичные цифры представлены в коде 8-4-2-1 (BCD code, binary coded decimal). Примеры десятичных чисел: - неупакованное: 08: 09: 04: 05: 00 = 549810 - упакованное: 98: 54: 02: 80 = -2549810. 4). Строки (рис.2г) байт, слов и двойных слов (Bit String, Byte String, Word String, Double Word String) длиной до 4Гбайт располагаются в последовательных ячейках памяти. Строки используются для указания последовательности символов. Например, последовательность 4D: 49: 43: 52: 4F в коде ASCII (American Standard Code for Information Interchange) задает слово MICRO. Целочисленный блок ALU обрабатывает также битовые строки (Bit String – наборы смежных бит длиной до 4Гбит), битовые поля (Bit Field – группы до 32 смежных бит, расположенных не более чем в 4 байтах).
Блоками FPU обрабатываются упакованные 80-разрядные двоично-десятичные числа и числа в формате с плавающей запятой.
Рис.2 Форматы данных, обрабатываемых целочисленным арифметико-логическим устройством Длинные целые двоично-десятичные числа представляются в упакованном формате, в котором под каждую цифру (D0 … D17) отводится тетрада. В памяти эти числа также располагаются с младших разрядов и занимают 10 байт, из которых старший - знаковый. Полный диапазон двоично-десятичных чисел представлен в табл.2 (нуль может быть как +0 и -0), а для представления неопределенности используется специальный код).
Таблица 2
Короткое вещественное число (одинарной точности – Single Precision) (рис.3) занимает четыре байта. Знак указывается в старшем разряде старшего байта (S = 0 - положительное число, S=1 - отрицательное), причем коды равных по абсолютной величине положительных и отрицательных чисел отличаются только этим битом. Рис.3 Формат данных с плавающей запятой Характеристика числа l x занимает 8 разрядов (младший разряд характеристики хранится в разряде номер 7 третьего байта) и принимает рабочие значения от 0116 до FE16 (от 110 до 25410). Характеристика смещена относительно истинного порядка рx числа на 7F16(12710), т.е. рx = l x – 7F16 (или l x = рx + 7F16). Таким образом, порядок рx может изменяться в пределах от –7E16 до 7F16 (от –12610 до 12710). Мантисса всегда нормализована и имеет 23 явных разряда и один неявный. Нормализация выполняется так, что старшая значащая единица кода мантиссы всегда располагается в разряде с весом 20 (перед запятой). Этот разряд в коде мантиссы не указывается, но всегда подразумевается. Мантисса имеет вид mx = 1.a1a2a3…a23 = 1.A, где ai - двоичная цифра в i-разряде мантиссы (с весом 2-i), А - численное значение дробной части нормализованной мантиссы. Значение вещественного числа определяется выражением: (-1)Smx2lx - 127 = (-1)S(1.A)2lx-127 , где s – значение в разряде знака. Например, последовательность байт 00: 00: 5А: С1 в формате короткого вещественного числа может быть дешифрована следующим образом: 1 100 0001 0 101 1010 0000 0000 0000 0000 С 1 5 A 0 0 0 0 знак характеристика- мантисса
Знак отрицательный, характеристика равна 8216, мантисса 1.101101. Тогда число равно (-1)1*1.101101*23 = -1101.1012 = -13.62510. Примеры записи чисел:
Существуют три исключения: 1) если lx = FF16, А = 0, то такое число считается бесконечно большим; 2) если lx = FF16, А ¹ 0, то число считается неинициализированным (его значение ранее не задавалось, а такое число называется not a number - Nan); 3) если lx = 0016, то значение числа находится как (-1)S * (0.А) * 2-126 . Формат длинного вещественного числа (двойной точности - Double Precision) аналогичен, но для характеристики отведено 11 разрядов (смещение равно 3FF16 = 102310), мантисса имеет длину 52 бит. Форматы соответствуют стандарту IEEE P754 на представление двоичных чисел с плавающей запятой. Вещественные числа в форматах короткого и длинного представляются в нормализованном виде (единица перед запятой не указывается, но учитывается неявно), а в формате временного – старший байт мантиссы указывается явно. Порядок вещественных чисел записывается в поле характеристики в смещенном виде с допустимыми значениями от 00...00 до 11...10. В форматах КВ и ДВ значение 11…11 используется для кодирования , когда в поле мантиссы все нули, и для обозначения «не чисел» (NAN), когда в поле мантиссы не нулевое значение (табл.3). Для указания неопределенного значения используется специальный код. Множество конечных чисел разбито на два класса – нормализованные и денормализованные числа. У денормализованных характеристика равна нулю, а мантисса отлична от нуля. Таблица 3
Диапазон временного вещественного (повышенная точность – Extended Precision) представлен в табл.4. Число кодируется в 80 разрядах – 64 бит мантисса, 15 бит характеристика (смещение равно 3FFF16), 1 бит знак. Все множество конечных чисел разбито на три класса: нормализованные, ненормализованные и денормализованные (у чисел двух последних классов старший разряд мантиссы всегда нулевой, а денормализованные также содержат все нули в поле характеристики). Формирование ненормализованных и денормализованных чисел приводит к исключительным ситуациям, о которых АСП сообщает. Формат временного вещественного обеспечивает максимальный рабочий диапазон значений вещественных чисел и является основным. В формате вещественного временного выполняются все операции АСП (рис.4). При загрузке данных АСП автоматически преобразует исходные данные, представленные в памяти в любом формате, в формат ВВ. Такое преобразование не приводит к потере точности. Результаты вычислений могут быть переданы в память в любом формате. Преобразование в формат, отличный от ВВ, может привести к потере точности из-за необходимости округления. Таблица 4
Рис.4. Фрагмент структуры арифметического сопроцессора Регистровый стек ST состоит из 80-разрядных регистров, в которых в формате временных вещественных хранятся операнды. Все типы данных при загрузке в блок обработки автоматически преобразуются в формат временного вещественного. Стек «растет вниз» по направлению уменьшения номеров регистров. Команды АСП могут адресовать регистры стека неявно, обращаясь к вершине, или явно, задавая смещение номера регистра относительно вершины стека SТ (такая двойная адресация значительно упрощает организацию передачи параметров при обращении к подпрограммам). Регистр тэгов содержит 16-разрядное слово признаков (по 2 разряда на каждый регистр стека), характеризующее данные в стеке: · 00 – в регистре действительное число, · 01 – истинный нуль, · 10 – денормализованное число, NAN или бесконечность, · 11 – в регистре нет данных. Регистр состояния содержит слово состояния АСП SW (рис.5). Рис.5 Формат слова состояния Назначение полей слова состояния: · Разряды [0…5] – Признаки особых случаев:
Будучи взведенным, флаг особой ситуации остается неизменным. Его можно сбросить специальной командой перезаписи флагов. · Разряд [7] – " F" – Устанавливается в единицу при возникновении любого незамаскированного особого случая. · Разряды [8…10, 14] – " CIF" – Код условия в операциях сравнения, проверки и анализа (ST(0) - число в вершине стека, Х – число в памяти или ST(i), r0 r1 r2 - три младших бита частного):
· Разряды [11…13] – " ST" – Указатель стека; · Разряд [15] – " B" – Занятость АСП (BUSY) - устанавливается в ходе выполнения операций. После инициализации все биты регистра состояния, за исключением " CIF", устанавливаются в нуль. Регистр управления (в CU) содержит слово управления CW и определяет вариант обработки данных (рис.6). Для каждого варианта программист задает маскирование особых случаев, точность вычислений, способ округления и интерпретацию бесконечности. Слово управления загружается специальной командой. Рис.6. Формат слова управления Назначение полей слова управления: · Разряды [0…5] – Маски особых случаев, обнаруживаемых АСП - при наличии " 1", т.е. маски, возникновение соответствующего особого случая не вызывает прерывания и выдается предопределенный результат: [0] - " I" (недействительная операция) – в качестве результата операции выдается NAN, если им является один из операндов, или неопределенность (например, при денормализованом делителе) – в остальных случаях; [1] - " D" (денормализованный операнд) – преобразование в эквивалентное ненормализованное число (путем сдвига мантиссы и изменения порядка) и продолжение операции; [2] – " Z" (деление на нуль) – возврат как результат операции " бесконечность" со знаком, равным сумме по модулю два знаков операндов; [3] – " O" (переполнение) – возврат как результат операции " бесконечность" с учетом знака; [4] – " U" (антипереполнение) – возврат как результат операции денормализованного числа; [5] – " P" (потеря точности) – результат округляется без выдачи преры- вания и продолжаются вычисления. · Разряд [7] – " IE" – Маска флага запроса на прерывание - при наличии " 1" прерывание не будет передаваться в ALU МП (даже при возникновении индивидуального незамаскированного особого случая) и FPU обрабатывает все особые ситуации стандартными методами. · Разряды [9, 8] – " PC" – Управление точностью – устанавливает точность вычислений: - " PC" = 00 – 24 бита (для мантиссы) – формат КВ, - " PC" = 10 – 53 бита – формат ДВ, - " PC" = 11 – 64 бита – формат ВВ – по умолчанию. Первые два случая обеспечивают совместимость с языками программирования. В этих случаях результаты операций перед размещением в стековый регистр округляются до указанного размера. · Разряды [11, 10] – " T" – Управление округлением - устанавливает вариант округления результатов операций АСП: - 00 – к ближайшему (при равенстве – к четному), - 01 – вниз (к - ), - 10 – вверх (к + ), - 11 – отбрасывание (усечение) – используется в целочисленной арифметике. · Разряд [12] – " A" – Управление бесконечностью – устанавливает одну из двух моделей интерпретации бесконечности: - проективную, А=0 – " + " и " - " принимаются за " ", - аффинную, А=1 – знак бесконечности учитывается. Денормализованные числа возникают в результате вычислений c антипереполнением, т.е. порядок результата настолько мал, что не может быть представлен в требуемом формате. Например, если результат в формате КВ, а значение порядка равно -129, то происходит антипереполнение (наименьший представимый порядок в КВ равен -126). Незамаскированная реакция АСП на антипереполнение предполагает прекращение дальнейших вычислений и выдачу запроса на прерывание, если результат должен быть записан в память. Если приемником результата является регистр, то АСП прибавляет к порядку константу 2457610 (819210+1638410=213+214), записывает результат и выдает запрос на прерывание. Эта константа переводит значение порядка в представимый формат ВВ (наименьший представимый порядок в ВВ равен -1638310) и при дальнейшей обработке прерывания ее следует учесть. При замаскированном антипереполнении вычисления над денормализованными числами продолжаются. Денормализованный операнд преобразуется в эквивалентный ненормализованный вид (кроме случая, при котором в операции деления используется денормализованный делитель – в качестве результата выдается код неопределенности). Часто в процессе вычислений в итоге получается нормализованный и правильный результат. Ненормализованные числа образуются из денормализованных чисел и также возникают при антипереполнении. Ненормализованные числа существуют только в формате ВВ и всегда имеют первую цифру мантиссы, равную нулю. АСП оперирует с ненормализованными числами, как с нормализованными, т.к. значение 0 или 1 в старшем разряде мантиссы при выполнении многих операций не имеет значения. При дальнейших вычислениях результат может нормализоваться, например, при сложении с большим нормализованным числом. Нули образуются как результат выполнения многих операций. Например, при сложении (вычитании) двух равных чисел +Х и –Y знак нулевого результата зависит от режима округления – положительный при T=00, 10, 11, отрицательный при T=01. Минус ноль может быть получен также в результате деления двух чисел с разными знаками. Как следствие, операции пересылок, арифметические операции с нулевыми знаковыми операндами также могут формировать нулевые результаты с различными знаками. Псевдонуль как результат может быть получен в случае перемножения двух ненормализованных операндов, имеющих в сумме более чем 64 старших нулевых бита. Псевдонулевые операнды обрабатываются как обычные ненормализованные операнды, а в некоторых командах сравнения, округления и деления псевдонули дают те же результаты, что и обычные нули. Бесконечности могут использоваться в качестве обычных операндов, а результат операций зависит от формата их представления (проективная или аффинная). Например, в операциях сравнения со знаковой бесконечностью. Действия АСП над числами NAN приводят к установке флага I=1 и запросу на прерывание. Если этот особый случай замаскирован, то любая операция с NAN дает в качестве результата тот же код NAN. Если в операции оба операнда NAN, то в качестве результата выбирается код операнда, большего по абсолютному значению (т.е. NAN в качестве операнда, над которым могут быть выполнены операции, не используется). Исключение составляют трансцендентные команды, которые не анализируют операнды и, следовательно, операнд NAN дает неопределенный результат.
|