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