Skip to content

25. Математический сопроцессор. Регистры.

Natasha Gurova edited this page Jun 24, 2022 · 2 revisions

Отдельное опциональное устройство на материнской плате для расширения командного множества центрального процессора и обеспечивающий его функциональностью модуля операций с плавающей запятой, для процессоров, не имеющих интегрированного модуля.

История

Математический сопроцессор изначально шел в качестве отдельной микросхемы. Позже, в конце 80-ых и начале 90-ых, с 80496DX его интегрировали на одну плату с основным процессором.

Дальше стали появляться дополнительные расширения процессоров (которые могут в процессоре либо быть, либо не быть). В разных процессорах расширения могут быть реализованы по-разному.

Регистры

В сопроцессоре предусмотрено восемь 80-разрядных регистров R0..R7.

  • по отдельности к ним доступа нет
  • адресация при выполнении операций происходит в виде стека ST, который реализован внутри сопроцессора
  • ST соответствует регистру - текущей вершине стека
  • ST(1)..ST(7) - прочие регистры, которые находятся ниже вершины.

Для выполнения операций в качестве одного из операндов берется регистр, на который указывает вершина стека. Вершина стека автоматически каждый раз увеличивается. Когда указатель вершины доходит до восьмого регистра - самого высокого регистра, автоматически происходит сброс в ноль (стек как бы закольцован). После 8 регистра снова вершиной становится первый регистр, и так далее.

Так же в FPU имеются следующие регистры:

  • SR - регистр состояний. Отдельные биты описывают по отдельности состояния регистров, и в целом сигнализируют о различных ошибках, переполнениях и так далее.
  • CR - регистр управления. Через него можно настраивать правила округления чисел и контроль точности. Можно с помощью специальных битов указывать, как будет производиться округление - в большую сторону, в меньшую сторону, по математическим правилам или нет. Настройки для округления чисел с плавающей запятой достаточно гибкие.
  • TW - 8 пар битов, описывающих состояния восьми регистров в стеке: число, ноль, не-число, пусто. изначально все регистры пустые, инициализированные 1
  • FIP, FDP - адрес последней выполненной команды и её операнда, во время работы которых произошло исключение. SR, CR и TW содержат в себе 16 разрядов (слово). Разрядность регистров FIP и FDP зависит от разрядности машины, так как адреса могут иметь разную длину.
Clone this wiki locally