Понедельник, 06.05.2024, 02:05
Приветствую Вас Гость | RSS
Главная | | Регистрация | Вход
Меню сайта
Форма входа
Поиск
Календарь
«  Март 2012  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Архив записей
Наш опрос
Оцените мой сайт
Всего ответов: 20
Мини-чат
Друзья сайта
  • Заказ Художник
  • Рыбалка
  • Новости
  • Наш университет io-96
  • Железо и другие
  • Наш Counter-Strike
  • Google ot Turbokherson
  • Google ot Turbokherson87
  • Android
  • Программы и Софт
  • Программирование
  • Лечение здоровья
  • О Ремонт компьютер
  • Наш сайт Turbokherson
  • Программирование ICQ 378204653 от Turbokherson
    Главная » 2012 » Март » 30 » Dll на ассемблере. Динамические библиотеки (Dll-файли)
    01:48
    Dll на ассемблере. Динамические библиотеки (Dll-файли)

    Пример: Написать программу на ассемблер. Задан массив А из N = 40 элементов. Навести алгоритм и программу определения количества элементов массива А, которые удовлетворяют условию  L >= Ai >= M, где  L = 6 и M = 22.


    Текст программы
    файл 1.asm


    .386
    .model  flat,stdcall
    option casemap:none  ; отличие строчных и прописных букв

    includelib\masm32\lib\kernel32.lib

    ExitProcess proto :DWORD
    Mas_sum proto :DWORD, :DWORD, :DWORD ; прототип процедуры
    .code
    Mas_sum proc arg1:DWORD,arg2:DWORD,masiv:DWORD

                    mov ebx,0
    mov eax,masiv
    cmp eax,arg1
    jnc m1
    jmp _end
    m1:
    cmp eax,arg2
    jc m2
    jmp _end
    m2:
    inc ebx
    _end:

    ret          ; возвращение управления ОС
    Mas_sum endp    ; окончание процедуры с именем Mas_sum
    end         ; окончание программы с именем start

    end start                       ; директива окончания программы с именем start

    Файл 1dll.asm


    .386
    .model  flat,stdcall
    option casemap:none  ; отличие строчных и прописных букв
    include \masm32\include\windows.inc
    include \masm32\include\kernel32.inc
    include \masm32\include\fpu.inc
    include \masm32\include\user32.inc
    include \masm32\include\msvcrt.inc

    includelib \masm32\lib\user32.lib
    includelib \masm32\lib\kernel32.lib
    includelib \masm32\lib\msvcrt.lib
    includelib \masm32\lib\fpu.lib

    includelib 1.lib
    ExitProcess proto :DWORD
    Mas_sum proto :DWORD, :DWORD, :DWORD ; прототип процедуры

    .data       ; директива определения данные
    _c dd 40
    sum dd 0
    op1 dd 6 ; запись в 32-разрядную память op1
    op2 dd 22             ; минимальных предел
    frmt db "%d",0
    buf db 30 dup(?)
    stdout DWORD ?
    stdin DWORD ?
    cRead dd ?
    temp dd ?
    mas1 dd 40  dup(0)

    st1 db "Vvesty masiv: "
    st2 db "Вывод количества элементов в пределах (6,22) массива! А, 0
    st3 db 10 dup(0)
    ifmt db "количество = %d",0
    .code        ; директива начала кода программы

    _start:
    lea esi, mas1                  ; загрузка адреса начала массива
    mov ecx,_c
    m1:
    mov ebx,ecx
    invoke GetStdHandle,STD_OUTPUT_HANDLE
    mov stdout,eax
    invoke GetStdHandle,STD_INPUT_HANDLE
    mov stdin,eax
    invoke WriteConsoleA,stdout,ADDR st1,14,NULL,NULL ; VIVOD ST1
    invoke ReadConsole,stdin,ADDR buf,20
    ADDR cRead,NULL ; чтения числа как символ
    invoke crt_atoi,ADDR buf ; преобразовать символ в число
    mov [esi],eax
    add esi,4
    mov ecx,ebx
    loop m1
    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    mov ecx,_c
    lea esi, mas1                  ; загрузка адреса начала массива
    mov eax [esi]        ; загрузка числа
    m3:
    invoke Mas_sum, op1,op2,eax
    add sum,ebx
    add esi,4                                ; расчет адреса нового числа
    mov eax[esi]
    loop m3    

    mov ebx,sum

    invoke wsprintf \
    ADDR st3 \
    ADDR ifmt \
    ebx
    invoke MessageBox \
    NULL \
    addr st3 \
    addr st2 \
    MB_OK
    invoke ExitProcess,0
    ret
    end _start             ; конец программы

    Результат работы программы:


    http://life-prog.ru/view_zam.php?id=45&cat=3&page=2

    Просмотров: 1111 | Добавил: Turbokherson | Рейтинг: 0.0/0
    Всего комментариев: 1
    1 Turbokherson  
    0
    Листинг 2.8. Консольное приложение MS-DOS
    .model small
    .stack lOOh
    . data
    message DB "Привет, мир!", О
    lmessage EQU $-message
    . code
    main proc
    mov AX, @data
    mov DS, AX
    mov AH, 4Oh
    mov DX, offset message
    mov HX, 1
    mov CX, lmessage
    int 21h
    mov AX, 4C00h
    int 21h
    main endp
    end

    Имя *:
    Email *:
    Код *:
    Создать бесплатный сайт с uCozCopyright MyCorp © 2024