IBM PC

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

ра считается "близкой" и обращаться к ней можно

только из того сегмента команд, где она описана. Дело в том, что ас-

семблер будет заменять все команды CALL, где указано имя данной проце-

дуры, на машинные команды близкого перехода с возвратом, а все команды

RET внутри процедуры - на близкие возвраты. Если же в директиве PROC

указан параметр FAR, то это "дальняя" процедура: все обращения к ней и

все команды RET внутри нее рассматриваются ассемблером как дальние пе-

реходы. Обращаться к этой процедуре можно из любых сегментов команд.

Таким образом, достаточно лишь указать тип процедуры (близкая она или

дальняя), всю же остальную работу возьмет на себя ассемблер: переходы

на нее и возвраты из нее будут автоматически согласованы с этим типом.

В этом главное (и единственное) достоинство описания подпрограмм в ви-

де процедур. (Отметим, что метки и имена, описанные в процедуре, не

локализуются в ней.)

Например, вычисление ax:=sign(ax) можно описать в виде процедуры

следующим образом:

sing proc far ;дальняя процедура

cmp ax,0

je sgn1 ;ax=0 - перейти к sgn1

mov ax,1 ;ax:=1 (флаги не изменились!)

jg sgn1 ;ax>0 - перейти к sgn1

mov ax,-1 ;ax:=-1

sgn1: ret ;дальний возврат

sign endp

...

Возможный пример обращения к этой процедуре:

;cx:=sign(var)

mov ax,var

call sign ;дальний вызов

mov cx,ax