Архитектура ЭВМ и систем. Коваль А.С - 67 стр.

UptoLike

Составители: 

67
FCLEX Очистить исключения
FSTENV dest записать слова состояния, управления, тэгов и
указатели исключений в память – dest
FLDENV src загрузить окружение с src
FSAVE dest записать состояние сопроцессора в 94-байтное dest
FRSTOR src восстановить состояние сопроцессора,
сохраненное FSAVE
FINCSTP st(6)st(5); st(5)st(4),...,st(0)?
FDECSTP st(0)st(1); st(1)st(2),...,st(7)?
FFREE st(i) Отметить регистр st(i) как неиспользуемый
FNOP st(0) st(0), холостая команда
WAIT/FWAIT Остановить ЦПУ, пока сопроцессор не завершил
выполнение текущей команды
Покажем, как используется стек сопроцессора и его команды для вы-
полнения последовательности вычислений на примере вычисления скаляр-
ного произведения (Рис. 2.11). Вначале разместим исходные данные в сег-
менте данных DS последовательно (1.2; 3.4; 5.6; 7.8) в формате float. Для
этого изменим представление данных сегмента DS как данных с плаваю-
щей точкой (Ctrl^D Æ Float).
1. Перед работой со стеком сопроцессора, выполним сброс FINIT.
2. Вторая команда FLD dword ptr [bp] выполняет декремент указателя стека и загружает зна-
чение 1.2 из DS:BP в ST(0).
3. Третья команда умножает значение ST(0) на операнд 3.4 из DS:[BP+4] и записывает ре-
зультат в ST(0).
4. Четвертая команда выполняет декремент указателя стека и загружает значение 5.6 из па-
мяти DS:[BP+8] в ST(0).
5. Пятая команда умножает значение ST(0)
на значение 7.8 из DS:[BP+0C] и записывает ре-
зультат в ST(0).
6. Шестая команда складывает значения ST(1) и ST(0) и записывает результат 47.76 в ST(0).
Вычисление скалярного произ-
ведения (1.2x3.4)+(5.6x7.8)
FINIT
FLD dword ptr [bp] ; (a)
FMUL dword ptr [bp+04]; (b)
FLD dword ptr [bp+08] ;
FMUL dword ptr [bp+0c]; (c)
FADD ST(1),ST ; (d)
a b c d
R7
R6
R5
R4 1.2 ST(0) R4 4.08 ST(0) R4 43.68 ST(1) R4 43.68 ST(1)
R3 R3 R3 4.08 ST(0) R3 47.76 ST(0)
R2 R2 R2 R2
R1 R1 R1 R1
R0 R0 R0 R0
Рис. 2.11 Пример программы для сопроцессора
                                            67
 FCLEX                Очистить исключения
 FSTENV dest          записать слова состояния, управления, тэгов и
                      указатели исключений в память – dest
 FLDENV src           загрузить окружение с src
 FSAVE dest           записать состояние сопроцессора в 94-байтное dest
 FRSTOR src           восстановить состояние сопроцессора,
                      сохраненное FSAVE
 FINCSTP              st(6)←st(5); st(5)←st(4),...,st(0)←?
 FDECSTP              st(0)←st(1); st(1)←st(2),...,st(7)←?
 FFREE st(i)          Отметить регистр st(i) как неиспользуемый
 FNOP                 st(0) ← st(0), холостая команда
 WAIT/FWAIT           Остановить ЦПУ, пока сопроцессор не завершил
                      выполнение текущей команды

   Покажем, как используется стек сопроцессора и его команды для вы-
полнения последовательности вычислений на примере вычисления скаляр-
ного произведения (Рис. 2.11). Вначале разместим исходные данные в сег-
менте данных DS последовательно (1.2; 3.4; 5.6; 7.8) в формате float. Для
этого изменим представление данных сегмента DS как данных с плаваю-
щей точкой (Ctrl^D � Float).
1. Перед работой со стеком сопроцессора, выполним сброс FINIT.
2. Вторая команда FLD dword ptr [bp] выполняет декремент указателя стека и загружает зна-
   чение 1.2 из DS:BP в ST(0).
3. Третья команда умножает значение ST(0) на операнд 3.4 из DS:[BP+4] и записывает ре-
   зультат в ST(0).
4. Четвертая команда выполняет декремент указателя стека и загружает значение 5.6 из па-
   мяти DS:[BP+8] в ST(0).
5. Пятая команда умножает значение ST(0) на значение 7.8 из DS:[BP+0C] и записывает ре-
   зультат в ST(0).
6. Шестая команда складывает значения ST(1) и ST(0) и записывает результат 47.76 в ST(0).
 Вычисление скалярного произ-                 FINIT
 ведения (1.2x3.4)+(5.6x7.8)                  FLD dword ptr [bp]    ; (a)
                                              FMUL dword ptr [bp+04]; (b)
                                              FLD dword ptr [bp+08] ;
                                              FMUL dword ptr [bp+0c]; (c)
                                              FADD ST(1),ST         ; (d)
      a                      b                      c                     d
 R7
 R6
 R5
 R4       1.2   ST(0) R4      4.08   ST(0) R4 43.68 ST(1) R4 43.68 ST(1)
 R3                   R3                   R3 4.08 ST(0) R3 47.76 ST(0)
 R2                   R2                   R2             R2
 R1                   R1                   R1             R1
 R0                   R0                   R0             R0
                 Рис. 2.11 Пример программы для сопроцессора