Меню сайта

Урок 14. Процедуры

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

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

— — — — — Давайте посмотрим, как работает вызовпроцедуры. — Пусть, напри-
— — — мер, нам надо написать программу, котораяскладывает в нескольких
— — — местах 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 Использование процедуры — — — — — — — — — — — — — — — — — — — — — Page -1-1


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 2.18 Использование процедуры
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME -CS:CODE

— — — — — — — — — -0000 — E8 0008 R — — — — — — — — — — — -A1: — — — — CALL — — — SUBROUTINE

— — — — — — — — — -0003 — 40 — — — — — — — — — — — — — — — — — — — A2: — — — — INC — — — -AX

— — — — — — — — — -0004 — E8 0008 R — — — — — — — — — — — -A3: — — — — CALL — — — SUBROUTINE

— — — — — — — — — -0007 — 43 — — — — — — — — — — — — — — — — — — — A4: — — — — INC — — — -BX

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

— — — — — — — — — -0008 — — — — — — — — — — — — — — — — — SUBROUTINE — — — — — PROC — — — NEAR

— — — — — — — — — -0008 — B8 0000 — — — — — — — — — — — — — — — — — — — — MOV — — — — AX,0
— — — — — — — — — -000B — BB 0000 — — — — — — — — — — — — — — — — — — — — MOV — — — — BX,0
— — — — — — — — — -000E — C3 — — — — — — — — — — — — — — — — — — — — — — — — — RET

— — — — — — — — — -000F — — — — — — — — — — — — — — — — — SUBROUTINE — — — — — ENDP

— — — — — — — — — -000F — — — — — — — — — — — — — — — — — CODE — — -ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END


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


— — — выполнения осуществлялся на A2, во второйраз — на A4.
— — — Преимущество процедуры заключается в ееспособности вызываться из
— — — множества различных мест и каждый разправильно находоить точку
— — — возврата.

— — — — — Где же хранится адрес возврата во времявыполнения процедуры?
— — — Существует множество возможностей, номикропроцессор 8088
— — — использует для хранения этого значениястек.

Категория: Программирование на Ассемблере | Дата: 06.03.13

Меню раздела
Блок