Ответы на билеты / Билет_04_
.docПодпрограммы. Способы передачи данных. Процедуры. Ближние и дальние процедуры.
Подпрограмма
Возможно выполнение программного модуля, состоящего из нескольких ассемблированных программ. В этом случае программу можно рассматривать, как состоящую из основной программы и одной или более подпрограмм. Причины такой организации программ состоят в следующем:
- бывает необходимо скомпоновать программы, написанные на разных языках, например, для объединения мощности языка высокого уровня и эффективности ассемблера;
- программа, написанная в виде одного модуля, может оказаться слишком большой для ассемблирования;
- отдельные части программы могут быть написаны разными группами программистов, ассемблирующих свои модули раздельно;
- ввиду возможно большого размера выполняемого модуля, может появиться необходимость перекрытия частей программы в процессе выполнения.
Процедуры
Любая процедура представляет собой такую программу в миниатюре, которая, отработав, возвращает управление вызвавшей ее программе
На Ассемблере процедуры принято оформлять специальным образом: <имя_процедуры> PROC <тип>
<код>
<имя_процедуры> ENDP
У директивы PROC есть параметр <тип> (NEAR либо FAR). Параметр может отсутствовать, тогда считается, что он равен NEAR. При параметре NEAR или при его отсутствии процедура называется "ближней", при параметре FAR — "дальней". К ближней процедуре можно обращаться только из того сегмента команд, где она описана, и нельзя обращаться из других сегментов, а к дальней процедуре можно обращаться из любых сегментов, в том числе и из того сегмента, где она описана.
Вызов процедуры: CALL <имя_процедуры>
Возврат из процедуры: RET
Команда CALL записывает адрес следующей за ней команды в стек и затем осуществляет переход на первую команду указанной процедуры. Команда RET считывает из вершины стека адрес и выполняет переход по нему (возврат в головную программу). Напомним, что в ПК адрес команды, которая должна быть выполнена следующей, задается парой регистров CS:IP.
Передача параметров в процедуру
-
по значению: перед обращением к процедуре основная программа вычисляет значения фактических параметров, и именно эти значения передаются процедуре.
-
по ссылке: основная программа записывает в какой-то условленный регистр адрес фактической переменной, а процедура оперирует переменной с его помощью. Регистр может быть любой, но лучше, если это будет регистр-модификатор: BX, BP, SI, DI.