Исполняющая библиотека Borland Pascal, встроенная в вашу
программу (скомпилированную с директивой {$N+}) включает в себя
код инициализации, который автоматически распознает наличие в
системе микросхемы сопроцессора 8087. Если сопроцессор 8087 име-
ется, то программа будет его автоматически использовать. В случае
же его отсутствия программа будет использовать эмулирующую библи-
отеку исполняющей системы. Если программа компилировалась с ди-
рективой {$E-} и по время начала ее работы сопроцессор не обнару-
живается, то программа завершает работу с сообщением Numeric
coprocessor required ("Требуется сопроцессор арифметических вы-
числений").
Есть несколько случаев, когда вы возможно захотите изменить
такую принятую по умолчанию логику автоматического обнаружения
сопроцессора. Например, в вашей системе может присутствовать соп-
роцессор 8087, но вы захотите проверить, как будет работать прог-
рамма, предназначенная для функционирования на системах без соп-
роцессора. Или же потребуется запустить вашу программу на
системе, совместимой с компьютером РС, но на этой системе при ра-
боте алгоритма автообнаружения будет выводиться некорректная ин-
формация (например, будет сообщаться о наличие сопроцессора, ког-
да на самом деле его нет, или наоборот).
В Borland Pascal предусмотрена возможность отмены принятой
по умолчанию логики автоматического распознавания. Эта возмож-
ность задается переменной операционной среды 87.
Вы можете установить переменную операционной среды 87 в от-
вет на подсказку DOS с помощью команды SET, например, следующим
образом:
SET 87=Y
или
SET 87=N
Установка для переменной операционной среды 87 значения N
(Нет) указывает коду инициализации, что вы не хотите использовать
сопроцессор 8087, хотя он может и присутствовать в системе. И на-
оборот: установка для переменной 87 значения Y (Да) означает, что
сопроцессор имеется, и вы хотите, чтобы ваша программа его ис-
пользовала. Однако при этом нужно помнить о том, что установка
для переменной 87 значения Y при отсутствии в системе сопроцессо-
ра 8087 приведет к тому, что ваша программа аварийно завершит ра-
боту или "зависнет".
Если переменная операционной среды 87 определена, а вы хоти-
те, чтобы она стала неопределенной, то можно ввести в ответ на
подсказку DOS:
SET 87=
и нажать клавишу Enter.
Если в операционной среде DOS присутствует запись 87=Y, или
если код инициализации успешно распознает сопроцессор, то далее
код инициализации выполняет последующие проверки, чтобы опреде-
лить, какой это сопроцессор (8087, 80287 или 80387). Это необхо-
димо для того, чтобы Турбо Паскаль мог корректно работать с от-
дельными несовместимостями, которые имеются между сопроцессорами
различных типов.
Результат автоматического распознавания наличия сопроцессора
и его модели сохраняется в переменной Test8087 (которая описыва-
ется в модуле System). Для нее определены следующие значения:
┌──────────────┬────────────────────────────────┐
│ Значение │ Определение │
├──────────────┼────────────────────────────────┤
│ 0 │ сопроцессор не обнаружен │
│ 1 │ обнаружен сопроцессор 8087 │
│ 2 │ обнаружен сопроцессор 80287 │
│ 3 │ обнаружен сопроцессор 80387 │
└──────────────┴────────────────────────────────┘
Чтобы определить характеристики системы, на которой работает
ваша программа, вы можете в программе проверить содержимое пере-
менной Test8087. В частности, эту переменную можно проанализиро-
вать для того, чтобы определить, эмулируются инструкции работы с
плавающей точкой, или они действительно выполняются.