Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

FSTCW CrtlReg ; чтение управляющего регистра




FSTCW CrtlReg       ; чтение управляющего регистра

AND CrtlReg, 0F3FH; наложение маски

CMP CtrlReg, 033FH; сравнение значений

JNZ None

. . .                               ; сопроцессор присутствует

None:

. . .                               ; сопроцессор отсутствует

 

Все команды сопроцессора имеют мнемонические обозначения, начинающиеся с буквы ‘F’. Коды этих команд состоят из специального префикса и непосредственно самого кода команды. При выполнении программы центральный процессор, встретив префикс команды сопроцессора, передает саму команду на выполнение сопроцессору. Перед выполнением очередной команды сопроцессора необходимо выполнить команду центрального процессора WAIT, которая синхронизирует работу центрального процессора и сопроцессора. Команда WAIT не имеет операндов. Для процессоров, которые уже содержат сопроцессор, команду WAIT можно не использовать. При написании программы команду WAIT можно не ставить, так как транслятор Turbo Assembler автоматически вставляет ее после каждой команды сопроцессора.

Операнды команд сопроцессора могут быть ячейками памяти или внутренними регистрами сопроцессора.

 

10. 2 Архитектура сопроцессора с точки зрения программиста

Программисту доступны восемь регистров общего назначения сопроцессора, имеющих мнемонические обозначения ST(0) – ST(7), и пять нечисловых регистров, которые будут рассмотрены позже. Десятибайтовые регистры ST(0) – ST(7) используются как стек, они предназначены для хранения операндов и результатов арифметических операций. Первый из этих регистров ST(0) можно обозначать в командах просто как ST.

Структура стека сопроцессора представлена на рис. 4.

 

Направление роста стека

¯

     
     
 

ST(2)

 

ST(1)

 

ST(0)Вершина

     
     
     

 

Рис. 4. Структура стека сопроцессора

 

Из рисунка видно, что регистр ST(0) соответствует тому физическому регистру сопроцессора, который является вершиной стека, регистр ST(1) – следующему после вершины регистру и т. д. Таким образом, при обращении к регистру ST(0) происходит обращение к вершине стека сопроцессора. Направление роста стека определяет, что при записи в стек очередного значения, указатель стека уменьшается, а при выталкивании из стека очередного значения – увеличивается. При этом если указатель стека доходит до 0, то при его уменьшении в нем устанавливается значение 7. Если же указатель стека доходит до 7, то при его увеличении в нем устанавливается значение 0. Таким образом, стек сопроцессора представляет собой кольцевой буфер.

При выполнении команд сопроцессора в стек (регистры ST(0) – ST(7)) заносятся операнды. После выполнения команды эти операнды могут выталкиваться из стека, а в стек заносится результат выполнения арифметической операции. Арифметические операции берут свои операнды с вершины стека и помещают результат в вершину стека. Рассмотрим, например, действие команды сложения вещественных чисел FADD. Эта команда имеет два операнда, которые берутся из вершины стека – из регистров ST(0) и ST(1). Результат выполнения команды FADD записывается в вершину стека в регистр ST(0). На рис. 5 показано содержимое стека до выполнения команды FADD, после занесения операндов в стек и после занесения в стек результата выполнения команды.

 

ST(0) не определено Y X + Y
ST(1) не определено X не определено
ST(2) не определено не определено не определено
ST(3) не определено не определено не определено
ST(4) не определено не определено не определено
ST(5) не определено не определено не определено
ST(6) не определено не определено не определено
ST(7) не определено не определено не определено
  Состояние стека до выполнения команды FADD Состояние стека после занесения операндов Состояние стека после выполнения команды FADD

 

Рис. 5. Состояние стека в процессе выполнения команды FADD

 

Существуют специальные команды сопроцессора, которые загружают регистры ST(0) – ST(7) значениями, взятыми из ячеек памяти. Другие команды наоборот извлекают из регистров ST(0) – ST(7) значения и записывают их в ячейки памяти. При выполнении этих команд автоматически выполняются преобразования типов операндов. Например, можно из ячейки памяти с целочисленным значением записать это значение в вершину стека и при этом будет выполнено преобразование целочисленного значения в вещественное. И наоборот, при записи значения из регистров ST(0) – ST(7) в память может выполняться преобразование вещественного значения в целочисленное.

Нечисловые регистры сопроцессора предназначены для хранения состояния сопроцессора и признаков значений регистров ST(0) – ST(7). Нечисловыми регистрами являются:

1. Регистр управления;

2. Регистр состояния;

3. Регистр признаков;

4. Указатель команды;

5. Указатель операнда.

Структура нечисловых регистров сопроцессора представлена на рис. 6 (символами ‘X’ обозначены неопределенные значения битов для некоторых моделей сопроцессоров).

15 – 13 11 – 10 9 - 8
XXX XX RC PC XX XX PM UM OM ZM DM I M
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...