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.