Data ends

Fix db 12

PUBLIC fix

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

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

Косвенный дальний вызов процедуры

Mov bx, offset subr

End start

Subr endp

Ret

Subr proc near

Start endp

 

При косвенном запуске программы возможны другие варианты,

например:

 

call word ptr bx ; адрес процедуры в регистре bx

dseg segment ‘data’

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

data segment 'data' ; сегмент данных

code segment 'code'

start:

…….

……..

mov al, res ; res в другом модуле

call far ptr add ; запускается программа add