Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_ОС_и_среды.rtf
Скачиваний:
68
Добавлен:
13.09.2019
Размер:
13 Мб
Скачать
☆

5. Системный сервис 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.

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

  2. После выполнения системной функции у процессора 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

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

Функция

Назначение

39h

Создание каталога.

3Ah

Удаление каталога.

3Bh

Смена текущего каталога.

47h

Получение текущего каталога.