evm

evm


ФГБОУ ВПО “Чувашский государственный университет им. И.Н.Ульянова”

 

 

 

 

Факультет информатики и вычислительной техники

Кафедра вычислительной техники

 

 

 

 

 

 

Лабораторная работа №7

Создание динамических библиотек.

 

 

 

 

 

 

 

 

 

 

 

 

 

   Работу выполнил:

       Студент группы ИВТ 41-14

    Вишневский В.А.

 Работу проверила:

доц. Андреева А.А.

 

 

 

 

 

 

 

 

 

 

 

 

 

Чебоксары 2016

Цель работы: Научиться создавать программы и под программы на win32.

 

Тексты Программы и подпрограммы:

 

Dllrus.asm

;функция удаления сиволов из строки

;function Copy(S:string;Start,Len:byte):string;

;текст подпрограммы

.386

.model flat

public Copy

 

.code

           _start@12:

           mov al,1

           ret 12

Copy proc

           push ebp ;сохранение ebp

           mov ebp,esp ;настройка ebp на вершину стека

 

;адреса параметров в стеке

Len equ byte ptr[ebp+8]

Start equ byte ptr[ebp+12]

S equ dword ptr[ebp+16]

Res equ dword ptr[ebp+20]

           push esi         

           push edi

           push ecx

           mov esi,S

           mov edi,Res   

           cld                  ;очистка флага направления

           lodsb  ;al:=(ds:[si]), si:=si+1 (al - длина S)

           stosb  ;(es:=[di]):=al, di:=di+1 (запись длины)

           mov ecx, 0     ;подготовка сх в качестве счетчика

           mov cl, al       ;количества символов строки Start

           jcxz Exit          ;выход если S - пустая строка(cx=0)

           

           cmp al, Start

           jb Exit             ;выход, если длины строки < Start , копируем пустую строку

           

           mov ah,0

           mov al, Start

           add si,ax

           dec esi

           

           sub cl, Start

           inc cl

           

 

           mov bl, Len

           mov    bh,0

           cmp cx, bx

           jbe m2

           mov cx,bx

           

                        

           

m2:     dec edi

           mov al, cl ;кол-во копируемых символов

           stosb

           rep movsb ;копируем в Res Len символов

Exit: pop ecx

           pop edi

           pop esi

           pop ebp

           ret 16

Copy endp

end _start@12

 

Dlldemo1.asm

include dlldemo.inc

includelib dllrus.lib

 

           extrn   Copy:near

 

           .386

           .model flat

           .const

title_string1   db       'String1',0

title_string2   db       'String2',0

           .data

           S db 12,'abcdeklmnjuy',0

           Start db 4

           Len db 5

           Res db 11 dup(0)

           .code

_start:

           push   MB_OK

           push   offset title_string1    ; title_string

           push   offset S+1

           push   0

           call     MessageBox

 

           mov    eax,offset Res

          push eax

           mov eax, offset S

           push eax

           mov al, Start

           push eax

           mov al, Len

           push eax

           call     Copy

 

           push   MB_OK

           push   offset title_string2

           push   (offset Res)+1

           push   0

           call     MessageBox

 

           push   0                     

           call     ExitProcess    

end     _start

 

Dlldemo2.asm

include dlldemo.inc

.386

.model FLAT,STDCALL

 

.const

title_string1   db       'String1',0

title_string2   db       'String2',0

libr            db     'dllrus.dll',0

nameproc       db     'Copy',0

.data

S db 12,'abcdeklmnjuy',0

Start db 4

Len db 7

Res db 11 dup(0)

hlib           dd     ?

Copy      dd     ?

 

.code

_start:

       call   LoadLibrary,offset libr        

       mov    hlib,eax

       call   GetProcAddress,hlib,offset nameproc

       mov    Copy,eax

 

       call   MessageBox,0,(offset S)+1,offset title_string1,MB_OK

                       mov bl,Len

                       mov dl, Start

       call   Copy,ebx, edx, offset S, offset Res

       call   MessageBox,0,(offset Res)+1,offset title_string2,MB_OK

       call   ExitProcess,0    

end    _start

Report Page