Подпрограммы
2.15.1. Подпрограмма (subroutine) – программа, являющаяся частью другой программы и удовлетворяющая требованиям, которые язык программирования предъявляет к структуре программы [ 3 ].
Подпрограммы используются для уменьшения объема программы, а также с целью снижения трудоемкости и повышения качества программирования (снижения вероятности ошибок в программе). Наиболее часто к подпрограммам обращаются в том случае, когда в программе многократно повторяются одинаковые фрагменты.
2.15.2. В системе команд МК семейства MCS-51 (см. табл. 2.4) для вызова подпрограмм есть специальные команды LCALL (вызов подпрограммы в пределах всего адресного пространства программной памяти) и ACALL (вызов подпрограммы в пределах страницы размером 2К байт). По команде вызова подпрограммы процессором автоматически выполняются следующие операции:
1) содержимое программного счетчика PC увеличивается на 3,
2) инкрементируется содержимое регистра-указателя стека SP,
3) младший байт программного счетчика загружается в стек,
4) инкрементируется содержимое регистра-указателя стека,
5) старший байт программного счетчика загружается в стек,
6) в программный счетчик загружается 16-битный (LCALL) или 11-битный (ACALL) начальный адрес подпрограммы (адрес первой команды подпрограммы).
2.15.3. Подпрограмма должна заканчиваться командой RET (return), по которой из стека извлекается и загружается в программный счетчик адрес возврата в главную программу (сначала старший байт, а затем младший), в результате чего происходит переход к команде, следующей в главной программе за командой вызова подпрограммы.
2.15.4. Подпрограммы могут быть вложенными, т.е. одна подпрограмма может вызываться из другой. Количество вложенных подпрограмм ограничено только объемом памяти, отведенной под стек.
2.15.5. Если в подпрограмме задействованы какие-либо регистры, используемые главной программой, в начале подпрограммы содержимое этих регистров должно быть сохранено (обычно для этой цели используется стек), а перед выходом из подпрограммы содержимое этих регистров должно быть восстановлено (извлечение из стека осуществляется в обратном порядке).
2.15.6. Для передачи аргументов из главной программы в подпрограмму и передачи результатов из подпрограммы в главную программу можно использовать:
1) память данных,
2) регистры общего назначения,
3) флаги общего назначения,
4) стек.
Дата добавления: 2015-10-09; просмотров: 1029;