Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Регистры сопроцессора функционируют как обычный стек основного процессора. Но у этого стека имеется ограниченное число позиций — только 8. Сопроцессор имеет еще один регистр, труднодоступный для программиста. Он представляет собой слово, содержащее "метки" каждой позиции стека. Такой регистр позволяет сопроцессору отслеживать, какие из позиций стека используются, а какие свободны. Любая попытка поместить объект в стек на уже занятую позицию приведет к возникновению исключительной ситуации — недействительной операции.

Программа заносит данные в стек сопроцессора с помощью команды загрузки, которая помещает данные в вершину стека. Если число в памяти записано не во временном действительном формате, то сопроцессор преобразует его в 80- битовое представление во время выполнения команды загрузки.
Команды записи извлекают значение из стека сопроцессора и помещают их в память. Если необходимо преобразование формата данных, сопроцессор выполняет его как часть операции записи. Некоторые формы операции записи оставляют вершину стека нетронутой для дальнейших действий.
После того как данные помещены в стек сопроцессора, они могут быть использованы любой командой. Инструкции процессора допускают как действия между регистрами, так и действия между памятью и регистрами. По аналогии с основным процессором, из любых двух операндов арифметической операции один должен находиться в регистре. У сопроцессора один из операндов должен быть всегда верхним элементом стека, а другой операнд может быть взят из памяти, либо из стека регистров.

Стек регистров всегда должен быть приемником результата любой арифметической операции. Непосредственно записать результат в память той же командой, которая выполнила вычисления, процессор числовой обработки не может. Для пересылки операнда обратно в память необходимо воспользоваться отдельной командой записи или командой извлечения из стека с последующей записью в память.

Все команды математического сопроцессора начинаются с буквы F, чтобы отличить их от команд основного процессора. Условно команды сопроцессора можно разделить на несколько групп:
• команды записи и чтения;
- команды сложения/вычитания;
• команды умножения/деления;
• команды сравнения;
• команды трансцендентных функций;
• дополнительные команды.

Рассмотрим более подробно каждую из этих групп команд.
Команда записи имеет два варианта. Одна из модификаций этой команды извлекает число из вершины стека и записывает его в ячейку памяти. Выполняя эту команду, сопроцессор преобразует данные из временного действительного формата в желаемую внешнюю форму. Для этой команды определены коды операций fst и fist. Эти команды позволяют занести значение вершины стека в любой регистр внутри стека.

Второй вариант команды записи кроме записи данных изменяет положение указателя стека. Команды fstp (как и команды fistp и fbstp), выполняя ту же операцию записи данных из сопроцессора в память, извлекают число из стека. Эта модификация команд поддерживает все внешние типы данных.

Команда замены fxch — следующая команда в группе команд пересылки данных. Она меняет местами содержимое вершины, стека с содержимым другого регистра стека. В качестве операнда этой команды может использоваться только другой элемент стека. Обменять содержимое вершины стека и ячейки памяти эта команда не позволяет. Для этого требуется выполнить несколько команд. Сопроцессор может в одной команде выполнять чтение из памяти или запись в память, но не то и другое одновременно. Команды чтения или загрузки помещают данные в вершину стека сопроцессора. Основной из них является команда fid. Для загрузки целых чисел используется модификация команды — fild.


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru