Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПиП МПС(Ассемблер Левицкий экт 4) / MProc / M3 / Программирование блока FPU в IA.doc
Скачиваний:
66
Добавлен:
16.04.2013
Размер:
249.86 Кб
Скачать

Административные команды

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

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

FINIT ; Начальный сброс сопроцессора

FLDCWслово с начальном состоянием регистра CW

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

FSTCW слово-приемник регистра управления

FLDCW слово-источник: регистра управления

FSTSW слово-приемник регистра состояния

FLDSW слово-источник регистра состояния

FSTENV блок-приемник состояния среды сопроцессора

FLDENV блок-источник состояния среди сопроцессора

FSAVE блок-приемник состояния среды и регистров сопроцессора

FRSTOR блок-источник состояния среди и регистров сопроцессора

FCLEX ; Сброс флагов особых случаев

Размер блоков сохранения должен обеспечить сохранение и последующее восстановление как всех программно доступных регистров сопроцессора, так и внутренних регистров сопроцессора, недоступных по другим командам:

  • регистр управления CW (смещение 0для 16- и 32-битовых режи­мов);

  • регистр состояния SW (смещение 2для 16- и4– для 32-битовых режимов);

  • слово тэгов, в котором каждая пара битов отображает текущее состояние физического регистра с плавающей точкой (смещение 4/8);

  • указатель команды IP(6/0Ch);

  • селектор CSи/или код операции (8/10h);

  • смещение операнда IP(0ah/14h);

  • селектор операнда (0Ch/18h).

Таким образом, для 16-битового режима полный размер области сохранения составляет 94 байта, а 32-битового - 108 байтов. Отметим, что пустые регистры в стеке сопроцессора могут возникать после выполнения команд декремента стека сопроцессора FDECSTPи освобождения регистровFFREE st[i].

Для составления связующих элементов программ и контроля за взаимодействием сопроцессора с центральным процессором целесообразно использовать элементарные команды математического сопроцессора, включенные в язык Ассемблера. Основу взаимодействия составляет использование центральным процессором и сопроцессором общей последовательности команд. В принципе для управления математическим сопроцессором и взаимодействия с центральным процессором используются команды центрального процессора ESCиWAIT. Единственная команда, подключающая сопроцессор к работе имеет мнемоникуESCпредставляется во внутримашинном двоичном формате:

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

смещение данных

1

1

0

1

1

ccc

mod

ccc

r/m

(d8/d16)

Структура кода FPU-инструкции

Здесь буквами ссс обозначены биты кода операции сопроцессора, mod модификация операндов,r/mрегистр или указатель типа операнда в памяти. В машинной форме после основной части команды с указателями модификаций адресов в памяти могут находиться двухбайтный адрес для прямой адресации, однобайтноеd8или двухбайтноеd16смещение. Регистровые команды сопроцессора имеют сокращенные форматы.

При получении команды ESCсопроцессор с помощью центрального процессора формирует необходимые адреса памяти и начинает выполнение своей операции, не препятствуя центральному процессору продолжать вычисления по своей программе. Если нам в дальнейшей работе требуются результаты сопроцессора, то для подтверждения завершения предыдущей операции следует воспользоваться командойWAIT, которая переводит центральный процессор в режим ожидания аппаратного сигнала завершения операции в сопроцессоре и задается в безоперандном формате. Почти для всех команд сопроцессора, записанных на Ассемблере в форме мнемоник начинающихся с буквыF, генерируется код, начинающийся с кода операцииWAIT. Исключение составляют команды, начинающиеся с буквFNи не проверяющие особых случаев в команде, например:

FINIT; Начальный сброс без контроля особых случаев

FHCLEX; Сброс флагов особых случаев без их контроля

FNSAVEблок-приемник состояния среды и регистров

сопроцессора

FNSTCWслово-приемник регистра управления

FNSTSWслово-приемник регистрасостояния