Ассемблер и программирование для IBM PC



         

ГЛАВА 21. Компановка программ - часть 4


Директива EXTRN

Директива EXTRN имеет следующий формат:

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

Можно определить более одного имени (до конца строки) или закодировать дополнительные директивы EXTRN. В другом ассемблерном модуле соответствующее имя должно быть определено и идентифицировано как PUBLIC. Тип элемента может

Ассемблер для IBM PC. Глава 21 4

быть ABS, BYTE, DWORD, FAR, NEAR, WORD. Имя может быть определено через EQU и должно удовлетворять реальному определению имени.

Директива PUBLIC

Директива PUBLIC указывает ассемблеру и компановщику, что адрес указанного иддентификатора доступен из других программ Директива имеет следующий формат:

PUBLIC идентификатор [, ... ]

Можно определить более одного идентификатора (до конца строки) или закодировать дополнительные директивы PUBLIC. Идентификаторы могут быть метками (включая PROC-метки), переменными или числами. Неправильными идентификаторами являются имена регистров и EQU-идентификаторы, определяющие значения более двух байт. Рассмотрим три различных способа компановки программ.

ПРОГРАММА: ИСПОЛЬЗОВАНИЕ ДИРЕКТИВ EXTRN и PUBLIC ДЛЯ МЕТОК ------------------------------------------------------------

Программа на рис.21.3 состоит из основной программы CALLMUL1 и подпрограммы SUBMUL1. В основной программе определены сегменты для стека, данных и кода. В сегменте данных определены поля QTY и PRICE. В кодовом сегменте регистр AX загружается значением PRICE, а регистр BX - значением QTY, после чего происходит вызов подпрограммы. Директива EXTRN в основной программе определяет SUBMUL как точку входа в подпрограмму. Подпрограмма содержит директиву PUBLIC (после ASSUME), которая указывает компановщику, что точкой входа для выполне ния является метка SUBMUL. Подпрограмма выполняет умножение содержимого регистра AX (цена) на содержимое регистра BX (количество). Результат умножения вырабатывается в регистро вой паре DX:AX в виде шест. 002E 4000. Так как подпрограмма не определяет каких-либо данных, то ей не требуется сегмент данных. Если бы подпрограмма имела сегмент данных, то только она одна использовала бы свои данные. Также в подпрограмме не определен стековый сегмент, так как она использует те же стековые адреса, что и основная программа. Таким образом, стек определенный в основной программе является доступным и в подпрогрпмме. Для компанов щика необходимо обнаружить по крайней мере один стек и определение стека в основной программе является достаточным. Рассмотрим теперь таблицы иднтификаторов, вырабатываемые после каждого ассемблирования. Обратите внимание, что SUBMUL в таблице идентификаторов для основной программы имеет атрибуты FAR и External (внешний), а для подпрограммы - F




Содержание  Назад  Вперед