Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornaya_rabota_2_semestr.doc
Скачиваний:
13
Добавлен:
19.05.2015
Размер:
445.95 Кб
Скачать

Функция 5ан

Создает временный файл на диске

*Вход:

АН = 5АН

СХ - атрибут файла

DS:DX - указатель на маршрут

*Выход:

Флаг переноса установлен:

АХ = 2 - файл не найден

= 3 - маршрут не найден

= 4 - слишком много открытых файлов

= 5 - нет доступа

Флаг переноса сброшен:

АХ - хендл

*Примечание.

Функция 5Ah создает файл с уникальным именем. DX должен содержать смещение строки, указываю­щей маршрут. Маршрут представляет собой строко­вую переменную, задающую маршрут и имя файла и, кроме завершающего нуля, содержит еще 13 байт для записи имени файла, например,

path_l db "a:\userl",0 ,13 dup(0)

Временный файл не уничтожается автоматически, это можно сделать функцией 41h.

Прерывание 25н

Читает диск по секторам

*Вход:

AL - номер дисковода ( 0-А, 1-В и т.д.)

DS:BX - адрес буфера диска

СХ - количество секторов

DX - начальный относительный сектор

*Выход:

Флаг переноса установлен:

AL - код ошибки

Флаг переноса сброшен: нет ошибок

*Примечание.

Прерывание 25h читает с диска в буфер обмена количество секторов, указанных в DX. При вызове прерывания разрушаются все регистры кроме сегмен­тных, поэтому необходимо сохранять перед вызовом все регистры. В момент прерывания система помещает регистр флагов в стек, а при возвращении не выби­рает его, поэтому не забывайте очищать стек после прерывания.

Прерывание 26н

Записывает диск по секторам

*Вход:

AL - номер дисковода ( 0-А, 1-В и т.д.)

DS:BX - адрес буфера диска

СХ - количество секторов

DX - начальный относительный сектор

*Выход:

Флаг переноса установлен:

AL - код ошибки

Флаг переноса сброшен: нет ошибок

*Примечание.

Прерывание 26h пишет на диск буфер обмена количество секторов, указанных в DX. При вызове прерывания разрушаются все регистры, кроме сег­ментных, поэтому необходимо сохранять перед вызо­вом все регистры. В момент прерывания система помещает регистр флагов в стек, а при возвращении не выбирает его, поэтому не забывайте очищать стек после прерывания.

Пример выполнения работы Создать новую директорию new_dir на диске а:, сделать ее текущей, записать туда файл newfile.Txt и в него записать сообщение - "Это вновь создан­ный файл".

date segment

path_l db "new_dir",0

path_2 db 'newfile.txt',0

hendle dw 0

mes db 'Это вновь созданный файл', 10,13

date ends

code segment

assume cs:code,ds:date

start: mov ax, date

mov ds,ax

mov dl,0 ; текущий диск - A:

mov ah,OEh ; загрузка функции ОЕ

int 21h ; смена текущего диска

mov dx, offset path_l ; загрузка маршрута нового каталога

mov ah,39h ; загрузка 39-й функции

int 21h ; создание нового каталога

jc m1 ; переход, если есть ошибка

mov dx,offset path_l ; маршрут нового каталога

mov ah,3bh ; загрузка функции 3b

int 21h ; смена каталога

jc ml ; переход, если нет ошибки

mov dx, off set path_2 ; загрузка маршрута нового каталога

mov сх,0 ; установка атрибута чте­ние/запись

mov ah,3Ch ; загрузка функции ЗС

int 21h ; создание файла

jc ml ; переход, если есть ошибка

mov hendle,ах ; сохранить хендл

mov bx,hendle ; установить хендл

mov сх,26 ; количество символов для записи

mov dx,offset mes ; начало записывае­мого текста

mov ah,40h ; загрузка 40-й функции

int 21h ; записать в файл сообщение

jc ml ; переход, если есть ошибка

сmр ах,2б

jz m3

mov ах,13 ;код ошибки при неправильной передаче

jmp ml ; переход при несовпадении

mЗ: mov bx,hendle ; загрузить хендл

mov ah,3Eh ; загрузка функции ЗЕ

int 21h ; закрыть хендл

jc ml ; переход, если есть ошибка

jmp m2

m1: call er_disk ; переход на конец

m2: mov ax,4c00h ; выход

int 21h

er_disk proc near ; выдача сообщений об ошибках

push ds ; сохранить сегмент данных

mov cx,cs ; изменить

mov ds,cx ; сегмент данных

сmр ах,2 ; ошибка 2 ?

jnz @3 ; нет, продолжить анализ

mov dx,offset message2 ; загрузка буфера сообщения

jmp @15 ; переход на вывод сообщения

@3: сmр ах,3 ; ошибка 2 ?

jnz @4 ; нет, продолжить анализ

mov dx,off set message3 ; загрузка буфера сообщения

jmp @15 ; переход на вывод сообщения

@4: сmр ах,4 ; ошибка 4 ?

jnz @5 ; нет, продолжить анализ

mov dx, offset message4 ; загрузка буфера сообщения

jmp @15 ; переход на вывод сообщения

@5: сmр ах,5 ; ошибка 5 ?

jnz @6 ; нет, продолжить анализ

mov dx,offset message5 ; загрузка буфера сообщения

jmp @15 ; переход на вывод сообщения

@6: сmр ах,б ; ошибка 6 ?

jnz @12 ; нет, продолжить анализ

mov dx,offset message6 ; загрузка буфера сообщения

jmp @15 ; переход на вывод сообщения

@12: сmр ах,12 ; ошибка 12 ?

jnz @13 ; нет, продолжить анализ

mov dx,offset messagel2 ;загрузка буфера сообщения

jmp @15 ; переход на вывод сообщения

@13: сmр ах,13 ; ошибка 12 ?

jnz @14 ; нет, продолжить анализ

mov dx,offset messagel3; загрузка буфера сообщения

jmp @15 ; переход на вывод сообщения

@14: mov dx,offset messagel4; ошибка не распознана

@15: mov ah,9 ; загрузка 9-й функции

int 21h ; вывод сообщения об ошибке

mov dx,offset wait_

mov ah,9 ; загрузка 9-й функции

int 21h ; вывод сообщения

mov ah,8 ; загрузка 8-й функции

int 21h ; ожидание pop ds

ret ; выход из процедуры

message2 db 10,13,'Файл не найден',10,13,'$'

message3 db 'Маршрут не найден',10,13,'$'

message4 db 'Слишком много открытых фалов',10,13,'$'

message5 db 10,13,'Нет доступа',10.13,'$'

message6 db 'Несуществующий хендл',10,13,'$'

message12 db 'He разрешен доступ',10,13,'$'

message13 db 'Неверная передача данных в файл',10,13,'$'

message14 db 'Неопределенная ошибка',10,13,'$'

wait_ db 'Нажмите любую клавишу',10,13,'$'

er_disk endp

code ends

end start

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]