Суббота, 2025-06-21, 2:43 AM
Приветствую Вас Гость | RSS
Главная | Ассемблер работа с файлами | Регистрация | Вход
Меню сайта
Вход на сайт
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Программирование

    Ассемблер работа с файлами. Запись в файл

     

     

    Написать программу с записью данных в файл. Проанализировать 2 массива, которые состоят из 15  элементов каждый. Подсчитать количество элементов первого массива, которые имеют равные значения во втором массиве. Вывести соответствующие сообщения.

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

    .386                   ; директива определения типа микропроцессора 
    .model  flat, stdcall                    ; задание линейной модели памяти 
    ; но соглашения ОС Windows 
    option casemap:none          ; отличие малых и больших букв 
    include    \masm32\include\windows.inc 
    include    \masm32\include\kernel32.inc 
    includelib \masm32\lib\user32.lib 
    includelib \masm32\lib\kernel32.lib
    BSIZE  equ 42          ; количество байтов, которые записываются в файл
    .data               ; директива определения данные 
    fName   BYTE "лабораторная по файлам",0    
    fHandle DWORD ? ; резервирование у памяти 32-разрядной 
    cWritten  DWORD  ? ; резервирование 32-разрядного амбарчика памяти 
    ; с именем cWritten для адреса символов выведения 
    st1 db 'Количество одинаковых чисел в массиве = ',0 
    st1_kol = $ - st1 
    st2 db 50 dup(0) 
    stemp2 db 2 dup(0),0 
    ifmt db "%d ",0 
    masivA db 1,6,4,6,9,15,21,2,51,8,12,3,13 
    masivB db 1,5,4,43,13,4,65,9,7,21,32,23,15,51,66 
    temp db 15 
    prom db 0

    .code                                ; директива начала сегмента-данных 
    start:                ; метка начала программы с именем start

    mov eax,0 
    mov ebx,0

    lea esi, masivA

    M1: 
    mov eax,0 
    mov al, byte ptr[esi] 
    lea edi, masivB 
    dec temp 
    jz _end 
    inc esi 
    mov ecx,15 
    Temp1: 
    mov bl, byte ptr[edi] 
    inc edi 
    cmp eax,ebx 
    jz M3 

    M2:        
    loop Temp1 
    jmp M1

    M3: 
    inc prom 
    jmp M1

    _end: 
    lea edi, st2 
    lea esi, st1 
    mov ecx,st1_kol

    _m1: 
    mov al[esi] 
    mov [edi],al 
    inc esi 
    inc edi 
    loop _m1 
    mov eax,0 
    mov al,prom

             invoke  wsprintf \         ; АПИ-ФУНКЦИЯ преобразования числа 
    ADDR stemp2 \  ; адрес буфф., куда будет записан помет. символов 
    ADDR ifmt \                     ; адрес строки преобразования формата 
    eax                    ; регистр, содержание которого преобразовывается 
    lea esi, stemp2 
    mov ecx,2 
    dec edi 
    z1: 
    mov al[esi] 
    mov [edi],al 
    inc edi 
    inc esi 
    loop z1

    invoke CreateFile, ADDR fName ; адрес имени файла с символами 
    GENERIC_WRITE,\                ; запись в файл 
    0, NULL  ; параметры многозадачности 
    CREATE_ALWAYS                  ; уничтожить и создать новый файл 
    FILE_ATTRIBUTE_ARCHIVE, 0 
    mov   fHandle, eax        ; запоминание дескриптора устройства 
    invoke  WriteFile, fHandle    ; дескриптор устройства 
    ADDR st2        ; адрес области памяти, которая хранит символы 
    BSIZE      ; количество символов 
    ADDR cWritten         ; адрес памяти, где сохраняется число 
    NULL      ; записанных в файл символ_в 
    invoke  CloseHandle, fHandle           ; дескриптор файла 
    invoke  ExitProcess, 0              ; возвращение управления ОС Windows 
    end start                       ; директива окончания программы с именем start

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

    uCozCopyright MyCorp © 2025