Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей
|
Регистры сопроцессора функционируют как обычный стек основного процессора.
Но у этого стека имеется ограниченное число позиций — только 8.
Сопроцессор имеет еще один регистр, труднодоступный для программиста.
Он представляет собой слово, содержащее "метки" каждой позиции стека.
Такой регистр позволяет сопроцессору отслеживать, какие из позиций стека
используются, а какие свободны. Любая попытка поместить объект в стек
на уже занятую позицию приведет к возникновению исключительной ситуации
— недействительной операции.
Программа заносит данные в стек сопроцессора с помощью команды загрузки,
которая помещает данные в вершину стека. Если число в памяти записано не
во временном действительном формате, то сопроцессор преобразует его в 80-
битовое представление во время выполнения команды загрузки.
Команды записи извлекают значение из стека сопроцессора и помещают их
в память. Если необходимо преобразование формата данных, сопроцессор
выполняет его как часть операции записи. Некоторые формы операции записи
оставляют вершину стека нетронутой для дальнейших действий.
После того как данные помещены в стек сопроцессора, они могут быть использованы
любой командой. Инструкции процессора допускают как действия
между регистрами, так и действия между памятью и регистрами. По
аналогии с основным процессором, из любых двух операндов арифметической
операции один должен находиться в регистре. У сопроцессора один из
операндов должен быть всегда верхним элементом стека, а другой операнд
может быть взят из памяти, либо из стека регистров.
Стек регистров всегда должен быть приемником результата любой арифметической
операции. Непосредственно записать результат в память той же
командой, которая выполнила вычисления, процессор числовой обработки
не может. Для пересылки операнда обратно в память необходимо воспользоваться
отдельной командой записи или командой извлечения из стека с
последующей записью в память.
Все команды математического сопроцессора начинаются с буквы F, чтобы
отличить их от команд основного процессора. Условно команды сопроцессора
можно разделить на несколько групп:
• команды записи и чтения;
- команды сложения/вычитания;
• команды умножения/деления;
• команды сравнения;
• команды трансцендентных функций;
• дополнительные команды.
Рассмотрим более подробно каждую из этих групп команд.
Команда записи имеет два варианта. Одна из модификаций этой команды
извлекает число из вершины стека и записывает его в ячейку памяти. Выполняя
эту команду, сопроцессор преобразует данные из временного действительного
формата в желаемую внешнюю форму. Для этой команды определены
коды операций fst и fist. Эти команды позволяют занести
значение вершины стека в любой регистр внутри стека.
Второй вариант команды записи кроме записи данных изменяет положение
указателя стека. Команды fstp (как и команды fistp и fbstp), выполняя
ту же операцию записи данных из сопроцессора в память, извлекают
число из стека. Эта модификация команд поддерживает все внешние
типы данных.
Команда замены fxch — следующая команда в группе команд пересылки
данных. Она меняет местами содержимое вершины, стека с содержимым
другого регистра стека. В качестве операнда этой команды может использоваться
только другой элемент стека. Обменять содержимое вершины стека и
ячейки памяти эта команда не позволяет. Для этого требуется выполнить
несколько команд. Сопроцессор может в одной команде выполнять чтение
из памяти или запись в память, но не то и другое одновременно.
Команды чтения или загрузки помещают данные в вершину стека сопроцессора.
Основной из них является команда fid. Для загрузки целых чисел
используется модификация команды — fild.
<< Назад В начало Далее >> |
|