Страница 55 из 56
Использование микросхемы математического
сопроцессора 8087/80287
-----------------------------------------------------------------
Если вы абсолютно уверены, что ваша программа будет работать
только на машинах, имеющих микросхему 8087 или 80287, то можете
создать программу, которая будет использовать преимущества этой
микросхемы. В этом случае результирующие .ЕХЕ файлы будут меньше,
так как Турбо Си не будет включать подпрограммы эмуляции
8087/80287 (EMU.LIB).
Если вы используете интегрированную версию Турбо Си, то сле-
дует перейти в меню Options, выбрать Compiler, выбрать Code
generation и затем выбирать элемент Floating point до тех пор,
пока на следующем поле не появится надпись "8087/80287". Когда вы
компилируете и компонуете свою программу, Турбо Си будет автома-
тически выбирать для нее нужные опции и библиотеки.
Если вы используете ТСС (автономный компилятор), то нужно в
командной строке использовать опцию - f87, то есть:
tcc -f87 -mX ratio
Это даст указание Турбо Си генерировать встроенные вызовы к
микросхеме 8087/80287. Когда TLINK вызвана, файлы FP87.LIB и
MATHx.LIB будут скомпонованы.
Если вы выполняете компоновку результирующей программы вруч-
ную, то должны определить как соответствующую математическую биб-
лиотеку (зависящую от размера модели), так и библиотеку процессо-
ра FP87 следующим образом:
tlink lib\c0X ratio, ratio, ratio, lib\fp87.lib
lib\mathX.lib lib\cX.lib
где Х, как всегда, обозначает нужную модель библиотеки.
- 453,454 -
Если вы не используете плавающую точку...
-----------------------------------------------------------------
Если ваша программа не использует никакие подпрограммы с
плавающей точкой, то компоновщик не будет задействовать соответс-
твующие библиотеки (EMU.LIB или FP87.LIB совместно с MATHx.LIB),
даже если вы запишете их в командной строке. Не включив эти биб-
лиотеки в командную строку компоновщика, вы можете оптимизировать
шаг выполнения компоновки (если в программе не используются опе-
рации над числами с плавающей точкой).
Предположим, вы хотите компилировать и компоновать следующую
программу (записанную в RATIO.C):
main()
{
int a,b,ratio;
printf ("Введите два значения: ");
scanf ("%d %d", %a,%b);
ratio = a/b;
printf ("Результат деления будет %d\n",ratio);
}
Так как эта программа не использует подпрограммы с плавающей
точкой, то вы можете выбирать, компилировать ли ее с эмуляцией
плавающей точки или без плавающей точки вообще.
Если вы используете интегрированную версию Турбо Си и решили
компилировать с эмуляцией, то выберите Compile to OBJ из меню
Compile (Эмуляция включена по умолчанию). Компоновщик будет вклю-
чать библиотеки с плавающей точкой на шаге установки связей, но
ни одна связь не будет реально установлена.
Если вы хотите ускорить процесс компоновки, то можете уста-
новить режим "без плавающей точки". Перейдите в меню Options, вы-
берите Сompiler, выберите Code generation, а затем - положение
Floating point.
Нажимая несколько раз клавишу "Ввод" в циклах этой команды,
вы пройдете 3 опции: None, Emulation и 8087/80287. Вам нужна оп-
ция None. Можете нажать "Esc" 3 раза, чтобы вернуться в стро-
ку-линейку меню (или нажмите F10).
- 455,456 -
Когда вы компилируете и компонуете эту же программу в режиме
SET 87=Y
Установка переменной среды 87 в N (для No) указывает началь-
ной программе, что вы не хотите использовать 8087/80287 (даже ес-
ли он присутствует в системе).
И, наоборот, установка переменной среды 87 в Y (для Yes) оз-
начает, что сопроцессор имеется, и вы хотите, чтобы ваша програм-
ма использовала его. Предостережение программисту! Если вы уста-
навливаете 87=Y, а на самом деле 8087/80287 отсутствует в машине,
то программа потерпит крах и сгорит в логическом аду.
- 459,460 -
Переменная среды 87 в состоянии замещать устанавливаемый по
умолчанию алгоритм автообнаружения потому, что когда вы начинаете
выполнять свою программу, начальная программа первым долгом про-
веряет, определена ли переменная среды 87.
- Если переменная среды 87 определена, то начальная програм-
ма не смотрит далее, и ваша программа выполняется в описанном ре-