в отличие от главной программы,
; Реализация алгоритма
; Восстановление используемых регистров
.........
ret
имя endp
end
В функции, в отличие от главной программы, в директиве end адрес точки входа не задается.
Общий вид вызывающей программы :
.MODEL имя
......
extrn имя_проц : proc
......
.CODE
begin:
.......
end begin
Директивы public и extrn в этих программах можно заменить директивой global имя_проц:proc. Но мы все-таки рекомендуем вам использовать директивы public и extrn, т.к. они позволяют более глубоко изучить механизм связи модулей. Именно эти директивы наиболее часто используются в опубликованных программах. После того, как вы уверенно почувствуете себя в использовании этих директив, можно их заменить директивой global.
Для создания исполняемой программы из нескольких модулей, выполняется раздельная трансляция для каждого модуля:
Tasm32 ./ml /zi имя_модуля1
Tasm32 /ml /zi имя_модуля2
...
и компоновка всех модулей вместе:
tlink32 /v имя_модуля1 имя_модуля2 ....import32.lib
Для формирования отладочной информации используются те же ключи, что и для одномодульных программ.
Примеры составления и использования внешних функций.
Пример 1. Составить внешнюю функцию для вычисления z=x+y.
Параметры передавать через стек.
;Внешняя функция для вычисления z=x+y. Параметры
; передаются через стек.
;Главная программа
; файл main.asm
ideal
p686
model flat
extrn ExitProcess:proc
extrn Summa:proc
dataseg
x dd 5
y dd 3
z dd ?
codeseg
begin:
push [x] [y]
call Summa
mov [z], eax
call ExitProcess
end begin
; Файл PROC.asm
ideal
p586
model flat
codeseg
proc _Summa
public _Summa
arg x:dword, y:dword
push ebp
mov ebp, esp
MOV EAX, [x]
add eax, [y]
pop ebp
ret
endp
end
Для трансляции этих файлов используются команды
Tasm32 /zi /ml main
Tasm32 /zi /ml proc
Tlink32 /v main proc import32.lib,
в результате выполнения которых получим файл main.exe.
Содержание Назад Вперед