ВУЗ:
Составители:
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 Пример программы для сопроцессора
Страницы
- « первая
- ‹ предыдущая
- …
- 65
- 66
- 67
- 68
- 69
- …
- следующая ›
- последняя »