Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Глава 15. Использование сопроцессора 80x87

В Borland Pascal вы можете работать с двумя типами чисел -

целыми (короткими целыми - Shortint, целыми - Integer, длинными

целыми - Longint, целыми длиной в байт - Byte, целыми длиной в

слово - Word) и вещественными (вещественными - Real, вещественны-

ми одинарной точности - Single, вещественными двойной точности -

Double, повышенной точности - Extended, сложными - Comp). Вещест-

венные числа называют также числами с плавающей точкой (плавающей

запятой). Для облегчения работы с целыми числами создан процессор

8086, но для работы с вещественными числами на этом процессоре

затрачивается гораздо больше времени и усилий. Для семейства про-

цессоров 8086 предназначено соответствующее семейство вспомога-

тельных специализированных процессоров для математических вычис-

лений (сопроцессоров) 80x87.

Процессор 80x87 - это специальный сопроцессор для обработки

чисел, который может входить в состав вашего компьютера РС. С по-

мощью него операции с плавающей точкой выполняются очень быстро.

Поэтому если вы собираетесь использовать большой объем вычислений

с плавающей точкой, то вам, вероятно, понадобится сопроцессор.

Borland Pascal построен таким образом, что он обеспечивает

оптимальное выполнение операций с плавающей точкой независимо от

наличия сопроцессора 80x87.

* Для программ, работающих на компьютере РС, независимо от

того, оснащен он сопроцессором 80x87 или нет, в Borland

Pascal предусмотрено использование вещественных чисел и

соответствующая библиотека программ, которые предназначены

для выполнения операций с плавающей точкой. Числа вещест-

венного типа занимают 6 байт памяти. При этом обеспечива-

ется представление чисел в диапазоне от 2.9х10^-39 до

1.7х10^38 с 11-12 значащими цифрами. Программы в библиоте-

ке программ для работы с плавающей точкой оптимизированы

по скорости и по размеру и используют самые новейшие

средства процессора 80x87.

* Если вы пишете программы, использующиеся только на компь-

ютерах, оснащенных сопроцессором 80x87, то вы можете ука-

зать Borland Pascal на необходимость получения выполняемо-

го кода, в котором используется плата процессора 80x87.

Это даст вам возможность использования четырех дополни-

тельных типов вещественных чисел (одинарной и двойной точ-

ности, повышенной точности, сложного типа) и расширенный

диапазон представления чисел с плавающей точкой - от

1.9х10^-4951 до 1,1х10^4943 с 19-20 значащими цифрами.

С помощью директивы компилятора $N или параметра меню

Options¦Cоmpiler (Параметры¦Компилятор) 80x87/80287 можно перек-

лючаться между различными моделями генерации кода с плавающей

точкой. По умолчанию используется состояние {$N-}. В этом состоя-

нии компилятор использует 6-байтовую библиотеку с плавающей точ-

кой, что позволяет вам работать только с переменными типа Real. В

состоянии {$N+} компилятор генерирует код для сопроцессора 80x87,

что дает вам дополнительную точность и доступ к 4 дополнительным

вещественным типам.

В Windows при компиляции с режимом числовой обработки, то

есть с директивой {$N+}, убедитесь, что в вашей системе можно

найти библиотеку эмуляции Windows 8087 - WIN87EM.DLL. Эта библио-

тека обеспечивает необходимый интерфейс между сопроцессором

80х87, Windows и вашей прикладной программой. Если сопроцессор

80х87 в вашей системе отсутствует, то библиотека WIN87EM.DLL бу-

дет эмулировать его программно. Эмуляция существенно замедляет

работу по сравнению с реальным сопроцессором 80х87, но обеспечи-

вает выполнение вашей прикладной программы на любой машине.

В реальном или защищенном режиме DOS, даже если у вас нет

сопроцессора 8087, вы можете указать Borland Pascal, что нужно

включить библиотеку исполняющей системы, которая эмулирует ариф-

метический сопроцессор 8087. В случае наличия сопроцессора 8087

он используется. Если сопроцессор отсутствует, его работа эмули-

руется библиотекой исполняющей системы (за счет некоторой потери

скорости работы программы).

Для разрешения и запрещения эмуляции сопроцессора 8087 ис-

пользуются директива компилятора $E и параметр Emulation (Эмуля-

ция) меню Options¦Compiler (Параметры¦Компилятор). По умолчанию

используется состояние {$E+}. В этом состоянии в программу авто-

матически включается полная эмуляция сопроцессора 8087. В состоя-

нии {$E-} используется существенно меньшая часть библиотеки с

плавающей точкой, а полученный в результате файл .EXE будет рабо-

тать только на машинах с сопроцессором 8087.

В приложении Windows директива компилятора $E не действует.

Не действует она также в модуле. Более того, если программа ком-

пилировалась с директивой {$N-}, а все модули программы компили-

ровались с директивой {$N+}, то библиотека исполняющей системы

для сопроцессора 8087 не требуется, и директива компилятора $E

игнорируется.

Прикладной программе Windows не требуется библиотека испол-

няющей системы 80x87. Вместо этого ей нужно поддерживающая библи-

отека WIN87EM.DLL, поставляемая с Windows, которая обеспечивает

необходимый интерфейс между вашей прикладной программой, Windows

и сопроцессором. Таким образом, в Windows даже при наличии в ва-

шей системе сопроцессора 80х87 для выполнения программ, скомпили-

рованных в состоянии {$N+}, должна присутствовать библиотека эму-

ляции WIN87EM.DLL (данная библиотека - это часть Windows, а не

Borland Pascal). При отсутствии сопроцессора WIN87EM.DLL будет

эмулировать его операции программным путем, что замедляет выпол-

нение программы и не гарантирует, что использующая сопроцессор

80x87 программа сможет работать на любой машине.

Когда вы запускаете прикладную программу Windows, cкомпили-

рованную в состоянии {$N+}, убедитесь, что она может найти в сис-

теме файл WIN87EM.DLL.

Когда вы выполняете компиляцию в режиме кода 80х87 (директи-

ва {$N+}), то возвращаемые подпрограммы модуля Systем (Sqrt, Рi,

Sin и т.д.) значения представляют собой не вещественные числа, а

числа типа Extended (с повышенной точностью).

{$N+}

begin

Writeln(Pi); { 3.14159265358979E+0000 }

end.

{$N-}

begin

Writeln(Pi); { 3.1415926536E+00 }

end.

В оставшейся части данной главы обсуждаются специальные воп-

росы, касающиеся использования процессора 80x87 в программах

Borland Pascal.

Соседние файлы в предмете Программирование на Pascal