Руководство по языку B.Pascal 7

       

Распознавание сопроцессора 80х87 в программах DOS


Исполняющая библиотека 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). Для нее определены следующие значения:

---------------T-------------------------------- ¦ Значение ¦ Определение ¦ +--------------+--------------------------------+ ¦ 0 ¦ сопроцессор не обнаружен ¦ ¦ 1 ¦ обнаружен сопроцессор 8087 ¦ ¦ 2 ¦ обнаружен сопроцессор 80287 ¦ ¦ 3 ¦ обнаружен сопроцессор 80387 ¦ L--------------+---------------------------------

Чтобы определить характеристики системы, на которой работает ваша программа, вы можете в программе проверить содержимое пере- менной Test8087. В частности, эту переменную можно проанализиро- вать для того, чтобы определить, эмулируются инструкции работы с плавающей точкой, или они действительно выполняются.


Содержание раздела