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