|
Приклади програми для виведення зображення
У текстовому режимі з використанням функцій BIOS Наведена нижче програма демонструє прийоми роботи з дисплеями у текстовому режимі за допомогою функцій BIOS. На екрані дисплея на чорному фоні за допомогою символів псевдографіки виводиться вікно синього кольору, в середині якого виведено рядок “Приклад 2”. NAME PROG Cursor macro ; макрос для встановлення курсора в певну позицію mov AH,02h mov BH,0 int 10h Endm Attr macro ; макрос для виведення символу mov BH, 0 mov AH, 09h int 10h endm STACKSG SEGMENT STACK DB 128 DUP(?) STACKSG ENDS DATE SEGMENT text db "ПРИКЛАД”, 0 DATE ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATE, SS:STACKSG START PROC FAR PUSH DS SUB AX,AX PUSH AX MOV AX,DATE MOV DS,AX CALL MAIN CALL stroka RET START ENDP MAIN PROC MOV AH,0 ; задаємо режим дисплея Mov al,3 INT 10h mov dh,5 ; позиція курсора mov DL,10 met2: cursor ; встановлюємо курсор в задану позицію Mov cx,60 ; кількість повторень Mov al,219 ; символ псевдографіки mov bl,059h ; задаємо колір attr ; виводимо символ із заданими параметрами inc dh cmp dh,10 jne met2 ret MAIN ENDP ; процедура для виведення рядка посимвольно stroka proc near mov dh,7 ; позиція курсора Mov dl,30 cursor ; встановлюємо курсор lea si,text-1 ; завантажуємо адресу рядка met3: inc si mov al,[si] mov bl,07Ch ; атрибути символу mov cx,1 attr ; виводимо символ inc dl cursor mov al,[si] cmp al,0 ; перевірка на кінець рядка jne met3 mov dl,'2' mov ah, 06h int 21h mov dh,22 mov dl,1 cursor ret stroka endp ends End start
Приклад програми для виведення зображення У графічному режимі з використанням функцій BIOS Наведена нижче програма демонструє прийоми роботи з дисплеями у графічному режимі за допомогою функцій BIOS. На екрані дисплея на чорному фоні за допомогою пікселів виводиться пряма лінія синього кольору. NAME PROG1 STACKSG SEGMENT STACK DB 128 DUP(?) ; резервування пам’яті для стека STACKSG ENDS DATE_SG SEGMENT con1 dw 100 con2 dw 50 DATE_SG ENDS CODE_SG SEGMENT ASSUME CS:CODE_SG, DS:DATE_SG, SS:STACKSG start proc far push ds sub ax,ax push ax call main ret start endp Main proc Мov ah,00h ; установлення режиму mov al,4h ; int 10h mov ah,0Bh ; установлення палітри кольорів mov bh,1 ; для фону зображення mov bl,1 ; номер кольору int 10h mov ah,0Bh ; установлення режиму mov bh,0 ; для виведення рисунка mov bl,6 ; номер кольору int 10h mov si,con2 ; кінцева координата mov cx,con1 ; початкова координата (№ стовпчика) mov dx,con2 ; номер рядка met1: mov ah,0Ch ; запис точки mov al,2 ; номер кольору inc cx Int 10h dec si cmp si,0 jne met1 ret main endp CODE_SG ends end start Порядок виконання роботи
1. Вивчити теоретичну частину даної лабораторної роботи. 2. Скласти програму для виведення зображення на екран дисплея згідно з індивідуальним завданням, використовуючи прямий доступ до відеопам’яті. 3. Скласти програму для виведення зображення на екран дисплея згідно з індивідуальним завданням, використовуючи функції BIOS. Лабораторна робота № 10 Робота з файлами Тема: Програмування основних операцій над файлами мовою Асемблер: створення, відкриття, закриття файлів. Введення даних у файл (пристрій) і виведення даних з файла (пристрою). Програмування операцій з атрибутами файлів. Робота з дисками, каталогами, пошук файлів.
Теоретичні відомості
Класи функцій для роботи з файлами
В операційній системі MS DOS існують два класи функцій для роботи з файлами: · функції, що використовують блок керування файлом (FCB); · функції, що використовують програмний канал (Handle). Перший клас функцій (функції 0Fh – 24h) застосовувався в MS DOS версій 1.х і на даний час має чисто історичний інтерес. Другий клас функцій (функції 39h – 62h) з’явився вперше в MS DOS версії 2.0 і широко використовується дотепер. Сутність каналу (інші назви – дескриптор файла, файловий індекс, логічний номер) полягає у наступному. Для того, щоб почати роботу з файлом або пристроєм, програма повинна відкрити цей файл або пристрій. Процес відкриття файла або пристрою полягає у присвоєнні йому певного номера каналу й виконання деяких інших ініціалізуючих дій. Після закінчення роботи з файлом або пристроєм його необхідно закрити, при цьому канал, що йому відповідає, стає вільним. Перші п’ять номерів каналів зарезервовані операційною системою для таких стандартних пристроїв: 0 – Stdin – стандартний пристрій введення (клавіатура); 1 – Stdout – стандартний пристрій виведення (екран диплея); 2 – Stderr – стандартний пристрій для виведення повідомлень про помилки (екран диплея); 3 – Stdaux – стандартний пристрій зв’язку (послідовний адаптер СОМ1); 4 – Stdptr – стандартний пристрій друку (перший паралельний порт LPT1). Ці пристрої доступні прикладним програмам, їх не треба відкривати, але програми можуть закривати їх. Пристрій Stdaux може використовуватись як для введення, так і для виведення даних. Наведені вище пристрої при початковому завантаженні операційної системи знаходяться у символьному режимі. Створення файлів Створюється файл за допомогою функції 3Сh переривання INT 21h. для виклику цієї функції необхідно помістити в регістри таку інформацію: На вході: AH = 3Ch. CX = Атрибути файла, який буде створено, а саме: 00 – звичайний файл; 01 – тільки для читання; 02 – прихований файл; 04 – системний файл. DS:DX = адреса ASCII-рядка, що містить шлях по каталогу для файла, що створюється. На виході: після завершення роботи функції в регістрі АХ знаходиться номер каналу цього файла або вказується код помилки, якщо файл не було створено. Додатково ця ж функція виконує також операцію відкриття щойно створеного файла. Варто зауважити, що якщо файл із вказаним ім’ям вже існує, він обрізається до нульової довжини. І тому, щоб випадково не знищити вміст файла з таким самим ім’ям, як і той, що створюється, можна використовувати функцію 5Bh переривання INT 21, яка виконує перевірку наявності файла з таким іменем. Можна для відкриття або створення файла з розширеними можливостями використовувати більш сучасну функцію 6Сh, яка з’явилася в останніх версіях MS DOS (DOS 4.0++). З її появою зникає необхідність відслідковувати існування файла, що створюється. Для коректної роботи цієї функції слід лише задати потрібні значення у відповідних регістрах.
Відкриття файла Відкриття існуючого файла виконується за допомогою функції 3Dh переривання INT 21h. Для виклику цієї функції необхідно розмістити в регістрах таку інформацію: На вході: АН = 3Dh. AL = байт режиму доступу. DS:DX = адреса ASCII-рядок, що містить шлях по каталогу файла, який відкривається. На виході: АХ містить номер каналу відкритого файла або код помилки, якщо файл не був відкритий. Байт режиму доступу визначає правила доступу до файла. Цей байт складається з чотирьох полів, і побітово поля в ньому розподіляються таким чином, як це наведено у таблиці 11. Таблиця 11 – Вміст байта режиму доступу
Усі інші комбінації заборонені. Розглянемо детальніше сутність режимів розділення й видів доступу. Режим розділення інформує операційну систему про те, які операції над файлом є доступними іншим процесам (програмам). За замовчування (режим спільного використання) забороняється всім іншим комп’ютерам мережі звертатись до цього файла. Іноді виникає потреба дозволити іншим програмам виконувати читання з файла, поки наша програма працює з ним. У цьому випадку необхідно встановити захист від запису, який забороняє записувати у файл іншим процесам, але дозволяє зчитувати з нього. Важливо також вказати, які операції програма збирається здійснювати з файлом (вид доступу). Встановлений за замовчуванням вид доступу (доступ на зчитування і запис) приводить до того, що запит на відкриття файла не дозволяється, якщо інший процес на цьому або іншому комп’ютері мережі відкрив даний файл в режимі розділення, відмінному від режиму “без захисту”. Але якщо необхідно лише читати з файла, то можна відкрити файл, який вже відкритий іншим процесом з режимом розділення з “захистом від запису”, встановивши йому “доступ на читання” (отже, підвищується доступність файла). Питання про використання файла декількома процесами залежить від режиму розділення та виду доступу. Закриття файла
Закриття файла виконується за допомогою функції 3Eh переривання INT 21h. Для виклику цієї функції необхідно помістити у регістри таку інформацію: На вході: AH = 3Eh; BX = номер каналу файла; DS:DX = адреса ASCII-рядка, що містить шлях по каталогу файла, що закривається. На виході: АХ містить код помилки. Після виконання цієї функції файл закривається, елемент каталога оновлюється, а всі системні буфери, що відведені для цього файла, звільняються.
|
|||||||||||||||||||||
|