КОМПЬЮТЕРНАЯ ЛИТЕРАТУРА - Турбо С: руководство пользователя. Часть 2 - Стр. 54

Индекс материала
Турбо С: руководство пользователя. Часть 2
Стр. 2
Стр. 3
Стр. 4
Стр. 5
Стр. 6
Стр. 7
Стр. 8
Стр. 9
Стр. 10
Стр. 11
Стр. 12
Стр. 13
Стр. 14
Стр. 15
Стр. 16
Стр. 17
Стр. 18
Стр. 19
Стр. 20
Стр. 21
Стр. 22
Стр. 23
Стр. 24
Стр. 25
Стр. 26
Стр. 27
Стр. 28
Стр. 29
Стр. 30
Стр. 31
Стр. 32
Стр. 33
Стр. 34
Стр. 35
Стр. 36
Стр. 37
Стр. 38
Стр. 39
Стр. 40
Стр. 41
Стр. 42
Стр. 43
Стр. 44
Стр. 45
Стр. 46
Стр. 47
Стр. 48
Стр. 49
Стр. 50
Стр. 51
Стр. 52
Стр. 53
Стр. 54
Стр. 55
Стр. 56
Все страницы
             /* Восстановить установки управляющего порта */                    
              outportb(0x61, originalbits);                                     
          }                                                                     
                                                                                
          Далее необходимо написать функцию, которая установит ваш об-          

                         - 443,444 -
                                                                                
     работчик  прерывания.  Вы  передадите  ей  адрес написанной ранее          
     функции и соответствующий номер прерывания (0 ...255 или 0х00...0          
     хFF). Эта функция должна выполнить 3 действия:                             
                                                                                
          - запретить прерывания, чтобы во время модернизации  вектор-          
            ной таблицы не произошло ничего непредвиденного;                    
          - сохранить переданный адрес в соответствующем месте;                 
          - разрешить прерывания, чтобы все снова правильно работало.           
                                                                                
          Ваша подпрограмма настройки будет выглядеть так:                      
                                                                                
          void install(void interrupt (*faddr)(), int inum)                     
         {                                                                      
             setvect(inum, faddr);                                              
         }                                                                      
                                                                                
          Наконец, вам понадобится вызвать подпрограмму звукового сиг-          
     нала для того,  чтобы подвергнуть ее проверке.  Это сделает такая          
     функция:                                                                   
                                                                                
          void   testbeep(unsigned char bcount, int inum)                       
          {                                                                     
                                                                                
                                                                                
             _AH = bcount;                                                      
             geninterrupt(inum);                                                
          }                                                                     
                                                                                
          Теперь ваша функция main имеет следующий вид:                         
                                                                                
          main()                                                                
          {                                                                     
              char  ch;                                                         
                                                                                
              install(mybeep, 10);                                              
              testbeep(3, 10);                                                  
              ch = getch();                                                     
          }                                                                     
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                

                         - 445,446 -
                                                                                
      Использование библиотек программ для работы с плавающей точкой            
     -----------------------------------------------------------------          
                                                                                
          В Си вы работаете с двумя типами чисел:  целыми (int, short,          
     long и т.п.) и с плавающей точкой (float,  double). Установленный          
     в вашей машине процессор легко работает с  целыми  значениями,  а          
     для работы с плавающей точкой он затрачивает больше времени и ре-          
     сурсов.                                                                    
                                                                                
          Однако, семейство процессоров iAPx86  имеет  соответствующее          
     семейство математических сопроцессоров 8087 и 80287. 8087 и 80287          
     (и тот и другой мы называем здесь сопроцессорами) - это специаль-          
     ные  арифметические процессоры,  которые могут быть установлены в          
     ваш РС.  Они выполняют команды с плавающей точкой  очень  быстро.          
     Если вы работаете с величинами,  в которых часто встречается пла-          
     вающая точка,  то вам непременно захочется работать с сопроцессо-          
     ром.   Центральный   процессор   в  вашем  РС  взаимодействует  с          
     8087/80287 посредством специальных прерываний.                             
                                                                                
          Турбо Си поможет гибко использовать программы непосредствен-          
     но для вашего РС и ваших нужд.                                             
                                                                                
                                                                                
          - Если  вы не будете  использовать значения с плавающей точ-          
     кой, сообщите об этом заранее компилятору.                                 
                                                                                
          - Если вам нужно использовать значения с  плавающей  точкой,          
     но  ваш РС не имеет арифметического сопроцессора (8087/80287), то          
     сообщите Турбо Си,  что выполнять компоновку в специальных  подп-          
     рограммах можно так же,  как если бы у вас был сопроцессор. В том          
     случае, если ваша программа работает в машине с сопроцессором, он          
     будет использоваться автоматически, и программа будет выполняться          
     очень быстро.                                                              
                                                                                
          - Если вы пишите программы для систем, которые имеют арифме-          
     тический сопроцессор,  то можете предписать компилятору Турбо  Си          
     использовать программу,   которая всегда работает с сопроцессором          
     8087/80287.                                                                
                                                                                
          В  следующих  примерах  для  ТСС и TLINK предполагается, что          
     файл TURBOC.CFG существует с корректной установкой маршрутов -L и          

     -I и что библиотека и начальные объектные файлы сохранены в  под-          
     каталоге, именуемом LIB.                                                   
                                                                                
                                                                                

                         - 447,448 -
                                                                                
               Эмуляция микросхемы 8087/80287                                   
     -----------------------------------------------------------------          
                                                                                
          Предположим, что вы хотите использовать величины с плавающей          
     точкой или вы имеете программу, использующую величины с плавающей          
     точкой,  но  ваш компьютер не имеет арифметического сопроцессора,          
     то будет ли выполняться ваша программа? Успокойтесь, Турбо Си по-          
     может в этой ситуации.                                                     
                                                                                
          В соответствии  с опцией эмуляции компилятор будет генериро-          
     вать программу так, как если бы 8087/80287 в РС был, но программа          
     будет  выполнять компоновку в библиотеке эмуляции (EMU.LIB).  При          
     выполнении программа будет использовать 8087/80287, если он есть;          
     в противном случае программа будет использовать специальное прог-          
     раммное обеспечение для 8087/80287 - эмулятор.                             
                                                                                
          Библиотека эмуляции работает так:                                     
                                                                                
          - когда  ваша  программа  начинает выполняться, то начальная          
     Си-программа определяет, есть ли 8087/80287 или нет;                       
                                                                                
          - если сопроцессор есть, то программа при помощи специальных          
                                                                                
     прерываний   для  8087/80287  разрешит  использование  микросхемы          
     8087/80287 для программы пользователя.                                     
                                                                                
          - если сопроцессора нет, то программа останавливает прерыва-          
     ния и переходит к эмуляционным подпрограммам.                              
                                                                                
          Пусть вы модифицировали RATIO.C таким образом:                        
                                                                                
          main()                                                                
         {                                                                      
             float  a,b,ratio;                                                  
                                                                                
             printf(" Введите два значения:  ");                                
             scanf("%f %f",%a,%b);                                              
             ratio = a/b;                                                       
             printf("Результат деления будет %0.2f\n",ratio);                   
          }                                                                     
                                                                                
                                                                                
          Если вы  используете  ТС (версию пользовательского интерфей-          
     са),  то нужно выйти в меню Options,  выбрать  Compiler,  выбрать          
     Code  generation  и  затем выбирать элемент Floating-point до тех          

                         - 449,450 -
                                                                                
     пор,  пока на следующем поле не прочтете Emulation. Когда вы ком-          
     пилируете и компонуете свою программу, Турбо Си автоматически вы-          
     бирает для нее соответствующие опции и библиотеки.                         
                                                                                
          Если вы используете ТСС (автономный компилятор),  то команд-          
     ная строка будет выглядеть следующим образом:                              
                                                                                
          tcc -mX ratio                                                         
                                                                                
          Если вы выполняете компоновку результирующей программы с ко-          
     мандной строки,  то должны точно определить  как  соответствующую          
     математическую  библиотеку  (зависящую от размера модели),  так и          
     файл EMU.LIB.  Опция эмуляции (-f) устанавливается по  умолчанию,          
     так что не нужно задавать ее, если ваш файл TURBOC.CFG не включа-          
     ет один из переключателей плавающей точки (-f- или -f87).                  
                                                                                
          Вызов TLINK будет выглядеть так:                                      
                                                                                
          tlink lib\c0X ratio, ratio, ratio, lib\emu.lib lib\mathX.lib          
                lib\cX.lib                                                      
                                                                                
     где X - буква, обозначающая соответствующую модель библиотеки.             
                                                                                
                                                                                
                                                                                
          Замечание: команда tlink записывается на одной строке.                
          Также помните, что порядок библиотек очень важен.                     
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                
                                                                                

                         - 451,452 -