Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Создание процедур и передача параметров



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

Myproc proc

;команды

ret;команда завершения процедуры

Myproc endp

Располагаются процедуры в «ЕХЕ» программах перед точкой входа. В «СОМ» программах после данных, в конце программы. Вызов процедуры выполняется с помощью команды: call Myproc.

При вызове процедуры в стек заносится слово — содержимое регистра IP (адрес следующей команды), и в него загружается смещение к началу процедуры. При выполнении команды ret из стека восстанавливается содержимое регистра IP и программа продолжается с команды следующей за оператором call.

Наиболее часто используется передача параметров процедуре через стек. Перед вызовом процедуры в стек заносят требуемые параметры, которые затем извлекаются в процедуре с помощью косвенной адресации через региcтр BP. Используется косвенная адресация со смещением кратным 2. При возврате из процедуры указывается количество байтов помещенных в стек при ее вызове.

Пример. Процедура вывода символа по его коду.


;EXE program

codesg segment 'CODE'

assume CS: codesg,DS: datasg,SS: stacksg

;-----------------

getSym proc

mov bp,sp;адрес верхушки стека

mov ah,02h

mov dx,[bp+2];извлечь код символа

int 21h

ret 2

getSym endp

;------------------

begin:

;-------------------

mov ah,0

mov al,176

push ax;код символа в стек

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

;----------------------------

mov AX,4C00h

int 21h

;---------------------------

codesg ends

datasg segment 'DATA'

mes db 128 dup(0)

datasg ends

stacksg segment stack 'STACK'

dw 128 dup(0)

stacksg ends

end begin






Дата публикования: 2014-11-18; Прочитано: 240 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...