Показать сообщение отдельно

  #3  
Старый 07.05.2008, 17:44
Dober'man
Banned
Регистрация: 16.07.2007
Сообщений: 79
Провел на форуме:
801879

Репутация: 337
По умолчанию

Assembler
Создание программы путем объединения объектных модулей и библиотек
by Doberman


с краткими пояснениями...
Код:
; модуль prog.asm (главный, именно он содержит метку START,
; с которой начнется выполнение программы )
.586P
; плоская модель памяти
.MODEL FLAT, STDCALL
;-------------------------------------------------
; объявление внешней переменной и процедур
EXTERN  L:DWORD
EXTERN  PROC1@0:NEAR
EXTERN  PROC2@0:NEAR
EXTERN  PROC3@0NEAR
INCLUDELIB  MASM.LIB
; сегмент данных
DATA  SEGMENT
; здесь будут располагаться переменные 
DATA  ENDS
; сегмент кода
DATA  SEGMENT
; здесь будет располагаться ассемблерный код проги 
START:
MOV  L, 256
CALL  PROC1@0
PUSH  EAX
CALL  PROC2@0
PUSH  EAX
PUSH  EAX
CALL  PROC3@0
RET
TEXT  ENDS
END  START

; модуль prog1.asm
.586P
; плоская модель памяти
.MODEL  FLAT, STDCALL
PUBLIC  PROC1, L
;-----------------------------------------------
; сегмент данных
DATA  SEGMENT
; здесь будут располагаться переменные
L  DWORD  ?
DATA  ENDS
; сегмент кода
TEXT  SEGMENT
PROC1 PROC
            MOV EAX,L
            RET
PROC1 ENDP
TEXT  ENDS
END

; модуль prog2.asm
.586P
; плоская модель памяти
.MODEL FLAT, STDCALL
;------------------------------------------------
; сегиент кода
TEXT  SEGMENT
PROC2 PROC
            PUSH EBP
            MOV EBP,ESP
            MOV EAX,DWORD PTR [EBP+8]
            ADD EAX,100
            MOV ESP,EBP
            POP EBP
            RET 4
PROC2 ENDP
TEXT ENDS
END

; модуль prog2.asm
.586P
; плоская модель памяти
.MODEL FLAT, STDCALL
;-----------------------------------------------
PUBLIC PROC3
; сегмент кода
TEXT SEGMENT
PROC3 PROC
            PUSH EBP
            MOV EBP,ESP
            MOV EAX,DWORD PTR [EBP+8]
            ADD EAX,DWORD PTR [EBP+12]
            MOV ESP,EBP
            RET 8
PROC3 ENDP
TEXT ENDS
END
Для того чтобы из модулей получить программу, следует выполнить такие команды:
Код:
ML /m /coff prog.asm
- в результате будет создан объектный модуль prog.obj
Код:
ML /m /coff prog1.asm
- prog1.obj
Код:
ML /m /coff prog2.asm
- prog2.obj
Код:
ML /m /coff prog3.asm
- prog3.obj
Код:
LINK -LIB prog3.obj /out:masm.lib
- в результате будет создана объектная библиотека masm.lib
Код:
LINK /subsystem:console prog.obj prog1.obj prog2.obj
- в результате компоновки будет создан исполняемый модуль prog.exe

Модули prog1.asm и prog2.asm должны быть преобразованы к объектному виду, а потом скомпонованы в prog.obj. Модуль prog3.obj после преобразования его к объектному виду помещается в объектную библиотеку, которая затем используется при компоновке, благодаря директиве INCLUDEDIR в тексте prog.asm.

Последний раз редактировалось Dober'man; 07.05.2008 в 23:12..
 
Ответить с цитированием