Суббота, 19.07.2025, 20:08 Приветствую Вас Гость

On-line: Книги, учебники, статьи

Главная | Регистрация | Вход | RSS

Глава 7. Использование ассемблера с языками высокого уровня(7)

; файл setup.asm
.386P
; плоская модель
.MODEL FLAT, stdcall
; константы
; прототипы внешних процедур
IFDEF MASM
; MASM
 EXTERN GetProcAddress@8:NEAR
 EXTERN LoadLibraryA@4:NEAR
 EXTERN FreeLibrary@4:NEAR
 EXTERN ExitProcess@4:NEAR
 EXTERN MessageBoxA@16:NEAR
 includelib c:\masm32\lib\user32.lib
 includelib c:\masm32\lib\kernel32.lib
ELSE
 includelib c:\tasm32\lib\import32.lib
 EXTERN GetProcAddress:NEAR
 EXTERN LoadLibraryA:NEAR
 EXTERN FreeLibrary:NEAR
 EXTERN ExitProcess:NEAR
 EXTERN MessageBoxA:NEAR
 GetProcAddress@8 = GetProcAddress
 LoadLibraryA@4 = LoadLibraryA
 FreeLibrary@4 = FreeLibrary
 ExitProcess@4 = ExitProcess
 MessageBoxA@16 = MessageBoxA
ENDIF
;--------------------------------------------
; сегмент данных
_DATA SEGMENT DWORD PUBLIC USE32 'DATA'
 TXT DB 'Ошибка динамической библиотеки',0
 MS DB 'Сообщение',0
 LIBR DB 'LNK.DLL',0
 HLIB DD ?
 PAR1 DB "C:\PROG\FILES.EXE",0
 PAR2 DB "C:\PROG\UNINST.EXE",0
 PAR3 DB "Универсальный поиск",0
 PAR4 DB "Программа универсального поиска",0
 NAMEPROC DB 'setup',0
_DATA ENDS

; сегмент кода
_TEXT SEGMENT DWORD PUBLIC USE32 'CODE'
; [EBP+10Н] ; резервный параметр
; [EBP+0CH] ; причина вызова
; [EBP+8] ; идентификатор DLL-модуля
START:
;загрузить библиотеку
 PUSH OFFSET LIBR
 CALL LoadLibraryA@4
 CMP EAX,0
 JE _ERR
 MOV HLIB,EAX
;получить адрес
 PUSH OFFSET NAMEPROC
 PUSH HLIB
 CALL GetProcAddress@8
 CMP EAX,0
 JNE YES_NAME
; сообщение об ошибке
_ERR:
 PUSH 0
 PUSH OFFSET MS
 PUSH OFFSET TXT
 PUSH 0
 CALL MessageBoxA@16
 JMP _EXIT
YES_NAME:
 PUSH OFFSET PAR4
 PUSH OFFSET PAR3
 PUSH OFFSET PAR2
 PUSH OFFSET PAR1
 CALL EAX
; закрыть библиотеку
; библиотека автоматически закрывается также
; при выходе из программы
 PUSH HLIB
 CALL FreeLibrary@4
; выход
_EXIT:
 PUSH 0
 CALL ExitProcess@4
_TEXT ENDS
END START

Рис. 3.7.13. Пример программы на языке ассемблера, осуществляющей вызов динамической библиотеки на Рис. 3.8.12.

Трансляция.
MASM32:

 ml /c /coff /DMASM setup.asm
 link /subsystem:windows setup.obj
TASM32:
 tasm32 /ml setup.asm
 tlink32 -aa setup.obj

Заключая данную главу, отмечу, что мы здесь рассмотрели далеко не все возможные случаи и проблемы стыковки ассемблера с языками высокого уровня. Разобрав, однако, предложенные примеры, Вы сможете самостоятельно решить все подобные задачи.


Вход на сайт
Поиск
Календарь
«  Июль 2025  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей
Наш опрос
Как Вам удобнее??
Всего ответов: 341
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0