Энциклопедия Turbo Pascal. Главы 1-4 - Когда следует применять ассемблер

ОГЛАВЛЕНИЕ

Когда следует применять ассемблер

Большинство программистов используют ассемблер только при крайней необходимости,  поскольку программировать на ассемблере достаточно сложно. Общее правило заключается в том, что вообще не следует использовать ассемблер - он создает слишком много проблем. Однако можно указать два случая практического применения ассемблера. Первый возникает когда нет другого пути решения задачи. Например,  когда требуется обеспечить непосредственную связь с оборудованием,  управление которым не предусмотрено в языке Турбо Паскаль.

Во-вторых, такая ситуация возникает при необходимости уменьшения времени выполнения программ и все возможности оптимизации кода Турбо Паскаля исчерпаны.  В данном случае необходимо делать тщательный выбор функций для их кодирования на ассемблере.  Если выбор будет сделан неправильно,  то эффект будет незначительный. При правильном выборе эффект может быть очень большим.  Для того, чтобы определить какие подпрограммы требуют перекодировки,  необходимо определить операционную блок-схему вашей программы. Обычно для реализации на ассемблере выбираются подпрограммы, которые используются внутри циклов,  поскольку они выполняются много раз. Кодирование на ассемблере процедуры или функции, которые выполняются один или два раза,  может не дать заметного эффекта, а кодирование на ассемблере функции, которая выполняется много раз, может дать такой эффект.  Например, рассмотрим следующую процедуру:

     procedure ABC;
     var
       t: integer;

     begin
       init;
       for t:=0 to 1000 do begin
         phase1;
         phase2;
         if t=10 then phase3;
       end;
       byebye;
     end;

Перекодировка процедур "init" и "byebye" может не повлиять заметно на скорость выполнения программы,  поскольку они выполняются только один раз.  Процедуры "phase1" и "phase2"  выполняются 1000 раз и их перекодировка несомненно даст заметный эффект. Несмотря на то, что процедура "phase3" расположена внутри цикла, она выполняется лишь один раз и поэтому ее перекодировка не даст эффекта.

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