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



Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать неотразимый комплимент Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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: 401; Нарушение авторских прав



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