- •Кафедра специализированных компьютерных систем методические указания
- •1 Задание для курсовой работы
- •Формулировка задания
- •Варианты заданий
- •Указания к выполнению курсовой работы
- •Структурное оформление программы
- •Содержание и оформление пояснительной записки
- •Общая информация
- •Оформление программных документов
- •Краткие сведения о математическом сопроцессоре
- •Программная модель сопроцессора
- •Форматы представления вещественных чисел
- •Система команд сопроцессора
- •Использование обратной польской записи
- •Преобразование выражений в формат полиз
- •Алгоритм вычисления выражений
- •Ввод вещественных чисел с клавиатуры и вывод на экран
- •Ввод и преобразование символьной информации
- •Вывод результата вычислений
- •Приложение б
- •Приложение в Программа преобразования вещественного числа короткого формата (32 бита) в символьное представление
Система команд сопроцессора
Система команд сопроцессора включает в себя около 80 машинных команд, которые подразделяются на 5 групп:
команды передачи данных;
команды сравнения данных;
арифметические команды;
трансцендентные команды;
команды управления.
Отличительной особенностью записи команд сопроцессора является первая буква f в обозначении всех команд. Полная информация обо всех командах системы команд сопроцессора имеется, например, в справочнике [3]. Основные особенности взаимодействия основного процессора и сопроцессора можно найти в [2].
Стоит отдельно рассмотреть возможности сравнения вещественных чисел, предусмотренные в архитектуре сопроцессора и основного процессора. Для реализации этих возможностей в системе команд сопроцессора имеются команды сравнения данных. Команды сравнения сравнивают значение в вершине стека сопроцессора st(0) со значением операнда, который находится в регистре или в памяти. В результате работы команд сравнения в регистре состояния устанавливаются следующие значения бит кода условия с3, с2, с0:
если st (0 )>операнда, то 000 (сЗс2с0);
если st (0 )<операнда, то 001 (сЗс2с0);
если st(0)=операнду, то 100 (сЗс2с0);
если операнды неупорядочены, то 111 (сЗс2с0).
Для того чтобы получить возможность реагировать на эти коды командами условного перехода основного процессора (они реагируют на флаги в eflags), нужно как-то записать сформированные биты условия сЗ, с2, с0 в регистр eflags. В системе команд сопроцессора существует команда fstsw, которая позволяет запомнить слово состояния сопроцессора в регистре ах или ячейке памяти. Далее значения нужных бит извлекаются и анализируются командами основного процессора. Например, запись старшего баюта слова состояния, в котором находятся биты сО-сЗ, в младший байт регистра eflags/flags осуществляется командой sahf. Эта команда записывает содержимое ah в младший байт регистра eflags/flags. После этого бит с0 записывается на место флага сf, с2 — на место рf, с3 — на место zf. Бит с1 выпадает из общего правила, так как в регистре флагов на месте соответствующего ему бита находится единица. Анализ этого бита нужно проводить с помощью логических команд основного процессора.
В качестве примера в приложении А приведена программа, демонстрирующая использование команд сравнения вещественных данных. Программа разбивает массив вещественных чисел в формате двойного слова на два массива. В первый массив помещаются все элементы, которые больше либо равны нулю, а во второй – меньше нуля.
Использование обратной польской записи
Преобразование выражений в формат полиз
Для того, чтобы написать программу для вычисления некоторого выражения, его необходимо предварительно преобразовать в удобный для программирования сопроцессора вид. Процесс преобразования напоминает подготовку выражения для метода трансляции, основанного на использовании обратной польской записи (ПОЛИЗ). Рассмотрим суть ПОЛИЗ на примере вычисления выражения:
a+b*c-d/(a+b).
Графически это выражение представляется в виде дерева (рис.4.1).
Рисунок 4.1- Представление выражения в виде дерева
Листья ветвей дерева соответствуют операндам, а узлы — операциям. Пусть началом обхода будет лист самой левой ветви дерева. Тогда для получения обратной польской записи выражения необходимо двигаться по дереву слева направо, при этом узлы должны просматриваться только после обхода всех исходящих из него ветвей. В результате выражение будет выглядеть так:
abc*+dab+/-.
Другое название такой формы записи — постфиксная запись. Такое название означает, что знак операции записывается после операндов, участвующих в операции. Использование постфиксной записи позволяет вычислять выражения за один проход с учетом приоритета арифметических операций.
