Прерывание 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,'$'