Процедуры и подпрограммы

Разрабатывая ПО контроллеров, программист применяет два способа организации программ:

монолитный, когда прикладная программа разрабатывается как единое целое;

модульный, когда программа строится из отдельных программных блоков. Каждый из них выполняет законченную логическую функцию, т.е. вычислительную процедуру, оформляемую в виде подпрограмм, к которой вызывающая (основная) программа может обра­щаться по необходимости. Обращение к подпрограмме реализуется вызовом по команде CALL MARK, где MARK - содержательное имя процедуры, используемое в качестве метки, отмечазжющей команду подпрограммы. Командой CALL в стеке сохраняется значение счетчи­ка команд, и возврат из подпрограммы реализуется в то место основ­ной программы, откуда был осуществлен вызов. Поэтому подпрограм­мы заканчиваются командой возврата RET (безусловного или услов­ного), которая восстанавливает содержимое счетчика команд из стека. Командой CALL не сохраняется в стеке содержимое регистров общего назначения и, если подпрограмма использует те же рабочие регистры, что и основная программа, то она должна обеспечить сохранение их содержимого. Хранение текущего содержимого регистров осуществля­ется стеком. Например, подпрограмма, в которой реализуются пере­численные функции, составляется так:

MARK: PUSH PSW ; сохранить в стеке содержимое
    ; аккумулятора и признаков
  PUSH В ; сохранить содержимое регистровой пары ВС
  PUSH D ; сохранить DE
  PUSH H ; сохранить HL
  : ; текст подпрограммы
  POP H ; восстановить содержимое регистровой пары HL
  POP D ; восстановить DE
  POP В ; восстановить ВС
  POP PSW ; восстановить PSW
  RET  

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

Чтобы подпрограмма успешно работала, необходимо однозначно определить место хранения ее исходных данных и выходные пара­метры.

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

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

Возможности МП характеризуются тремя способами передачи параметров:

- через память. Основная программа обязательно содержит последовательность команд:

STA MEMORY

CALL MARK 1

или:

LXI H, MEMORY MOV M,r

CALL MARK 1

Подпрограмма MARK 1 должна содержать команду LDA MEMORY. При передаче выходных параметров через память в под­программе должна соблюдаться такая последовательность команд'

STA MEM1

RET

или:

LXI H, MEM1

MOV М,г

RET

В основной программе после команды вызова подпрограммы должна быть команда LDA MEM1;

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

Программа умножения байтов. В аккумуляторе находится множитель, в регистре С - множимое, а результат формируется в регистровой паре HL:

MULT: DCR A ; декремент множителя RM








Дата добавления: 2019-02-07; просмотров: 285;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.