Написать программу с записью данных в файл. Проанализировать 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
Результат работы программы: