- •5.Модульное программирование
- •5.1. Методы и проблемы модульного программирования
- •5.1.1. Реализация модульности за счет библиотек макроопределений
- •5.1.2. Реализация модульности за счет связывания объектных модулей
- •Объединение логических сегментов
- •Описание межмодульных обращений
- •5.2. Библиотеки объектных модулей
- •5.2.1. Создание библиотек объектных модулей и операции над ними
- •Команды библиотекаря
- •5.2.2. Использование библиотек объектных модулей
5.2.2. Использование библиотек объектных модулей
Для использования подпрограммы из объектной библиотеки необходимо объявить ее в разрабатываемой программе внешней (с помощью директивы EXTRNсм.подраздел 5.1.2) и вызвать командой CALL.
Затем на этапе компоновки программы сообщить редактору связей LINK имя используемой объектной библиотеки. Редактор связей извлечет вызываемую процедуру из библиотеки и включит ее в состав программы так же, как если бы она была отдельным модулем.
Если в прикладной программе требуются объектные модули из нескольких различных библиотек, то все библиотеки указываются редактору связей (например, в ответ на приглашение Libraries:) через знак сложения +.
Пример 5.8:
Создать библиотеку, содержащую подпрограммы для вычисления суммы S=A+B и разности D=AB слов, и использовать их в прикладной программе.
Для демонстрации модульного подхода к программированию представим каждую из подпрограмм в виде отдельного модуля, которые будут включены в библиотеку, а затем использованы из нее в прикладной программе. С учетом этого все файловые модули программы будут иметь вид:
; Модуль суммирования (файл ADDW.asm)
NAMEAddW ;Описание имени
PUBLICAddW ;Описание обращения
Code SEGMENTPARA PUBLIC;Описание сегмента кода
ASSUMECS:Code
AddW PPOCNEAR;Описание подпрограммы
ADD AX, DX ;Выполнение сложения
RET
AddW ENDP
Code ENDS
END;Конец подчиненного модуля
; Модуль вычитания (файл SUBW.asm)
NAMESubW ;Описание имени
PUBLIC SubW ;Описание обращения
Code SEGMENTPARA PUBLIC;Описание сегмента кода
ASSUMECS:Code
SubW PROC NEAR ;Описание подпрограммы
SUB AX, DX ;Выполнение вычитания
RET
SubW ENDP
Code ENDS
END;Конец подчиненного модуля
; Модуль основной программы (файл PROG.asm)
NAME PROG_AS ;Описание имени
EXTRNAddW:NEAR,SubW:NEAR;Описание обращений
Data SEGMENT ;Описание данных
A DW5h
B DW3h
S DW?
D DW ?
Data ENDS
Code SEGMENTPARA PUBLIC;Описание сегмента кода
ASSUMECS:Code,DS:Data
Start:MOV AX, Data ;Инициализация
MOV DS, AX ;сегментного регистра
MOV AX, A ;Передача входных
MOV DX, B ;параметров
CALL AddW ;Вычисление S=A+B
MOV S, AX ;Передача результата
. . . . . . . . . .
. . . . . . . . . .
MOV AX, A ;Передача входных
MOV DX, B ;параметров
CALL SubW ;Вычисление D=AB
MOV D, AX ;Передача результата
Code ENDS
ENDStart ;Конец главного модуля.
Библиотека объектных модулей создается следующим образом:
1) трансляция файловых модулей ADDW.asm и SUBW.asm с помощью команд:
MASM ADDW; Трансляция файла ADDW.asm
MASM SUBW;Трансляция файла SUBW.asm,
в результате которой создаются объектные файлы ADDW.obj и SUBW.obj;
2) создание библиотеки с помощью команд:
LIB ARITHM+ADDW,, Создание библиотеки ARITHM.lib с включением в нее модуля ADDW.obj
LIB ARITHM+SUBW,,Включение модуля SUBW.obj в библиотеку ARITHM.lib.
В результате создается библиотека ARITHM.lib, содержащая оба модуля (ADDW и SUBW).
Подготовка основной программы к исполнению в этом случае осуществляется следующим образом:
1) трансляция файлового модуля PROG.asm с созданием объектного файла PROG.obj с помощью команды
MASM PROG;
2) компоновка программы редактором связей с подключением библиотеки с помощью команды
LINK PROG,,,ARITHM
При этом создается исполняемый файл прикладной программы PROG.exe, путем исполнения которого в отладчике легко убедиться в достоверности полученного результата.