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