На главную Назад
Добро пожаловать, уважаемый посетитель!

Другая форма команды перехода - переход к подпрограмме.Некоторая

последовательность команд образует процедуру.Эта последователь-

ность реализует функцию, которая выполняется в программе

неоднократно и в разных местах.Вместо многократного повторения

этой последовательности во всех необходимых местах, программист

помещает эти команды в одном месте.Такая часть программы

становится подпрограммой или процедурой.

 

Каждый раз как в программе потребуется выполняемая процедурой

функция, она передает управление в эту процедуру командой перехода

на нее.Переход на процедуру называется вызовом процедуры или

командой вызова.Вызов процедуры отличается от команды перехода.

Команда вызова сохраняет адрес следующей за ней команды.Этот

адрес, называемый адресом возврата, указывает дорогу обратно к

исходной последовательности команд.

 

Давайте посмотрим, как работает вызов процедуры.Пусть, напри-

мер, нам надо написать программу, которая складывает в нескольких

местах 32-битовые числа.У микропроцессора 8088 нет команд,

которые выполняли бы такое сложение.Мы можем написать короткую

последовательность команд, которая будет выполнять сложение

32-битовых чисел.Эта часть программы будет процедурой.

 

Программист пишет эту подпрограмму точно также как любую другую

часть программы.Она является частью программы на языке

ассемблера.При написании основной части прикладной программы

программист будет иногда сталкиваться с необходимостью сложить два

32-битовых числа.Вместо того, чтобы писать команды для выполнения

этого сложения, в программу включают вызов процедуры 32-битового

сложения.Сразу после него продолжаются команды основной части

программы.Вызов этой процедуры производит впечатление мощной

команды 8088, так как один такой вызов выполняет 32-битовое

сложение.

 

При выполнении программы выозов процедуры выполняет не само

сложение с двойной точностью, а передачу управления соответствующей

процедуре.Процессор выполняет команды процедуры, реализующей

сложение.Последняя команда процедуры является специальной

командой для процедур и называется возвратом.Команда возврата

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

обратно в указатель команд.Это заставляет программу вернуться к

команде, следующей за вызовом процедуры.Вызов процедуры как бы

временно отводит течение программы в русло процедуры.После

выполнения процедуры выполнение возвращается к основной программе.

 

Команды, которые обеспечивают выполнение процедуры - CALL и

RETURN.CALL - это переход на процедуру.CALL сохраняет текущее

значение указателя команд в специальном месте памяти.Это

сохраненное значение указателя команд является адресом возврата.

Команда RETURN читает сохраненное значение указателя команд, поме-

щает его в указатель команд процессора и возвращает управление в

точку, следующую за командой CALL.Пример на Фиг.2.18 показывает

процедуру, вызываемую из двух различных точек программы.

 

Поскольку программа начинает свое выполнение с самого начала,

она сразу же попадает на команду A1.Команда CALL передает

управление в точку SOBROUTINE.Выполняя команду CALL, процессор

в том числе сохраняет адрес точки A2.После выполнения процедуры

команда RET (от английского return - возврат) восстанавливает

сохраненное значение A2.Управление возвращается к главной

программе.Дальше в главной прграмме выполняется CALL в точке A3,

что приводит к повторному выполнению подпрограммы.На этот раз

процессор сохраняет значение A4.После выполнения процедуры во

второй раз управление возвращается в A4.Обратите внимание, что

оба раза выполнялась одна процедура.В первый раз возврат после ее

Microsoft (R) Macro Assembler Version 5.00 5/11/80 16:25:59

Фиг. 2.18 Использование процедуры Page1-1

 

 

PAGE,132

TITLEФиг. 2.18 Использование процедуры

0000CODESEGMENT

ASSUMECS:CODE

 

0000E8 0008 RA1:CALLSUBROUTINE

 

000340A2:INCAX

 

0004E8 0008 RA3:CALLSUBROUTINE

 

000743A4:INCBX

 

;-----Здесь программа продолжается . . .

 

0008SUBROUTINEPROCNEAR

 

0008B8 0000MOVAX,0

000BBB 0000MOVBX,0

000EC3RET

 

000FSUBROUTINEENDP

 

000FCODEENDS

END

 

 

Фиг. 2.18 Использование процедуры

 

 

выполнения осуществлялся на A2, во второй раз - на A4.

Преимущество процедуры заключается в ее способности вызываться из

множества различных мест и каждый раз правильно находоить точку

возврата.

 

Где же хранится адрес возврата во время выполнения процедуры?

Существует множество возможностей, но микропроцессор 8088

использует для хранения этого значения стек.


 

Mail.ru