Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Системный сервис реализуется через прерывание ОС 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!