Организация интерфейса между процедурами, расположенными в разных модулях

Cseg2 ends

Subr endp

Ret

Subr proc far

Cseg1 ends

Start endp

Ret

Call dword ptr subadr

Start proc far

Dseg ends

Subadr dd subr

cseg1 segment ‘code’

……

……….

cseg2 segment ‘code’

Используются директивы: EXTRN, PUBLIC, GLOBAL

 

ДирективаEXTRN объявляет некоторое имя внешним по отношению к данному модулю.

Это имя должно быть объявлено в другом модуле директивой PUBLIC.

 

EXTRN имя:тип [, имя:тип] ,[имя:тип] ….

Имя– идентификатор, определенный в другом модуле.

В качестве идентификаторов используются:

o имена переменных, определенные директивами db, dw, dd и т.д. ,

o имена процедур,

o имена констант.

 

Для переменных типможет быть: byte, word, dword, pword, fword, qword, tbyte.

Тип процедуры far(дальняя) или near(ближняя).

 

Если имя – константа, то тип в директиве – abs.

ДирективаPUBLICобъявляетимена, определенные в этом модуле, видимыми из других модулей.

 

PUBLIC имя [,имя] [,имя]…

Директива GLOBAL, используемая применительно к передаваемому объекту, интерпретируется как директива PUBLIC, а используемая применительно к принимаемому объекту – как EXTRN

ДирективаGLOBALимеет формат директивы EXTRN

GLOBAL имя:тип [, имя:тип]

 

Пример программы, использующей данные директивы:

;модуль1

GLOBAL res : byte, add : far