Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Системный сервис MS DOS



Системный сервис реализуется через прерывание ОС 21h. Он используется прикладными программами для работы с файловой системой ПК, выполнения операций ввода – вывода, управления памятью. Вызов прерывания приводит к вызову системной функции.

Для обращения к системной функции нужно использовать старшую часть регистра АХ процессора, куда заносится номер требуемой функции, затем в зависимости от выбранной функции в другие регистры загружают требуемые для ее работы данные. После чего вызывается прерывание и используют результаты ее отработки.

Общая схема вызова системной функции:

Mov AH, номер_функции

;mov – загрузка исходных данных

;в регистры процессора

int 21h

;Использование результатов

Для завершения работы любой программы служит функция 4Ch

Вызов:

AH=4СH

AL=код завершения.

Нормальный код завершения 0.

Консольный сервис прерывания 21h используется для организации ввода вывода в прикладных программах.

Полный формат функций содержится в приложении. Функции по назначению:

Функция Назначение
01h Ввод символа с эхом.
07h Ввод символа без эха и без обработки ^+C.
08h Ввод символа без эха с обработкой ^+C.
02h Вывод символа на экран.
09h Вывод строки на экран.
40h Вывод строки символов на экран определенной длины.

Пример. Ввод с клавиатуры последовательности символов до нажатия клавиши ESC (ASCII код 27). Символы не отображаются на экране при вводе.


csg segment 'CODE'

;заполнение буфера с

;клавиатуры

assume cs:csg,ds:dsg,ss:ssg

begin:

mov ax,dsg

mov ds,ax

mov bx,offset buf;адрес

;буфера

go:

mov ah,08h;получить

;символ

int 21h

cmp al,27;клавиша ESC?

je ok;да

inc counter;символ

;принят

mov [bx],byte ptr al;нет,

;байт в буфер

inc bx;адрес

;следующего

;байта

jmp go;повторить ввод

ok:

;вывод введенных символов

;на экран

mov ah,40h

mov bx,1

mov cx,counter

mov dx,offset buf

int 21h

mov ax,4c00h;конец работы

int 21h

csg ends

dsg segment 'DATA'

buf db 128 dup('*');буфер для

;приема символов

counter dw 0;счетчик

;принятых байтов

dsg ends

ssg segment stack 'STACK'

dw 128 dup(0)

ssg ends

end begin


Особенности вызова системных функций:

1. Имена файлов и каталогов должны быть записаны в ASCIIZ формате. Такое имя должно заканчиваться кодом, который содержит ноль:

fname db ‘c:\doc\myfile.txt’,0.

2. При работе с файлами программа использует дескрипторы. Дескриптор это индекс, который связан с конкретным физическим файлом на диске. Для получения дескриптора нужно открыть или создать файл. Освобождение дескриптора – закрытие файла.

3. После выполнения системной функции у процессора Intel изменяется состояние регистра флагов. Если произошла ошибка то бит CF становится активным. Для проверки состояния этого бита используются команды JC – перейти, если бит активен, JNC – перейти, если бит не активен.

Файловые функции:

Функция Назначение
3Сh Создание файла.
3Eh Закрытие файла.
3Dh Открытие файла.
3Fh Чтение из файла.
4Ch Закрытие всех файлов. Завершение работы программы.
40h Вывод байтов на устройство.
41h Удаление файла.
43h Работа с атрибутами файла.
56h Переименование файла.
68h Сброс буферов файла.

Пример №1. Создание текстового файла с атрибутом архивации.


csg segment 'CODE'

assume cs:csg,ds:csg

org 100h

begin:

mov ah,3ch;создать

;файл

mov cx,20h

mov dx,offset fname

int 21h

jc gofin;ошибка создания

push ax;дескриптор

;в стек

;вывод строк в файл

mov ah,40h

pop bx

mov cx,n

mov dx,offset buf

int 21h

gofin:

;завершение работы

mov ax,4c00h

int 21h

fname db 'test.txt',0

;первая строка

buf db 'Системный сервис',10,13

;вторая строка

db 'прерывание 21h'

n = $ -buf;число записываемых байтов

csg ends

end begin


Пример №2. Чтение атрибутов файла. Определить наличие у файла атрибутов «архивации» и «только чтение».


csg segment 'CODE'

assume cs:csg,ds:csg

org 100h

begin:

;получить атрибуты

mov ah,43h

mov al,00h

mov dx,offset fname

int 21h

jc gofin;ошибка доступа

push cx

and cx,20h;атрибут А?

cmp cx,0

jne okArc;есть!

nexta:

pop cx

and cx,01h;атрибут Ro?

cmp cx,0

jne okRo;есть!

jmp gofin;конец работы

okArc:

mov ah,09h;атрибут А

mov dx,offset mes1

int 21h

jmp nexta

okRo:

mov ah,09h;атрибут Ro

mov dx,offset mes2

int 21h

gofin:

mov ax,4c00h

int 21h

fname db 'test.txt',0

mes1 db 'A - OK!',10,13,'$'

mes2 db 'Ro - OK!',10,13,'$'

csg ends

end begin


Функции для работы с каталогами:





Дата публикования: 2014-11-18; Прочитано: 335 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...