Какая информация содержится в регистре состояния fpu

Какая информация содержится в регистре состояния fpu thumbnail

Аннотация: Цель лекции: рассмотреть состав, назначение и особенности использования различных групп регистров, входящих в состав универсального микропроцессора. Состав, структура и назначение регистров микропроцессора являются важной чертой его архитектуры и во многом определяют его функциональные возможности. Поэтому изучение этого вопроса весьма важно для понимания дальнейшего материала.

Регистровая структура универсального
микропроцессора

В универсальном 32-разрядном микропроцессоре выделяют следующие группы регистров:

  • основные функциональные регистры;
  • регистры процессора с плавающей точкой;
  • системные регистры;
  • регистры отладки и тестирования.

Первые две группы регистров используются прикладными программами, последние две группы – системными программами, имеющими наивысший уровень привилегий.

Рассмотрим каждую из этих групп подробнее.

Основные функциональные регистры

В состав регистров этой группы входят:

  • регистры общего назначения;
  • регистр указателя команд;
  • регистр флагов;
  • сегментные регистры.

Состав и структура регистров общего назначения представлены на рис. 2.1.

Блок состоит из восьми 32-разрядных регистров. К каждому из них можно обращаться как к одному двойному слову (32 разряда).

Отметим, что понятие “слово” в данной архитектуре не идентично разрядности микропроцессора. Исторически сложилось так, что под словом понимается единица информации длиной 2 байта, или 16 двоичных разрядов. К младшим 16 разрядам регистров общего назначения можно обращаться так же, как и в 16-разрядном микропроцессоре (AX, BX…SP). Четыре 16-разрядных регистра AX, BX, CX, DX допускают обращение отдельно к своему старшему и младшему байту. Тем самым регистры позволяют на программном уровне работать либо с восемью 32-разрядными, либо с восемью 16-разрядными, либо с восемью 8-разрядными регистрами.

Регистры общего назначения

Рис.
2.1.
Регистры общего назначения

Все эти регистры используются для хранения промежуточных результатов вычислений и составных частей адреса при различных режимах адресации операндов, расположенных в памяти.

Кроме того, ряд регистров этого блока имеют свое, присущее только им назначение:

  • EAX/AX/AL – регистр-аккумулятор, используется для сокращения длины команды при работе с непосредственными операндами;
  • AX/AL – приемник (источник) данных в командах ввода (вывода) данных из (в) внешнего устройства;
  • DX – определяет адрес ВУ в командах ввода (вывода) данных;
  • ECX – используется в качестве счетчика циклов в командах циклов;
  • BP, SP – используются при работе со стеком;
  • ESI, EDI ( DI, SI ) – определяют положение строк в памяти в командах обработки строк.

Регистр указателя команд и регистр флагов имеют длину 32 разряда.

Младшее слово каждого из этих регистров (разряды 0-15) функционально соответствует аналогичным разрядам в 16-разрядном микропроцессоре (рис. 2.2).

Регистр указателя команд и регистр флагов

Рис.
2.2.
Регистр указателя команд и регистр флагов

Регистр указателя команд EIP хранит смещение адреса команд относительно начала сегмента кода (сегмента команд).

Регистр флагов EFLAGS содержит признаки результата выполненной команды, а также разряды, управляющие работой микропроцессора: обработкой маскированных прерываний, последовательностью вызываемых задач, вводом-выводом и рядом других действий. Из этих флагов рассмотрим только наиболее значимые и интересные с точки зрения дальнейшего изучения работы микропроцессора.

К битам состояния регистра флагов относятся:

  • ZF – признак нуля результата ( ZF = 1, если все разряды результата равны 0);
  • SF – знак результата ( SF = 1, если старший разряд результата равен 1, то есть если результат отрицательный);
  • OF – признак переполнения ( OF = 1, если при выполнении арифметических операций над числами со знаком происходит переполнение разрядной сетки);
  • CF – флаг переноса ( CF = 1, если выполнение операции сложения приводит к переносу за пределы разрядной сетки), устанавливается также в некоторых других операциях;
  • PF – признак четности (дополняет до нечетного числа единиц младший байт результата);
  • AF – флаг полупереноса (используется при операциях над двоичнодесятичными числами);
  • DF – устанавливается пользователем и определяет порядок обработки строк символов в соответствующих командах: декремент (при DF = 1 ) или инкремент (при DF = 0 ) содержимого индексных регистров ESI, EDI ( SI, DI ) после обработки одного символа.

В состав флагов управления входят:

  • IF – флаг прерываний (при IF = 1 разрешается обработка маскированных аппаратных прерываний);
  • TF – флаг ловушки, или трассировки (при ТF = 1 после выполнения каждой команды возникает прерывание, используемое отладчиками;);
  • NТ – бит вложенной задачи (показывает, что данная задача была вызвана из другой программы, аналогично подпрограмме, и возврат из этой задачи должен проводиться по механизму переключения задач);
  • IOPL – 2-разрядное поле уровня привилегий ввода/вывода (определяет уровень привилегий программ, которым разрешено выполнение операции ввода-вывода);
  • VM – режим виртуального микропроцессора i8086 (при работе микропроцессора в защищенном режиме установка VM = 1 вызывает переключение в режим виртуального микропроцессора i8086; в этом случае микропроцессор функционирует как быстрый МП i8086, но реализует механизмы защиты памяти, страничной адресации и ряд других дополнительных возможностей; бит VM может быть установлен только в защищенном режиме).
Читайте также:  Какие микроэлементы содержатся в кукурузе

Блок сегментных регистров состоит из шести 16-разрядных регистров, которые указывают на различные сегменты, расположенные в памяти компьютера:

  • CS ( Code Segment ) – сегмент кода программы;
  • DS ( Data Segment ) – сегмент данных;
  • SS ( Stack Segment ) – сегмент стека;
  • ES, FS, GS – дополнительные сегменты данных.

При работе микропроцессора в реальном режиме в сегментном регистре содержатся старшие 16 разрядов 20-разрядного базового адреса сегмента. Физический адрес начала сегмента получается умножением этой величины на 16:

A_{mbox{баз  сегм}}=mbox{(сегментный регистр)}*16

Получающийся 20-разрядный адрес позволяет адресовать память емкостью 220байт = 1 Мбайт. При этом сегменты имеют постоянную длину 216байт. Разработчики первых персональных компьютеров полагали, что оперативная память, большая чем 1 Мбайт, никогда не потребуется пользователю, поэтому вся архитектура строилась исходя именно из этого положения.

При переходе к 32-разрядной архитектуре стало необходимым обеспечить возможность адресации памяти емкостью до 232байт. Кроме того, введение защищенного режима работы микропроцессора потребовало хранения большого количества дополнительной информации о сегменте: его длине, которая стала переменной, уровне привилегий, его типе и т. д. Простое увеличение разрядности сегментных регистров до 32 бит не обеспечило бы возможности хранения всей этой информации. Поэтому все данные о сегменте стали размещаться в специальных структурах – дескрипторах (описателях) сегментов, которые хранятся в таблицах дескрипторов, расположенных в памяти, а сегментные регистры, сохранив свою первоначальную длину в 16 разрядов, содержат так называемый селектор (указатель), который используется для того, чтобы найти нужный дескриптор в этих таблицах.

Регистры процессора с плавающей точкой

К этой группе регистров относятся (рис. 2.3):

  • регистры данных;
  • регистры тегов;
  • регистр состояния;
  • указатели команд и данных FPU;
  • регистр управления FPU.

Источник

Регистр состояния FPU (рис. 1.13.) выполняет функции в чем-то аналогичные функциям регистра флагов (E)FLAGS, но только для операций с плавающей точкой. За исключением одного бита (SF), его формат и функции совершенно идентичны для всех сопроцессоров архитектуры x87 (начиная с 8087).

Рис. 1.13. Формат регистра состояния SW (регистра флагов FPU)

B (Бит занятости, бит 15)

Бит занятости сохранен для совместимости с 8087 и Intel287, где он устанавливается в 1, когда сопроцессор выполняет команду, или происходит прерывание в сопроцессоре в результате исключительной ситуации. Если сопроцессор свободен, бит занятости установлен в 0. В современных процессорах (Intel387, Intel486, …) этот бит дублирует состояние бита ES.

TOP (Указатель вершины стека FPU, биты 13, 12, 11)

Содержит номер 80-битного регистра общего назначения, являющегося вершиной стека.

  • 000 – R0;
  • 001 – R1;
  • 111 – R7.

C0, C1, C2, C3 (Коды условий, биты 8, 9, 10, 14)

Коды условий FPU аналогичны флагам CPU из регистра флагов (E)FLAGS. FPU устанавливает значения этих битов по результатам арифметических операций.

Таблица 1.1. Интерпретация кодов условий

Команда

C0

C3

C2

C1

FCOM, FCOMP, FCOMPP, FTST, FUCOM, FUCOMP, FUCOMPP, FICOM, FICOMP

по результатам сравнения

операнды не сравнимы

0 или #IS1

FCOMI, FCOMIP, FUCOMI, FUCOMIP

неопределено
(эти команды влияют на флаги в регистре EFLAGS)

#IS1

FXAM

класс операнда

знак

FPREM, FPREM1

Q2

Q1

0 – преобра-зование завершено2

1 – преобра-зование не завершено

Q0 или #IS1

FIST, FISTP, FBSTP, FRNDINT, FST, FSTP, FADD, FADDP, FCMOVcc, FIADD, FMUL, FMULP, FIMUL, FDIV, FDIVP, FDIVR, FDIVRP, FIDIV, FIDIVR, FSUB, FSUBP, FISUB, FSUBR, FSUBRP, FISUBR, FSCALE, FSQRT, FPATAN, F2XM1, FYL2X, FYL2XP1

неопределено

округление4 или #IS1

FPTAN, FSIN, FCOS, FSINCOS

неопределено

1 – недо-пустимое значение операнда-источника3

округление4 или #IS1
(неопреде-лено, если C2=1)

FCHS, FABS, FXCH, FINCSTP, FDECSTP, FLDconst (FLD1, FLDL2E, FLDL2T, FLDLG2, FLDLN2, FLDPI, FLDZ), FXTRACT, FLD, FILD, FBLD, FSTP (extended-real)

неопределено

0 или #IS1

FLDENV, FRSTOR

биты загружаются из памяти

FFREE, FLDCW, FSTENV/FNSTENV, FNOP, FSTCW/FNSTCW, FSTSW/FNSTSW, FCLEX/FNCLEX

неопределено

FINIT/FNINIT, FSAVE/FNSAVE

Примечания:

  1. В случае возникновения стековой ошибки (#IS), когда устанавливаются биты IE и SF слова состояния SW, бит C1 определяет тип ошибки: переполнение (C1 = 0) или антипереполнение (C1 = 1).
  2. Если в процессе выполнения FPREM или FPREM1 получается остаток меньший чем модуль, то функция считается выполненной и флаг C2 очищается. В противном случае, флаг C2 устанавливается, а результат в ST называется неполным остатком. Программа может перезапускать команду (используя неполный остаток в ST как делимое), пока флаг C2 не будет очищен.
  3. Для команд FPTAN, FSIN, FCOS и FSINCOS флаг C2 устанавливается, если значение операнда находится вне приемлемого диапазона.
  4. В случае возникновения исключения неточный результат (#P), когда устанавливается бит PE слова состояния SW, бит C1 показывает, в какую сторону произведено округление: вверх (C1 = 1) или вниз (C1 = 0).

Команда FSTSW копирует значение слова состояния сопроцессора в регистр AX процессора. Далее командой SAHF можно скопировать флаги C3..C0 в регистр флагов FLAGS.

Читайте также:  Какие витамины содержаться в свежей капусте

Таблица 1.2. Соответствие между битами C3..C0 и битами регистра флагов CPU

Флаги FPU

Флаги EFLAGS

C0

CF

C1

Нет

C2

PF

C3

ZF

ES (Бит суммарной ошибки, бит 7: Intel287 …),
IR (Флаг запроса прерывания, бит 7: только для 8087)

В сопроцессорах 8087 этот бит содержит флаг запроса прерывания (IR), который устанавливается в единицу при возникновении какой-либо незамаскированной исключительной ситуации. Значение флага IR повторяется на выводе INT# сопроцессора. Флаг IR может быть замаскирован программно установкой бита IEM регистра управления FPU.

Во всех последующих моделях FPU (Intel287 …) этот бит называется битом суммарной ошибки (ES) и устанавливается в 1 при возникновении какой-либо незамаскированной исключительной ситуации, иначе — очищается. При установленном бите ES, активизируется сигнал на выводе ERROR# (Intel287, Intel387) или FERR# (Intel486 …).

SF (Стековая ошибка, бит 6: Intel387 …)

Eсли исключение недействительная операция (#I) возникает в результате выхода за верхнюю или нижнюю границы регистрового стека (#IS), то устанавливается не только бит 0 (IE) слова состояния, но и бит 6 (SF), при этом бит 9 (C1) указывает на выход за верхнюю границу (переполнение) стека (C1 = 1) или на выход за нижнюю границу (C1 = 0).

В сопроцессорах Intel287 и 8087 этот бит не используется и является зарезервированным.

PE, UE, OE, ZE, DE, IE (Флаги исключительных ситуаций, биты 5, 4, 3, 2, 1, 0)

Устанавливаются в случае возникновения одной из шести особых ситуаций сопроцессора (исключений FPU). Каждому исключению соответствует свой флаг:

  • PE – неточный результат (#P);
  • UE – антипереполнение (#U);
  • OE – переполнение (#O);
  • ZE – деление на нуль (#Z);
  • DE – денормализованный операнд (#D);
  • IE – недействительная операция (#I).

Помимо установки соответствующего флага исключительной ситуации, сопроцессор при возникновении исключения может выдавать или не выдавать сигнал прерывания. Это зависит от состояния соответствующих битов маски исключений регистра управления FPU. В случае, когда бит маски исключения установлен, внешний сигнал не выдается, но флаг исключения все равно устанавливается. Таким образом, используя эффект накопления ошибок, программное обеспечение может замаскировать все исключения до выполнения групповых вычислений, затем произвести вычисления и проверить содержимое всех флагов для выяснения того, какие исключения имели место.

Источник

Студопедия

КАТЕГОРИИ:

Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

FPU предоставляет восемь регистров для хранения данных и пять вспомогательных регистров.

Регистры данных (R0 – R7) не адресуются по именам, как регистры основного процессора. Вместо этого эти восемь регистров рассматриваются как стек, вершина которого называется ST, а более глубокие элементы — ST(1), ST(2) и так далее до ST(7). Если, например, в какой-то момент времени регистр R5 называется ST (рис. 13), то после записи в этот стек числа оно будет записано в регистр R4, который станет называться ST, R5 станет называться ST(1) и т.д.

Рис. 13. Регистры FPU

К регистрам R0 – R7 нельзя обращаться напрямую, по именам, но если процессор поддерживает расширение ММХ, то мантиссы, находящиеся в этих регистрах, становятся доступны, как ММ0 – ММ7.

Регистр состояний SR содержит слово состояния FPU:

Бит 15: В — занятость FPU — этот флаг существует для совместимости с 8087, и его значение всегда совпадает с ES.

Бит 14: С3 — условный флаг 3.

Биты 13 – 11: ТОР — число от 0 до 7, показывающее, какой из регистров данных R0 – R7 в настоящий момент является вершиной стека.

Бит 10: С2 — условный флаг 2.

Бит 9: С1 — условный флаг 1.

Бит 8: С0 — условный флаг 0.

Бит 7: ES — общий флаг ошибки — равен 1, если произошло хотя бы одно немаскированное исключение.

Бит 6: SF — ошибка стека. Если С1 = 1, произошло переполнение (команда пыталась писать в непустую позицию в стеке), если С1 = 0, произошло антипереполнение (команда пыталась считать число из пустой позиции в стеке).

Бит 5: РЕ — флаг неточного результата — результат не может быть представлен точно.

Бит 4: UE — флаг антипереполнения — результат слишком маленький.

Бит 3: ОЕ — флаг переполнения — результат слишком большой.

Бит 2: ZE — флаг деления на ноль — выполнено деление на ноль.

Бит 1: DE — флаг денормализованного операнда — выполнена операция над денормализованным числом.

Бит 0: IE — флаг недопустимой операции — произошла ошибка стека (SF = 1) или выполнена недопустимая операция.

Читайте также:  Какие элементы содержатся в соли

Биты С0 – С3 употребляются так же, как и биты, состояния в основном процессоре, — их значения отражают результат выполнения предыдущей команды и используются для условных переходов; команды

fstsw ax

sahf

копируют их значения в регистр FLAGS так, что флаг С0 переходит в CF, С2 — в PF, а С3 — в ZF (флаг С2 теряется).

Биты 0 – 5 отражают различные ошибочные ситуации, которые могут возникать при выполнении команд FPU. Они рассмотрены в описании управляющих регистров.

Регистр управления CR:

Биты 15 – 13 — зарезервированы.

Бит 12 «IC» — управление бесконечностью

Биты 11 – 10 «RC» — управление округлением.

Биты 9 – 8 «PC» — управление точностью.

Биты 7 – 6 — зарезервированы.

Бит 5 «РМ» — маска неточного результата.

Бит 4 «UM» — маска антипереполнения.

Бит 3 «ОМ» — маска переполнения.

Бит 2 «ZM» — маска деления на ноль.

Бит 1 «DM» — маска денормализованного операнда.

Бит 0 «IM» — маска недействительной операции.

Биты RC определяют способ округления результатов команд FPU до заданной точности (табл. 10).

Таблица 10. Способы округления

Значение RC Способ округления
к ближайшему числу
к отрицательной бесконечности
к положительной бесконечности
к нулю

Биты PC определяют точность результатов команд FADD, FSUB, FSUBR, FMUL, FDIV, FDIVR и FSQRT (табл. 11).

Таблица 11. Точность результатов

Значение PC Точность результатов
одинарная точность (32-битные числа)
зарезервировано
двойная точность (64-битные числа)
расширенная точность (80-битные числа)

Биты 0 – 5 регистра CR маскируют соответствующие исключения — если маскирующий бит установлен, исключения не происходит, а результат вызвавшей его команды определяется правилами для каждого исключения специально.

Регистр тегов TW содержит восемь пар бит, описывающих содержание каждого регистра данных, — биты 15 – 14 описывают регистр R7, 13 – 12 — R6 и т.д. Если пара бит (тег) равна 11, соответствующий регистр пуст. 00 означает, что регистр содержит число, 01 — ноль, 10 — нечисло, бесконечность, денормализованное число, неподдерживаемое число.

Регистры FIP и FDP содержат адрес последней выполненной команды (кроме FINIT, FCLEX, FLDCW, FSTCW, FSTSW, FSTSWAX, FSTENV, FLDENV, FSAVE, FRSTOR и FWAIT) и адрес ее операнда соответственно и используются в обработчиках исключений для анализа вызвавшей его команды.

Набор команд для работы с плавающей запятой в процессорах Intel достаточно разнообразен, чтобы реализовывать весьма сложные алгоритмы, и прост в использовании. Единственное, что может представлять определенную сложность, — почти все команды FPU по умолчанию работают с его регистрами данных как со стеком, выполняя операцию над числами в ST(0) и ST(1) и помещая результат в ST(0), так что естественной формой записи математических выражений для FPU оказывается обратная польская нотация (RPN). Эта форма записи встречается в программируемых калькуляторах, языке Форт и почти всегда неявно присутствует во всех алгоритмах анализа математических выражений: они сначала преобразовывают обычные выражения в обратные и только потом начинают их анализ. В обратной польской нотации все операторы указываются после своих аргументов, так что sin(x) превращается в х sin, a а+b превращается в a b +. При этом полностью пропадает необходимость использовать скобки, например: выражение (a+b)*7-d записывается как а b + 7 * d -.

Посмотрим, как выражение, записанное в RPN, легко воплощается при помощи команд FPU на примере процедуры вычисления арксинуса.

; asin

; вычисляет арксинус числа, находящегося в st(0) (-1 <= х <= +1)

; по формуле asin(x) = atan(sqrt(x2/(1-x2)))

; (в RPN: x x * x x * 1 – / sqrt atan)

; результат возвращается в st(0), в стеке FPU должно быть

; два свободных регистра

asin proc near ; комментарий показывает содержимое стека FPU:

; первое выражение – ST(0), второе – ST(1) и т.д.

; х (начальное состояние стека)

fld st(0) ; х, х

fmul ; x2

fld st(0) ; х2, х2

fld1 ; 1, x2, x2

fsubr ; 1-х2, x2

fdiv ; x2/(1-x2)

fsqrt ; sqrt(x2/(1-x2))

fld1 ; 1, sqrt(x2/(1-x2))

fpatan ; atan(sqrt(x2/(1-x2)))

ret

asin endp

Вычисление корней квадратного уравнения

roots proc near

fild 4 ; 4

fld a ; a, 4

fld c ; c, a, 4

fmul ; c*a, 4

fmul ; c*a*4

fld b ; b, c*a*4

fld b ; b, b, c*a*4

fmul ; b*b, c*a*4

fsubr ; b*b-c*a*4

fsqrt ; sqrt(b*b-c*a*4)

fstp d ; –

fld b ; b

fild 0 ; 0, b

fsubr ; -b

fld d ; d, -b

fadd ; -b+d

fild 2 ; 2, -b+d

fld a ; a, 2, -b+d

fmul ; 2*a, -b+d

fdivr ; (-b+d)/2*a

fstp x1 ; –

fld d ; d

fld b ; b, d

fild 0 ; 0, b, d

fsubr ; -b, d

fsubr ; -b-d

fild 2 ; 2, -b-d

fld a ; a, 2, -b-d

fmul ; 2*a, -b-d

fdivr ; (-b-d)/2*a

fstp x2 ; –

roots endp

Дата добавления: 2014-01-05; Просмотров: 895; Нарушение авторских прав?

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Рекомендуемые страницы:

Читайте также:

Источник