Программирование на Ассемблере


         

в отличие от главной программы,


                 ; Реализация алгоритма
                 ; Восстановление используемых регистров
                         .........
                            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.

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