Лабораторная работа №7. Процедура (или подпрограмма) является одним из средств разработки модульных программ

Директивы процедур

Процедура (или подпрограмма) является одним из средств разработки модульных программ. Она представляет собой законченную последовательность, которая приводится в действие командой вызова CALL. Процедуры сокращают длину программы, обеспечивая экономию памяти. Отлаженные процедуры можно организовать в библиотеки. Метка в процедуре, которой передаёт управление команда CALL, называется точкой входа процедуры. Процедура выполняется до тех пор, пока не встретится команда возврата RET. В процедуре может быть несколько команд возврата.

Для организации процедур в языке ассемблера предназначены директивы PROC и ENDP. Директива PROC отмечает точку входа процедуры, а директива ENDP - окончание процедуры. Формат директив:

<имя> PROC <тип>

...

Тело процедуры

...

<имя> ENDP

В обеих директивах должно находиться одно и тоже имя процедуры. Оно представляет собой метку, указывающую точку входа процедуры. Тип процедуры может быть NEAR или FAR (по умолчанию принимается тип NEAR). Действие директив PROC/ENDP заключается в том, чтобы наименовать процедуру и установить её тип. В соответствии с типом ассемблер генерирует требуемые команды CALL и RET.

Рассмотрим пример. Пусть необходимо вывести на экран значения байтовой последовательности, предварительно увеличив каждое из них на 15h. Один из вариантов реализации указанной задачи представлен ниже:

Name procedur

Assume cs:cod, ds:data

Data segment

Aadb 9h,8h,3h,6h,5h,2h,3h,7h,1h,5h

Data ends

Cod segment

Start proc far

Push ds

Mov ax,0

Push ax

mov ax, data;инициализация сегментного

mov ds,ax;регистра

lea bx,aa;адрес байтовой последовательности в регистре BX

mov ah,0eh;в AH номер функции прерывания вывода символа на экран

mov cx,10;инициализация счётчика числа байт

l1: mov al,[bx];запись в AL значения текущего байта

add al,15h;сложение байта со значением 15h

call sym;вызов подпрограммы вывода байта на экран

l2: inc bx;смещение указателя на следующий байт

mov al, 20h;занесение в AL кода символа пробела

int 10h;вызов программного прерывания вывода символа на экран

Loop l1

Ret

Start endp


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: