assembler. Учебник для вузов_Юров В.И_2003 -637с (862834), страница 104
Текст из файла (страница 104)
17.4. Формат регистра управления сопроцессором CWRiАрхитектура сопроцессора455Шесть масок предназначены для маскирования исключительных ситуаций,возникновение которых фиксируется с помощью шести битов регистра SWR. Есликакие-то биты исключений в регистре CWR установлены в единицу, это означает,что соответствующие исключения будут обрабатываться самим сопроцессором.Если для какого-либо исключения в соответствующем бите масок исключенийрегистра CWR содержится нулевое значение, то при возникновении исключенияэтого типа будет возбуждено прерывание 16 (10h).
Операционная система должнасодержать (или программист должен написать) обработчик этого прерывания. Ондолжен выяснить причину прерывания, после чего, если это необходимо, устранить ее, а также выполнить другие действия. Более подробно этот вопрос обсуждается в разделе «Исключения сопроцессора и их обработка».Поле управления точностью PC предназначено для выбора длины мантиссы.Возможные значения в этом поле означают:ш PC = 00 — длина мантиссы 24 бита;ж PC = 10 — длина мантиссы 53 бита;« PC = 11 — длина мантиссы 64 бита.По умолчанию устанавливается значение поля PC - 11.Поле RC позволяет управлять процессом округления чисел в ходе работы сопроцессора. Необходимость округления может возникнуть в ситуации, когда после выполнения очередной команды сопроцессора получается непредставимый результат, например периодическая дробь 3,333...
Установив одно из значений в полеRC, можно выполнить округление в необходимую сторону. Для того чтобы выяснить характер округления, введем обозначения:* т — значение в ST(0) или результат работы некоторой команды, который неможет быть точно представлен и поэтому должен быть округлен;и а и b — наиболее близкие значения к значению т, которые могут быть представлены в регистре ST(0) сопроцессора, причем выполняется условие а < т < Ь.Далее приведены значения поля RC и описан соответствующий им характерокругления:* 00 — значение т округляется к ближайшему числу а или Ь;* 01 — значение т округляется в меньшую сторону, то есть т = а;ж 10 — значение т округляется в большую сторону, то есть т = Ь;ш 11 — производится отбрасывание дробной части т (может использоватьсяв операциях целочисленной арифметики).Регистр тегов TWRРегистр тегов TWR представляет собой совокупность двухразрядных полей.
Каждое двухразрядное поле соответствует определенному физическому регистру стека (см. рис. 17.1) и характеризует его текущее состояние. Изменение состояниялюбого регистра стека отражается на содержимом соответствующего этому регистру поля регистра тега. Возможны следующие значения в полях регистра тега:Ш 00 — регистр стека сопроцессора занят допустимым ненулевым значением;it 01 — регистр стека сопроцессора содержит нулевое значение;456Глава 17. Архитектура и программирование сопроцессора^ 10 — регистр стека сопроцессора содержит одно из специальных численныхзначений (см.
ниже), за исключением нуля;в 11 — регистр пуст, и в него можно производить запись (нужно отметить, что этозначение в одном из двухразрядных полей регистра тегов не означает, что всебиты соответствующего регистра стека обязательно нулевые).Мы не раз уже отмечали, что при написании программы разработчик манипулирует не абсолютными, а относительными номерами регистров стека. По этойпричине у него могут возникнуть трудности при попытке интерпретации содержимого регистра тегов TWR с соответствующими физическими регистрами стека.В качестве связующего звена необходимо привлекать информацию из поля ТОРрегистра SWR.Форматы данныхСопроцессор расширяет номенклатуру форматов данных, с которыми работаетосновной процессор.
В этом нет ничего удивительного, так как формат данныхлюбого устройства в существенной мере отражает специфику его работы. Сопроцессор специально разрабатывался для вычислений с плавающей точкой. Но сопроцессор может работать и с целыми числами, хотя и менее эффективно. Перечислим форматы данных, с которыми работает сопроцессор:* двоичные целые числа в трех форматах — 16, 32 и 64 бита;II упакованные целые десятичные (BCD) числа — длина максимального числасоставляет 18 упакованных десятичных цифр (9 байтов);к вещественные числа в трех форматах — коротком (32 бита), длинном (64 бита),расширенном (80 битов).Кроме этих основных форматов, сопроцессор поддерживает специальные численные значения, к которым относятся:я денормализованные вещественные числа — это числа, меньшие минимальногонормализованного числа (см.
ниже) для каждого вещественного формата, поддерживаемого сопроцессором;я нуль;is положительные и отрицательные значения бесконечности;i* нечисла;ii неопределенности и неподдерживаемые форматы.Рассмотрим более подробно основные форматы данных, поддерживаемые сопроцессором. Важно отметить, что в самом сопроцессоре числа в этих форматахимеют одинаковое внутреннее представление — расширенный формат вещественного числа.
Это один из форматов представления вещественных чисел, которыйточно соответствует формату регистров RO... R7 стека сопроцессора (см. рис. 17.1).Таким образом, даже если вы используете команды сопроцессора с целочисленными операндами, то после загрузки в сопроцессор операндов целого типа они автоматически преобразуются в формат расширенного вещественного числа.Форматы данных457Двоичные целые числаСопроцессор работает с тремя типами целых чисел (рис. 17.5).ЗнакI | Целое слово |15ОКороткое целое31ОДлинное целоеО63Рис. 17.5. Форматы целых чисел сопроцессораВ табл.
17.1 представлены формат целых чисел, их размерность и диапазон значений.Таблица 17.1. Форматы целых чисел сопроцессораФорматРазмер, битовДиапазон значенийЦелое слово16-32 768...+32 767Короткое целое32-2 • 109...+2 • 109Длинное целое64-9-10 18 ...+9-10 шВыбирая формат данных, с которыми будет работать ваша программа, помните, что сопроцессор поддерживает операции с целыми числами, но работа с нимиосуществляется неэффективно. Причина в том, что обработка сопроцессором целочисленных данных будет замедлена из-за дополнительного преобразования целых чисел в их внутреннее представление в виде эквивалентного вещественногочисла расширенного формата.В программе целые двоичные числа описываются обычным способом — с использованием директив DW, DD и DQ.
Например, целое число 5 может быть описаноследующим образом:ch_dwch_ddch_dq555представление в памяти: ch_dw=05 00представление в памяти: ch_dw=05 00 00 00представление в памяти: ch_dw=05 00 00 00 00 00 00 00Работать с целыми числами может далеко не всякая команда сопроцессора.Подробную информацию о командах сопроцессора можно найти в приложении.Упакованные целые десятичные числаСопроцессор поддерживает один формат упакованных целых десятичных чисел,или BCD-чисел (рис. 17.6).
Как вы помните, для описания упакованного десятичного числа используется директива DT (см. главу 8). Данная директива позволяетописать 20 цифр в упакованном десятичном числе (по две в каждом байте). Из-затого что максимальная длина упакованного десятичного числа в сопроцессоре составляет только 9 байт, в регистры RO...R7 можно поместить только 18 упакованных десятичных цифр. Старший десятый байт игнорируется.
Самый старший битэтого байта используется для хранения знака числа.458Глава 17. Архитектура и программирование сопроцессораЗнакd9d8 | d7d6 | d5d4 |О79Рис. 17.6. Формат десятичного числа сопроцессораУпакованные десятичные числа также представляются в стеке сопроцессорав расширенном формате. Упакованные десятичные числа в программе описываются директивой DT.
Например, целое число 5 365 904 в формате упакованногодесятичного числа может быть описано следующим образом:ch_dtdt 5365904представление в памяти: ch_dt=04 59 36 05 00 00 00 00 00 00Нужно отметить, что в сопроцессоре имеются всего две команды для работыс упакованными десятичными числами — это команды сохранения и загрузки.Вещественные числаОсновной тип данных, с которыми работает сопроцессор, — вещественный.
Данные этого типа описываются тремя форматами: коротким, длинным и расширенным (рис. 17.7).Знакs| Характеристика q |Мантисса (М)3124 23s Характеристика qМантисса (М)|...|635352| Мантисса (М)| ... |sХарактеристика q7964630С0КороткийформатДлинныйформатРасширенныйформатРис. 17.7. Форматы вещественных чисел сопроцессораДля представления вещественного числа используется следующая формула:wА - (±М) • If(17.1)Здесь:• М — мантисса числа А (мантисса должна удовлетворять условию | М \ < 1);Ш N— основание системы счисления, представленное целым положительнымчислом;II р — порядок числа, показывающий истинное положение точки в разрядах мантиссы (по этой причине вещественные числа имеют еще название чисел с плавающей точкой, так как ее положение в разрядах мантиссы зависит от значенияпорядка).Для удобства обработки в процессоре чисел с плавающей точкой его архитектурой накладываются некоторые ограничения на компоненты формулы (17.1).Далее перечислены эти условия и ограничения для сопроцессоров, применяющихсяв архитектуреIA-32.Форматы данных1459Основание системы счисления N=2.Мантисса М должна быть представлена в нормализованном виде.
Нормализация может отличаться для разных типов процессоров. Для ЕС ЭВМ, например, мантисса нормализованного числа должна удовлетворять условию1/N< \М\ < 1. Это означает, что старший бит представления должен быть единичным. Для случая, когда N= 2, это соответствует отношению 1/2 < |М| < 1или в двоичном виде ОДО...ОО < |М| < 0,11...11, то есть первая цифра после запятой должна быть значащей (единицей), а порядок;?, соответственно, таким, чтобы это условие выполнялось. Для архитектуры сопроцессора IA-32 нормализованным является число несколько иного вида:Л = (-!)*. J V ' - M(17.2)Здесь:П s — значение знакового разряда (0 — число больше нуля, 1 — число меньшенуля);Q q — порядок числа, его назначение аналогично назначению порядкар в формуле (17.1), но как поясняется далее, р и q — не одно и тоже.В этой формуле знак имеют и порядок вещественного числа, и его мантисса.На рис.