Команды вызовов подпрограмм

Команда вызова подпрограмм CALL передаёт управление с автоматическим сохранением адреса возврата. В поле операнда этой команды находится метка первой команды вызываемой подпрограммы. После того как подпрограмма закончит свои действия, завершающая её команда RET возврата передаст управление по запомненному адресу возврата. Адреса возврата хранятся в стеке. Вызовы подпрограмм могут быть внутрисегментными и межсегментными. В первом случае вызываемая подпрограмма находится в текущем кодовом сегменте(тип NEAR), во втором - в произвольном(тип FAR). В соответствии с этим в стеке запоминается содержимое либо только IP, либо IP и CS.Примеры записи операторов вызовов подпрограмм:

СALL Subr

CALL AX

CALL [BX][SI].

Команды управления циклами

Для организации программных циклов применяются следующие команды управления итерациями:

· LOOP<метка>

· LOOPE/LOOPZ<метка>

· LOOPNE/LOOPNZ<метка>

В этих командах предусматривается использование регистра CX в качестве счётчика цикла. Когда выполняется команда LOOP(повторить цикл), производится декремент регистра CX, и, если содержимое регистра CX<>0 - производится переход к началу цикла, в противном случае цикл завершается и выполняется следующая по порядку команда.

Мнемоники LOOPE и LOOPZ определяют одну и ту же машинную команду, которая производит декремент регистра CX, а затем передаёт управление в начало цикла, если (CX<>0) и флаг Z=1. В противном случае будет выполняться следующая по порядку команда. Команда LOOPNE и LOOPNZ

аналогична предыдущей команде, но здесь условие продолжения цикла имеет вид:

Name cikl

Assume cs:cod, ds:data

Data segment

Aa db 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;номер функции прерывания для вывода символа на экран

mov cx,10;счётчик числа просматриваемых чисел

l1: mov al,[bx];очередное число в AL

cmp al,5;сравнение текущего числа из памяти с числом 5

jbe l2;если ниже или равно - переход, в противном случае

add al,30h;формируется ASCII код выводимого числа

int 10h;программное прерывание, обеспечивающее вывод на экран числа

mov al,20h;вывод на экран

int 10h;пробела

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

loop l1;переход, если счётчик CX не равен нулю

ret

Start endp

Cod ends


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



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