35. Регистры и стек сопроцессора.
В целом базовая программная модель всех перечисленных сопроцессоров и блока FPU у IA-32 сходная : регистровый стек (восемь 80-битных регистров R0-R7), слово тегов, регистр управления, регистр состояния, указатель команды и указатель данных.
Для хранения данных в сопроцессоре предназначены регистры R0-R7. Эти регистры организованы в стек, и доступ к ним производится относительно вершины стека - ST. Номер регистра, соответствующего вершине стека, хранится в регистре состояния (поле TOS). Как и у ЦП, стек сопроцессора растет к регистрам с меньшими адресами. Команды, которые производят запоминание и извлечение из стека, передают данные из текущего регистра ST, а затем производят инкремент поля TOS в регистре состояния. Многие команды сопроцессора допускают неявное обращение к вершине стека, обозначаемой ST или ST(0). Для указания i-го регистра относительно вершины используется обозначение ST(i), где I = 0,:,7. Например, если поле TOS регистра состояния содержит значение 0112 (вершиной стека является регистр R3), то команда FADD ST,ST(2) суммирует содержимое регистров R3 и R5. Стековая организация упрощает программирование подпрограмм, допуская передачу параметров в регистровом стеке сопроцессора.
Регистры
В FPU можно выделить три группы регистров:
- Стек процессора: регистры R0..R7. Размерность каждого регистра: 80 бит.
- Служебные регистры
- Регистр состояния процессора SWR (Status Word Register) — информация о текущем состоянии сопроцессора. Размерность: 16 бит.
- Управляющий регистр сопроцессора CWR (Control Word Register) — управление режимами работы сопроцессора. Размерность: 16 бит.
- Регистр слова тегов TWR (Tags Word Register) — контроль за регистрами R0..R7 (например, для определение возможности записи) Размерность: 16 бит.
- Регистры указателей
- Указатель данных DPR (Data Point Register). Размерность: 48 бит.
- Указатель команд IPR (Instruction Point Register). Размерность: 48 бит.