
- •Вычисление некоторых элементарных функций с помощью сопроцессора.
- •Принципы работы
- •Префикс команд и адресация операндов
- •Форматы данных
- •Вещественные числа
- •Целые числа
- •Регистры сопроцессора
- •Численные регистры
- •Регистр тегов
- •Регистр управления
- •Регистр состояния
- •Регистры указателя команды и указателя операнда
- •Система команд сопроцессора
- •Ввод с клавиатуры и вывод данных на экран с помощью функций dos.
- •Сравнительная характеристика функций dos ввода с клавиатуры
- •Функции dos вывода данных на экран
- •ФункцииBios для работы с клавиатурой. Чтение символа с ожиданием
- •Проверка буфера на наличие в нем символов
- •Получение состояния переключающих клавиш
- •Установка временных характеристик клавиатуры
- •Запись символов в буфер клавиатуры
- •Чтение символа с ожиданием для 101-клавишной клавиатуры
- •Проверка буфера на наличие в нем символов для 101-клавишной клавиатуры
- •Получение состояния переключающих клавиш для 101-клавишной клавиатуры
- •Получение состояния переключающих клавиш для 101-клавишной клавиатуры
- •Функции bios для работы с экраном
- •Функции работы с памятью.
- •Описание:
Регистр тегов
Этот регистр разделен на восемь двухбитовых полей, которые обозначаются TAG0...TAG7. Каждое поле относится к своему численному регистру.
Поля регистра тегов классифицируют содержимое "своего" численного регистра:
00 - Регистр содержит действительное ненулевое число
01 - В регистре находится нуль
10 - Регистр содержит недействительное число - нечисло, бесконечность, неопределенность
11 - Пустой неинициализированный регистр
Например, если все регистры сопроцессора были пустые, а затем в стек численных регистров было занесено одно действительное ненулевое значение, содержимое регистра тегов в шестнадцатиричном представлении будет 3FFFh.
Регистр управления
Формат регистра управления (обозначение бита и его порядок):
IM , нулевой;
DM, первый;
ZM, второй;
OM,третий;
UM,четвертый;
PM,пятый;
IEM,седьмой (в Pentium не используется);
PC,восьмой и девятый;
RC,одинадцатый и десятый;
IC, двенадцатый;
Шестой, тринадцатый, четырнадцатый и пятнадцатый биты не используются.
В регистре управления биты 0...5 - маски особых случаев. Особые случаи иногда возникают при выполнении команд сопроцессора, например, при делении на нуль, переполнении и так далее.
Если все биты масок особых случаев равны нулю, особый случай вызывает прерывание центрального процессора INT 10h (обратите внимание, что это прерывание используется BIOS для работы с дисплейным адаптером). Если же особые случаи замаскированы установкой соответствующих бит в единичное состояние, прерывание не вырабатывается, а в качестве результата возвращается особое значение - бесконечность, нечисло и так далее.
Ниже приведена таблица масок особых случаев:
IM Недействительная операция
DM Денормализованный результат
ZM Деление на нуль
OM Переполнение
UM Антипереполнение
PM Особый случай при неточном результате
IEM Маскирование одновременно всех особых случаев вне зависимости от установки бит 0-5 регистра управления. Этот бит действителен только для сопроцессора 8087
Подробнее особые случаи и условия их возникновения будут описаны ниже.
Двухбитовое поле PC регистра управления управляет точностью вычислений в сопроцессоре:
00 - Использование расширенной точности. Этот режим устанавливается при инициализации сопроцессора
10 - Округление результата до двойной точности
11 - Округление результата до одинарной точности
Искусственное ухудшение точности вычислений не приводит к ускорению работы программы. Режимы с пониженной точностью предназначены для эмуляции процессоров, использующих двойную и одинарную точность, соответственно.
Двухбитовое поле RC задает режим округления при выполнении операций с вещественными числами:
00 - округление к ближайшему числу, этот режим устанавливается при инициализации сопроцессора
01 - округление в направлении к отрицательной бесконечности
10 - округление в направлении к положительной бесконечности
11 - округление в направлении к нулю
Ниже демонстрируются перечисленные режимы округления. Символами "o" обозначены точные значения вещественных чисел, символами "x" приближенные значения. Стрелки "<<" и ">>" указывают направление округления. В центре линии расположен нуль числовой оси, на ее левом и правом конце - отрицательная и положительная бесконечности.
* Округление в направлении к ближайшему числу:
-беск.<-o-<<-x-------o---- 0 -----o-----x->>--o---->+беск.
* Округление в направлении к отрицательной бесконечности:
-беск.<-o-<<-x-------o---- 0 -----o---<<----x-o---->+беск.
* Округление в направлении к положительной бесконечности:
-беск.<-o-x-->>------o---- 0 -----o------x->>-o---->+беск.
* Округление в направлении к нулю:
-беск.<-o-x-->>------o---- 0 -----o---<<----x-o---->+беск.
Для уменьшения ошибок вычислений целесообразно использовать режим округления в направлении к ближайшему числу. Режим округления в направлении к нулю используется при моделировании целочисленной арифметики.
Остальные два режима округления используют в интервальной арифметике. Для получения наиболее точного результата каждая команда (операция) выполняется два раза - первый раз с округлением в направлении к отрицательной бесконечности, второй раз - в направлении к положительной бесконечности. Точный результат лежит между полученными значениями. Заметьте, что здесь речь идет только об отдельных операциях, но не о том, чтобы выполнить всю программу вычислений вначале с одним режимом округления, а затем с другим.
Поле IC регистра управления предназначено для управления бесконечностью и может иметь два значения: 0 - проективный режим и 1 - афинный режим.
В проективном режиме существует только одна бесконечность, она не имеет знака. В афинном режиме имеется две бесконечности - положительная и отрицательная.
Афинный режим допускает выполнение многих операций с бесконечностями - сложение, умножение и так далее.