Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ. Подпрограмма, в зависимости от выполняемых ею функций, может требовать передачи из вызывающей программы определенных данных





Подпрограмма, в зависимости от выполняемых ею функций, может требовать передачи из вызывающей программы определенных данных, которые принято называть аргументами или параметрами и возвращать в вызывающую программу результат вычислений. Некоторые подпрограммы могут вообще не принимать никаких параметров и не возвращать результат. Чаще всего подпрограмма (процедура) оформляется так, как показано в следующем фрагменте кода:

Листинг 7.1

mov AX, 0

mov BX, 0

jmpstart

addlproc; точка входа в процедуру addl

incAX

ret; возврат в вызывающую программу

addlendp

sublproc; точка входа в процедуру subl

decBX

ret возврат в вызывающую программу

subl endp

start:

call add1; вызовпроцедуры addl

callsub1 вызовпроцедурыsubl

jmpstart

Как видно из приведенного фрагмента кода, в начале процедуры (перед первой выполняемой командой) должна находиться директива proc, а после последней выполняемой команды — директива endp. Процедура обязательно должна заканчиваться командой ret. В одном ассемблерном файле с расширением ASM можно размещать несколько процедур.

Директива proc может принимать один из двух параметров: near или far. Параметр near указывает на то, что процедура является ближней, a far указывает на то, что процедура дальняя. Если параметр отсутствует, то считается, что процедура имеет тип near (поэтому параметр near обычно и не указывается).

К ближней (near) процедуре можно обращаться только из того сегмента команд, где она объявлена, а к дальней (far) процедуре — из любых сегментов команд, включая тот, где она объявлена. Для 32-разрядных приложений все вызовы процедур считаются ближними.

В момент вызова процедуры команда call помещает в стек адрес команды, следующей непосредственно за call, уменьшая значение указателя стека SP (ESP).

Команда ret вызываемой процедуры использует этот адрес для возврата в вызывающую программу, автоматически увеличивая при этом указатель вершины стека.

Типы адресации (near или far) команд ret и call должны соответствовать друг другу. Вызываемая процедура может вызвать с помощью команды call следующую процедуру и т. д., поэтому стек должен иметь достаточный размер для того, чтобы хранить в нем все записываемые данные.

Команда call может иметь один из перечисленных ниже форматов вызова:

• прямой ближний (в пределах текущего программного сегмента);

• прямой дальний (вызов процедуры, расположенной в другом программном сегменте);

• косвенный ближний (в пределах текущего программного сегмента с использованием переменной, содержащей адрес перехода);

• косвенный дальний (вызов процедуры, расположенной в другом программном сегменте, с использованием переменной, содержащей адрес перехода).

Листинг 7.2. Демонстрация дальних вызовов процедур (16-разрядная версия)

.model large

data segment

s1 DB 0dh, 0ah, " Direct far call of subrl demo! $"

s2 DB 0dh, 0ah, " Direct far call of subr2 demo! $"

data ends

code1 segment

assume CS: code:

mainproc; точка входа в основную программу

mov AX, @data

mov DS, AX

call far ptr subrl; дальнийвызовподпрограммы subrl

callfarptrsubr2; дальний вызов подпрограммы subr2

; код команды call в обоих случаях

; 9А < смещение> < сегмент>

movAH, lh

int 21h

mov Ax, 4C00h

int 21h

main endp

code ends

code2 segment

assume CS: code2

subrlprocfar: объявлениедальнейподпрограммыsubrl

lea DX, si

mov AH, 9h

int 21h

ret; команда ret имеет код 0CBh (возврат из дальней

; подпрограммы)

subrl endp

subr2 proc far; объявление дальней подпрограммы subr2

lea dx, s2

mov AH, 9h

int 21h

ret; команда ret имеет код 0CBh (возврат из дальней

: подпрограммы)

subr2 endp

code2 ends

СОДЕРЖАНИЕ РАБОТЫ

Отладить пример и убедитьсяв его работоспособности.

ВОПРОСЫ ВЫХОДНОГО КОНТРОЛЯ

1. Назовите форматы вызова процедур.

2. Приведите пример оформления процедуры.







Дата добавления: 2014-11-10; просмотров: 696. Нарушение авторских прав; Мы поможем в написании вашей работы!




Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...


Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

СИНТАКСИЧЕСКАЯ РАБОТА В СИСТЕМЕ РАЗВИТИЯ РЕЧИ УЧАЩИХСЯ В языке различаются уровни — уровень слова (лексический), уровень словосочетания и предложения (синтаксический) и уровень Словосочетание в этом смысле может рассматриваться как переходное звено от лексического уровня к синтаксическому...

Плейотропное действие генов. Примеры. Плейотропное действие генов - это зависимость нескольких признаков от одного гена, то есть множественное действие одного гена...

Методика обучения письму и письменной речи на иностранном языке в средней школе. Различают письмо и письменную речь. Письмо – объект овладения графической и орфографической системами иностранного языка для фиксации языкового и речевого материала...

Упражнение Джеффа. Это список вопросов или утверждений, отвечая на которые участник может раскрыть свой внутренний мир перед другими участниками и узнать о других участниках больше...

Влияние первой русской революции 1905-1907 гг. на Казахстан. Революция в России (1905-1907 гг.), дала первый толчок политическому пробуждению трудящихся Казахстана, развитию национально-освободительного рабочего движения против гнета. В Казахстане, находившемся далеко от политических центров Российской империи...

Виды сухожильных швов После выделения культи сухожилия и эвакуации гематомы приступают к восстановлению целостности сухожилия...

Studopedia.info - Студопедия - 2014-2025 год . (0.012 сек.) русская версия | украинская версия