- •Лекция 25
- •Возможности сопроцессора
- •Архитектура сопроцессора
- •Регистры сопроцессора
- •Регистр состояния SWR
- •Регистр управления CWR
- •Регистр тегов TWR
- •Форматы данных
- •Форматы данных
- •Форматы вещественных
- •Форматы данных
- •Форматы данных
- •Форматы данных
- •Система команд сопроцессора
- •Система команд
- •Команды передачи данных
- •Команды передачи данных
- •Целочисленные арифметические команды
- •Вещественные арифметические команды
- •Вещественные арифметические команды
- •Вещественные арифметические команды
- •Вещественные арифметические команды
- •Вещественные арифметические команды
- •Команды сравнения
- •Команды сравнения
- •Команды трансцендентных функций
- •Команды трансцендентных функций
- •Команды управления сопроцессором
- •Команды управления сопроцессором
- •Команды управления сопроцессором
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 1
- •Пример 2
- •Пример 2 (данные
- •Пример 2 (ввод интервала)
- •Пример 2 (ввод K и N)
- •Пример 2 (подготовка к выводу таблицы)
- •Пример 2 (цикл вывода
Форматы данных
Директивы описания данных:
Целое число 16 бит – dw
Целое число 32 бит - dd
Целое число 64 бит - dq
Упакованное десятичное целое число - dt
Короткое вещественное число – dd
Длинное вещественное число – dq
Расширенное вещественное число – dt
Форматы данных
Минимальное положительное денормализованнное число
0 |
00..00 |
|
00000………………………001 |
|
|
|
|
|
|
79 78 |
64 63 |
0 |
Минимальное отрицательное денормализованнное число
1 |
00..00 |
|
00000………………………001 |
|
|
|
|
|
|
79 78 |
64 63 |
0 |
Максимальное положительное денормализованнное число
0 |
00..00 |
|
11111………………………111 |
|
|
|
|
|
|
79 78 |
64 63 |
0 |
Максимальное отрицательное денормализованнное число 1 00..00 11111………………………111
79 78 |
64 63 |
0 |
|
|
|
Форматы данных
Нуль
0 |
00..00 |
|
00000……………………000 |
|
|
|
|
|
|
79 78 |
64 63 |
0 |
||
Нуль |
|
|
|
|
|
|
|
|
|
1 |
00..00 |
|
00000……………………000 |
|
|
|
|
|
|
79 78 |
64 63 |
0 |
Положительная бесконечность
0 |
11..11 |
|
10000……………………000 |
|
|
|
|
|
|
79 78 |
64 63 |
0 |
Отрицательная бесконечность
1 |
11..11 |
|
10000……………………000 |
|
|
|
|
|
|
79 78 |
64 63 |
0 |
Сигнальное не число
x |
11..11 |
|
10xxx……………………xxx |
|
|
|
|
|
|
79 78 |
64 63 |
0 |
||
Сигнальное не число |
|
|||
|
|
|
|
|
x |
11..11 |
|
11xxx……………………xxx |
|
|
|
|
|
|
79 78 |
64 63 |
0 |
||
Спокойное не число |
|
|||
|
|
|
|
|
1 |
11..11 |
|
11000……………………000 |
|
|
|
|
|
|
79 78 |
64 63 |
0 |
Система команд сопроцессора
Все команды сопроцессора можно разделить на следующие группы:
команды передачи данных,
арифметические команды,
команды сравнения данных,
команды управления.
Система команд
Правиласопроцессорамнемоники команд сопроцессора:
Все мнемонические обозначения начинаются с символа f.
Вторая буква мнемонического обозначения определяет тип операнда в памяти с которым работает программа:
i – целое двоичное число,
b – целое десятичное число,
отсутствие буквы – вещественное число.
Последняя буква мнемонического обозначения команды p означает, что последним действием команды обязательно является извлечение операнда из стека.
Последняя или предпоследняя буква r означает реверсивное следование операндов при выполнении команд вычитания и деления.
Команды передачи данных
fld источник – загрузка вещественного числа из памяти в вершину стека.
fst приемник – сохранение вещественного числа из вершины стека в память.
fstp приемник – сохранение вещественного числа из вершины стека в память с выталкиванием из стека.
fild источник – загрузка двоичного целого числа из памяти в вершину стека.
fist приемник – сохранение двоичного целого числа из вершины стека в память.
fistp приемник – сохранение двоичного целого числа из вершины стека в память с выталкиванием из стека.
fbld источник – загрузка десятичного целого числа из памяти в вершину стека.
fbstp приемник – сохранение десятичного целого числа из вершины стека в память с выталкиванием из стека.
Команды передачи данных
fxch st(i) – обмен значений между текущей вершиной стека и регистром стека сопроцессора st(i).
fldz – загрузка в вершину стека нуля,
fld1 – загрузка в вершину стека единицы,
fldpi – загрузка в вершину стека числа π,
fldl2t – загрузка в вершину стека двоичного логарифма десяти,
fldl2e – загрузка в вершину стека двоичного логарифма числа e,
fldlg2 – загрузка в вершину стека десятичного логарифма двух,
fldln2 – загрузка в вершину стека натурального логарифма двух.
Целочисленные арифметические команды
fiadd источник – команда складывает значение st(0) и целочисленного источника. Результат записывается в st(0).
fisub источник – команда вычитает значение целочисленного источника из st(0). Результат записывается в st(0).
fimul источник – команда умножает значение целочисленного источника на st(0). Результат записывается в st(0).
fidiv источник – команда делит содержимое st(0) на значение целочисленного источника. Результат записывается в st(0).
fisubr источник – команда вычитает значение st(0) из целочисленного источника. Результат записывается в st(0).
fidivr источник – команда делит содержимое целочисленного источника на st(0). Результат записывается в st(0).
Вещественные арифметические команды
fadd – складывает значения st(0) и st(1). Результат в st(0).
fadd источник – команда складывает значения st(0) и источника в памяти. Результат в st(0).
fadd st(i), st – команда складывает значения st(0) и st(i). Результат в st(i).
faddp st(i), st – команда складывает значения st(0) и st(i). Далее осуществляется выталкивание значения из стека, результат, таким образом, остается в регистре st(i-1).
Вещественные арифметические команды
fsub – вычитает значение st(1) из st(0). Результат в st(0).
fsub источник – команда вычитает значение источника в памяти из st(0). Результат в st(0).
fsub st(i), st – команда вычитает значение st(0) из значения st(i). Результат в st(i).
fsubp st(i), st – команда вычитает значение st(0) из значения st(i). Далее осуществляется выталкивание значения из стека, результат, таким образом, остается в регистре st(i-1).
fsubr st(i), st – команда вычитает значение st(i) из значения st(0). Результат в st(0).
fsubrp st(i), st – команда вычитает значение st(i) из значения st(0). Далее осуществляется выталкивание значения из стека, результат, таким образом, остается в регистре st(i-1).