Читайте также: |
|
Згідно з останньою цифрою номера в групі вибрати варіант та написати програму з виведенням даних у файл:
1. Проаналізувати масив даних з 15 елементів. Підрахувати і зберегти в комірках пам’яті кількість елементів масиву, якщо їх значення менше або більше 132; кількість елементів масиву, значення яких дорівнюють 132. Вивести відповідні повідомлення.
2. Проаналізувати масив даних з 10 елементів. Додавати елементи масиву доти, поки значення суми не перевищить 512. Зберегти номер елемента, на якому відбулося переповнення. Якщо сума елементів не досягла значення 512, то видати відповідне повідомлення.
3. Проаналізувати масив даних з 16 елементів. Елементами масиву є числа 32, 64, 96 і 128. Підрахувати та вивести на екран кількість повторень кожного елемента.
4. Проаналізувати масив даних з 12 елементів. Створити масив, до якого входять елементи першого масиву, що дорівнюють 128. Перервати виконання програми, якщо буде знайдено 5 елементів зі значенням 128. Вивести відповідні повідомлення.
5. Проаналізувати 2 масиви, що складаються з 15 елементів кожен. Підрахувати кількість елементів першого масиву, що мають рівні значення в другому масиві. Вивести відповідні повідомлення.
6. Проаналізувати масив даних з 14 елементів. Підрахувати кількість елементів, значення яких дорівнює 55h. Рахунок перервати, якщо кількість елементів перевищить 3. Вивести відповідні повідомлення.
7. Проаналізувати масив даних з 15 елементів. Елементами масиву є числа 10, 20, 30 і 180. Підрахувати кількість повторень кожного елемента. Вивести відповідні повідомлення.
8. Для функції Y = 40Х + 65 видати в комірку пам’яті перше значення аргументу, при якому значення функції перевищить 1024. Початкове значення аргументу Х = 20.
9. Для функції Y = 40Х + 10 одержати перше значення, що перевищує 512, починаючи з Х = 1. Значення аргументу та функції записати в комірки пам’яті.
0. Для функції 7Х + 85 знайти перше значення аргументу, при якому молодші цифри результату виконання функції дорівнюють 155. Результат виконання функції та його аргумент розмістити в комірках пам’яті.
Програма, наведена у листингу 12.1 створює новий файл з іменем main та зберігає в ньому числа, які раніше були записані в програму.
Листинг 12.1. Створення файла з іменем main:
.386; директива визначення типу мікропроцесора
.model flat, stdcall; завдання лінійної моделі пам’яті
; та угоди ОС Windows
option casemap:none; відмінність малих та великих літер
include \masm32v9_0\include\windows.inc
include \masm32v9_0\include\kernel32.inc
includelib \masm32v9_0\lib\user32.lib
includelib \masm32v9_0\lib\kernel32.lib
BSIZE equ 20; кількість байтів, які записуються у файл
.data; директива визначення даних
fName BYTE "main",0; комірки для iменi файла
fHandle DWORD?; резервування в пам’яті 32-розрядної
; комірки з ім’ям fHandle для дескриптора файла
cWritten DWORD?; резервування 32-розрядної комірки пам’яті
; з ім’ям cWritten для адреси символів виведення
digs DW 1,2,3,4,5,6,7,8,9,10; числа, які записуються у файл
.code; директива початку сегмента-даних
start:; мітка початку програми з ім’ям start
invoke CreateFile, ADDR fName,; адреса імені файла з символами
GENERIC_WRITE,; запис у файл
0, NULL,; параметри багатозадачності
CREATE_ALWAYS,; знищити та створити новий файл
FILE_ATTRIBUTE_ARCHIVE, 0
mov fHandle, eax; запам’ятання дескриптора пристрою
invoke WriteFile, fHandle,; дескриптор пристрою
ADDR digs,; адреса області пам’яті, що зберігає символи
BSIZE,; кількість символів
ADDR cWritten,; адреса пам’яті, де зберігається число
; записаних у файл символів
NULL
invoke CloseHandle, fHandle; дескриптор файла
invoke ExitProcess, 0; повернення керування ОС Windows
; та визволення ресурсів
end start; директива закінчення програми з іменем start
Створює файл процедура CreateFile з параметрами.
Перший параметр містить адресу імені файла, що складається з символів. Ознакою закінчення імені служить нульовий байт.
Другий параметр показує процедурі, для чого відкривається або створюється файл. Параметр GENERIC_WRITE означає, що дозволений запис у файл, а параметр GENERIC_READ дозволяє тільки читання. Для читання і запису обидва параметри об’єднуються оператором АБО:
GENERIC_READ or GENERIC_WRITE
Третій параметр показує, чи може файл використовуватися іншими програмами в багатозадачному режимі.
Четвертий параметр теж має відношення до багатозадачності і містить адресу області даних, в якій вказано, чи може файл використовуватися програмами, породженими даною. Будь-яка програма в системі Windows може запускати інші програми.
П’ятий параметр показує, що робити, якщо файл вже існує. Значення CREATE_ALWAYS наказує знищити вже існуючий файл і створити на його місці порожній файл з тим же ім’ям. Інші значення цього параметра: CREATE_NEW (не чіпає вже існуючий файл), OPEN_EXISTING (відкриває тільки вже існуючий файл, зберігаючи його вміст), OPEN_ALWAYS (якщо файл існує, відкриває його, не чіпаючи вміст, якщо не існує, створюємо новий файл з вказаним ім’ям).
Шостий параметр задає атрибут файла: архівний, прихований, тільки для читання, системний і т.д. В нашому випадку параметр дорівнює FILE_ATTRIBUTE_ARCHIVE – звичайному для більшості файлів атрибуту.
Сьомий параметр дорівнює нулю.
Процедура CreateFile повертає в регістр еах дескриптор файла, використовуваний аналогічно дескриптору екрана або клавіатури.
Процедура WriteFile, використовувана для запису у файл символів, має ті ж параметри, що і процедура WriteConsole: дескриптор файла fHandle, адреса області пам’яті, що зберігає символи ADDR digs; кількість символів BSIZE; адреса пам’яті, де зберігається число записаних у файл символів ADDR cWritten; і, нарешті, нікому не потрібний нульовий покажчик NULL. Процедура WriteFile пише у файл байти.
Завершує роботу з файлом процедура CloseHandle, у якої всього один параметр – дескриптор файла. Ця процедура від’єднує файл від дескриптора, і після її виконання файл знову повинен бути відкритий, щоб стали можливими читання або запис.
Після того як стандартними засобами отримано файл з ім’ям, наприклад 12_1L.exe, натискаємо на клавішу Enter та отримаємо файл з ім’ям main. Для того щоб відкрити цей файл, необхідно нажати в оборочці FAR на клавішу F3. Шістнадцяткові коди цього файла можуть мати вигляд, наведений на рис. 12.1.
![]() |
Якщо у директиві визначення даних digs DW 1,2,3,4,5,6,7,8,9,10 використати слово DWORD, то числа будуть мати вже по чотири байти. І для того, щоб зберегти десять чисел необхідно замість BSIZE equ 20 вказати BSIZE equ 40. Інакше буде збережена у файлі тільки половина чисел від 1 до 5.
Дата добавления: 2014-12-18; просмотров: 133 | Поможем написать вашу работу | Нарушение авторских прав |
|