Написати програму із записом даних у файл. Проаналізувати 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
start end ; директива закінчення програми з ім'ям start
Результат роботи програми: