Процедуры
До сих пор мы рассматривали примеры программ, предназначенные для одно-
кратного выполнения. Но, приступив к программированию достаточно серь-
езной задачи, вы наверняка столкнетесь с тем, что у вас появятся повторяющиеся
фрагменты кода. Одни из них могут состоять всего из нескольких команд, другие
занимать и достаточно много места в исходном коде. В последнем случае эти фраг-
менты существенно затруднят чтение текста программы, снизят ее
усложнят отладку и послужат неисчерпаемым источником ошибок. В языке ас-
семблера есть несколько средств, решающих проблему дублирования фрагментов
программного кода. К ним относятся:
процедуры;
макроподстановки (макроассемблер);
генерация и обработка программных прерываний.
В данной главе рассматриваются только основные понятия, относящиеся к вы-
зову процедур. Ввиду важности этого вопроса мы продолжим его изучение в гла-
ве 15 в контексте темы модульного программирования на ассемблере. Актуальная
для программирования под Windows проблема разработки библиотек DLL на ас-
семблере описана в [8]. Макроассемблеру посвящена глава 14.
Процедура, или подпрограмма, — это основная функциональная единица деком-
позиции (разделения на части) некоторой задачи. Процедура представляет собой
группу команд для
конкретной подзадачи и обладает средствами получе-
ния управления из точки вызова задачи более высокого уровня и возврата управ-
ления в эту точку. В простейшем случае программа может состоять из одной про-
цедуры. Другими словами, процедуру можно определить как правильным образом
оформленную совокупность команд, которая, будучи однократно описана, при не-
обходимости может быть вызвана в любом месте программы.
Для описания последовательности команд в виде процедуры в языке ассембле-
ра используются две директивы: PROC и ENDP.
Синтаксис описания процедуры таков (рис. 10.3).
Из рисунка видно, что в заголовке процедуры (директиве PROC) обязательным
является только задание имени процедуры. Среди большого количества операн-
дов директивы PROC следует особо выделить [расстояние]. Этот атрибут может при-
нимать значения NEAR или FAR и характеризует возможность обращения к проце-
дуре из другого сегмента кода. По умолчанию атрибут [расстояние] принимает
значение NEAR.
Процедура может размещаться в любом месте программы, но так, чтобы на нее
случайным образом не попало управление. Если процедуру просто вставить в об-
щий поток команд, то процессор воспримет команды процедуры как часть этого
Do'stlaringiz bilan baham: |