русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

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

Написати програму із записом даних у файл. Проаналізувати 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

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

Переглядів: 4746

Повернутися взміст


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн