Сопроцессор имеет свои регистры, у основного процессора свой набор регистров

Сопроцессор имеет свои регистры, у основного процессора свой набор регистров, которые вы знаете, у сопроцессора их тоже 8. Они имеют свои аппаратные номера r0, r1 … r7. Но эти аппаратные номера не используются в командах, в командах используются логические номера, а логические номера отличаются от аппаратных. Все регистры сопроцессора организованы в виде стека, причем стек имеет кольцевую структуру. Логические регистры сопроцессора имеют номера st0, st1 .. st7. На вершину стека указывает специальное поле в регистре состояний сопроцессора. Помимо регистров для вычисления, сопроцессор имеет несколько служебных регистров, один из них – регистр состояний. К логическим регистрам стека можно обращаться по именам.

В начальном состоянии, когда сопроцессор инициализируется, поле top содержит все нули, то есть указывает на нулевой регистр. Как и в обычном стеке, вершина стека указывает на последний записанный регистр стека. После этого, если мы что-либо загрузим в стек сопроцессора, вершина стека переместится, вершиной стека уже будет регистр r7. Он будет иметь логический номер st0, а все остальные регистры, их логические номера, на единицу сдвинутся. При записи еще одного значения в стек, вершина еще переместится вверх, и станет на r6, и так далее по кругу (см. слайд). Регистр состояния сопроцессора отражает текущее состояние сопроцессора после выполнения очередной команды, это 16 битный регистр, часть его битов занимают флаги исключения. С помощью них мы видим, было ли какое исключение после выполнения последней команды. Например исключение типа неверная операция, исключение денормализация, исключение деления на ноль, исключение переполнения, антипереполнения, ошибка стека , например когда пытаемся прочитать из пустого стека или записать в полный стек, и существует флаг ошибок, которые устанавливается при возникновении любой из перечисленных выше исключений.

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

Ссылка на основную публикацию
Adblock detector