Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

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






Директивы PROC и ENDP





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

Процедура имеет следующий вид:

имя PROC [[расстояние]]

...

предложения

...

имя ENDP

Директивы PROC и ENDP обозначают соответственно начало и конец процедуры и должны быть помечены одним и тем же именем, которое считается именем процедуры.

Необязательное расстояние может принимать значения FAR и NEAR. Если этот параметр опущен, предполагается NEAR.

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

Возврат из процедуры должен быть выполнен инструкцией RET. При этом следует помнить, что адрес возврата выбирается из стека (в соответствии со значениями регистров SS и SP). Для процедур с расстоянием NEAR адрес возврата состоит только из смещения и занимает в стеке 2 байта. Для FAR -процедур он занимает 4 байта стека, включая в себя базовый адрес (содержимое регистра сегмента) и смещение.

Допускается вложенность процедур.

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

Согласно стандартным соглашениям параметры размещаются в стеке, верх которого определяется содержимым регистров SP и SS.

Пример передачи параметров:

...

PUSH AX; 2-й параметр

PUSH BX; 1-й параметр

CALL addup

ADD SP,4; уничтожение параметров

...

addup PROC NEAR; адрес возврата для NEAR - 2 байта

PUSH BP; сохранение базового указателя

MOV BP,SP; загрузка базового регистра

MOV BX,[BP+4]; адрес 1-го параметра

MOV AX,[BP+6]; адрес 2-го параметра

...

POP BP

RET addup ENDP

Из этого примера ясно, что адрес возврата запоминается в верхушке стека перед параметрами (стек «растет» от больших адресов к малым).

Если бы процедура специфицировала расстояние FAR, адрес возврата занял бы 4 байта, а смещение для 1-го параметра составило бы 6 байтов.

 

 







Date: 2015-05-22; view: 545; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию