на то что управление находится у функции DoWhateverYouWantO, программный 
обработчик прерывания автоматически обновляет отображаемое время. 
    В функции — обработчике прерывания ShowTime() (строки 56-85) используется 
единственный встраиваемый оператор asm для расшифровки текущего времени, 
перевода двоично-десятичного (BCD) результата в ASCII и записи цифр 
непосредственно в видеобуфер дисплея. Комментарии в листинге поясняют 
назначение каждой инструкции. 
    Трудно представить себе функцию, более системно зависимую, чем ShowTime(), 
которая вряд ли будет работать корректно на всех компьютерах, кроме 
стопроцентно совместимых с IBM PC с обычным или монохромным графическим 
дисплеем. Эта функция определенно не станет работать с нестандартной 
аппаратной частью. 
    Но такова природа ассемблера. Программы, написанные на ассемблере, тесно 
привязаны к своей машине. Однако, несмотря на это ограничение, если 
пользоваться ассемблером разумно, можно оптимизировать программы так, чтобы 
они работали настолько быстро, насколько это возможно, занимая при этом 
минимальное количество пространства. 

    Резюме 

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

    Ассемблерный код используется в программах для повышения 
производительности критических участков кода путем уменьшения их процента в 
общем времени выполнения. Определите такие критические участки в вашей 
программе (возможно, с помощью Turbo Profiler) и оптимизируйте инструкции в 
них с помощью ассемблера. Оптимизация некритического кода в программе обычно 
дает (или вообще не дает) слабый выигрыш в скорости выполнения. 

    Встроенный ассемблер Borland (BASM) ассемблирует встраиваемые операторы 
asm в программах на С и C++. Встраиваемые операторы завершаются точкой с 
запятой или символом новой строки. Несколько встраиваемых операторов следует 
заключать в скобки. 

    В BASM отсутствуют такие сложные средства TASM, как макросы, инструкции, 
специфические для процессоров 80386 и 80486, идеальный режим и расширенный 
ассемблерный синтаксис ТASM. Тем не менее, BASM способен удовлетворить 
большинство запросов, предъявляемых ассемблеру. 

    Встраиваемые операторы BASM распознают комментарии С и C++. В отличие от 
автономных ассемблерных программ, комментарии BASM не начинаются с точки с запятой. 

    Для более изощренного использования ассемблера следует писать внешние 
модули, которые затем можно ассемблировать с помощью ТASM и компоновать 
вместе с скомпилированными программами на С и C++. Этот метод позволяет 
пользоваться преимуществами таких расширенных средств TASM, как идеальный 
режим и макросы. Вы также получаете полное управление над низкоуровневыми 
инструкциями в ассемблируемых функциях. 

    Используйте утилиту H2ASH для упрощения преобразования высокоуровневых 
объявлений, директив #define, структур и прочего в эквивалентные ассемблерные 
объявления. Однако эта утилита — полезное, но несовершенное средство. 

    Прерывания временно приостанавливают выполнение программы для выполнения 
иных задач. Каждое прерывание имеет свой идентификационный номер, который 
также служит индексом в таблице векторов (адресов) обработчиков прерываний в памяти. 

    Обработчики программных прерываний аналогичны процедурам. В программе 
обработчики программных прерываний вызываются с помощью инструкции ассемблера 
int. Например, для вызова диспетчера функций DOS используется инструкция int 
0x21. Вы можете также вызывать процедуры BIOS с помощью программных 
прерываний, но при этом следует быть предельно осторожным; в BIOS существует 
много низкоуровневых процедур, которые при неверном использовании могут 
привести к потере данных. Вы можете запрограммировать свои собственные 
процедуры обработки прерываний на С и C++, однако большинство программистов 
предпочитают пользоваться ассемблером для достижения максимальной 
производительности . 
    

    456 49	Часть IV. Разработка приложений 
