- •Лекция 25
- •Возможности сопроцессора
- •Архитектура сопроцессора
- •Регистры сопроцессора
- •Регистр состояния SWR
- •Регистр управления CWR
- •Регистр тегов TWR
- •Форматы данных
- •Форматы данных
- •Форматы вещественных
- •Форматы данных
- •Форматы данных
- •Форматы данных
- •Система команд сопроцессора
- •Система команд
- •Команды передачи данных
- •Команды передачи данных
- •Целочисленные арифметические команды
- •Вещественные арифметические команды
- •Вещественные арифметические команды
- •Вещественные арифметические команды
- •Вещественные арифметические команды
- •Вещественные арифметические команды
- •Команды сравнения
- •Команды сравнения
- •Команды трансцендентных функций
- •Команды трансцендентных функций
- •Команды управления сопроцессором
- •Команды управления сопроцессором
- •Команды управления сопроцессором
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 2
- •Пример 2 (данные
- •Пример 2 (ввод интервала)
- •Пример 2 (ввод K и N)
- •Пример 2 (подготовка к выводу таблицы)
- •Пример 2 (цикл вывода
Вещественные арифметические команды
fmul – умножает значения st(0) и st(1). Результат в st(0).
fmul st(i) – команда умножает значения st(0) и st(i). Результат в st(0).
fmul st(i), st – команда умножает значения st(0) и st(i). Результат в st(i).
fmulp st(i), st – команда умножает значения st(0) и st(i). Далее осуществляется выталкивание значения из стека, результат, таким образом, остается в регистре st(i-1).
Вещественные арифметические команды
fdiv – делит значение st(0) на st(1). Результат в st(0).
fdiv st(i) – команда делит значение st(0) на значение st(i). Результат в st(0).
fdiv st(i), st – команда делит значение st(0) на значение st(i). Результат в st(i).
fdivp st(i), st – команда делит значение st(0) на значение st(i). Далее осуществляется выталкивание значения из стека, результат, таким образом, остается в регистре st(i-1).
fdivr st(i), st – команда делит значение st(i) на значение st(0). Результат в st(0).
fdivrp st(i), st – команда делит значение st(i) на значение st(0). Далее осуществляется выталкивание значения из стека, результат, таким образом, остается в регистре st(i-1).
Вещественные арифметические команды
fsqrt – вычисление квадратного корня st(0). Результат в st(0).
fabs – вычисление модуля числа в st(0). Результат в st(0).
fchs – изменение знака значения в st(0). Результат в st(0).
fxtract – выделение мантиссы и порядка числа из st(0). Результат: st(0) – мантисса, st(1) – порядок.
fscale – команда масштабирования – изменяет порядок значения, находящегося в st(0) на величину в st(1).
frndint – команда округления до целого значения – округляет значение находящееся в st(0) согласно состоянию RC.
Команды сравнения
Все команды сравнения устанавливают значения бит C0 – C3 в SWR в соответствии с результатом сравнения.
fcom [операнд в памяти] – команда без операндов сравнивает два значения: st(0) и st(1). Если операнд указан, то сравнивается st(0) и значение в памяти.
fcomp операнд – сравнивает значение st(0) и значение в памяти. После выталкивает из стека значение st(0).
fcompp – сравнивает значение st(0) и st(1). После выталкивает из стека st(0) и st(1).
ficom операнд – сравнивает значение st(0) и значение в памяти.
ficomp операнд – сравнивает значение st(0) и значение в памяти. После выталкивает значение st(0).
Команды сравнения
ftst – сравнивает значение st(0) с нулем.
fucom st(i) – команда сравнения (без учета порядка) в регистрах st(0) и st(i).
fucomp st(i) – команда сравнения (без учета порядка) в регистрах st(0) и st(i). Выталкивание из стека.
fucompp st(i) – команда сравнения (без учета порядка) в регистрах st(0) и st(i). Двойное выталкивание из стека.
fxam – команда анализирует значение в st(0) и формирует значения бит c0 – c3 в регистре состояния SWR. По состоянию этих бит можно судить о знаке мантиссы, корректности записи вещественного числа, типе специального численного значения (не число, бесконечность, нуль, денормализованное значение).
Команды трансцендентных функций
fcos – вычисление косинуса значения st(0). Результат в st(0).
fsin – вычисление синуса значения st(0). Результат в st(0).
fsincos – вычисление синуса и косинуса значения st(0). Результат: st(0) – sin, st(1) – cos.
fptan – вычисление частичного тангенса для значения в st(0). Результат в st(0) и st(1). Истинное значение тангенса в st(0).
fpatan – вычисление частичного арктангенса для значения st(1)/st(0). Результат в st(0).
Команды трансцендентных функций
f2xm1 – команда вычисления выражения Y=2^X-1. Исходное значение Х должно находится в st(0) и должно лежать в диапазоне -1≤X≤1. Результат помещается в регистр st(0).
fyl2x – команда вычисления выражения Z=Y*log2(X). Исходное значение Х размещается в st(0), а Y – st(1). X>0. Перед записью результата значения X и Y выталкиваются из стека, а результат записывается в st(0).
fyl2xp1 – команда вычисления выражения Z=Y*log2(X+1). Исходное значение Х размещается в st(0), а Y – st(1). 0≤|X| ≤1. Перед записью результата значения X и Y выталкиваются из стека, а результат записывается в st(0).
Команды управления сопроцессором
wait (fwait) – команда синхронизации с сопроцессором.
finit (fninit) – инициализация сопроцессора: CWR=037h, SWR=0, TWR=11…11b; DPR и IPR = 0.
fstsw / fnstsw ax – команда сохранения регистра swr в регистре ax.
fstsw / fnstsw назначение – команда сохранения регистра swr в ячейке памяти.
fstcw / fnstcw назначение – команда сохранения регистра cwr в ячейке памяти.
fldcw источник – команда загрузки регистра cwr из ячейки памяти.
Команды управления сопроцессором
fclex / fnclex – команда сброса флагов исключений в регистре swr сопроцессора.
fincstp – команда увеличения указателя стека на единицу. Псевдо выталкивание значения из стека.
fdecstp – команда уменьшения указателя стека на единицу. Псевдо помещение значения в стек.
ffree st(i) – команда освобождения регистра стека st(i).
fnop – пустая команда.
Команды управления сопроцессором
fsave / fnsave приемник – команда сохранения полного состояния сопроцессора в памяти. Размер блока памяти зависит от режима адресации: use16 – 94 байта, use32 – 108 байт.
frstor источник – команда восстановления полного состояния среды сопроцессора из области памяти.
fstenv / fnstenv приемник – команда сохранения частичного состояния сопроцессора в памяти. Размер блока памяти зависит от режима адресации: use16 – 14 байт, use32 – 28 байт.
fldenv источник – команда восстановления частичного состояния среды сопроцессора из области памяти.